Update to Cutaway
Snapshot Nov 3, 2026 · 00:13 UTC · version 0.3.1
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 3 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Oct 31, 2026 · 01:19 UTC
780d933c35c085fd1124da437a5e4751865ff8d1a80a725a29d6233777c5e763
Nov 3, 2026 · 00:13 UTC
105ad03424c0a676adc6ca9f09dd312ca3d446d6c213b60037683edc12887f69
Package file
Oct 31, 2026 · 01:19 UTC
9278
Nov 3, 2026 · 00:13 UTC
11549
Package file
Oct 31, 2026 · 01:19 UTC
6468cdc0a3d4ec903f2d19e9bc58c3d0e849d79455533397f303844a0570fa1d
Nov 3, 2026 · 00:13 UTC
86e64aa13976163696ef6204591c0eb3db6ad7e31c49763057f970d0fd3fcae5
Package file
Oct 31, 2026 · 01:19 UTC
2407
Nov 3, 2026 · 00:13 UTC
2635
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
skills/cutaway/custom/controls.mjs →
skills/cutaway/custom/guide.md →
skills/cutaway/custom/page.mjs →
skills/cutaway/custom/style.css →
README.md
− removed · + added
--- before +++ after @@ -12,11 +12,11 @@ ## Use in ChatGPT -Public installation is coming soon. Once installed, select **Cutaway** using `@` in a new conversation and describe the machine you want to understand. +[Install Cutaway in ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6acd34e6e95c81919f7fcf2864d55591). Once installed, select **Cutaway** using `@` in a new conversation and describe the machine you want to understand. Workspace admins can build the [marketplace package](#packaging) and follow the [workspace import instructions](https://learn.chatgpt.com/docs/enterprise/plugin-management). For local development, see the [plugin setup guide](https://developers.openai.com/plugins/build/plugins). -Imported packages that declare servers in `mcp.json`, including this repository's package, are marked **Desktop only**, even when the server uses HTTPS. For web testing, import the drawing skill without that declaration, or reference an existing registered ChatGPT app through `.app.json`. Public submission uses the **With MCP** flow. See the [import restrictions](https://learn.chatgpt.com/docs/enterprise/plugin-management#desktop-only-plugins) and [packaging guide](https://developers.openai.com/plugins/build/plugins). +Imported packages that declare servers in `mcp.json` are marked **Desktop only**, even when the server uses HTTPS. For private web testing, import `dist/cutaway-photo-web-test-<version>.zip`. It includes the drawing skill without the MCP declaration. Public submission uses `dist/cutaway-<version>.zip` through the **With MCP** flow. The private-import badge doesn't establish the public listing's availability. See the [import restrictions](https://learn.chatgpt.com/docs/enterprise/plugin-management#desktop-only-plugins) and [submission guide](https://developers.openai.com/plugins/deploy/submission). Try “Show the GE9X compressor,” “Extend the wing flaps to 25 degrees,” or “Open the espresso machine while brewing.” The model opens inside compatible ChatGPT clients, with links to open it in a browser or download the selected view. Custom cutaways use the bundled drawing skill. @@ -43,6 +43,12 @@ Replace the starter mechanism and research record before delivering a drawing. The validator checks the generated files; browser and ChatGPT checks are separate. +The 0.3.1 source adds **Download video** to custom cutaways. This update has not yet been submitted to the public listing. It runs one full cycle and prepares a silent, square H.264 MP4 with the drawing, stage captions, and scope note. Keep the tab open while it records; Cancel restores the previous view. Everything runs locally, without sending the drawing or source photo to a server. + +Video export requires browser support for H.264 recording. If the ChatGPT preview cannot export it, download the HTML and open it in a current Chrome or Safari browser. **Save MP4** lets you retry a completed download. The hosted examples still offer HTML and SVG. Manual testing has confirmed MP4 playback, export from a ChatGPT preview, and upload to X. + +`bun run check:video` exercises the real browser encoder from both the standalone HTML and a sandboxed preview fragment, then verifies playable, silent MP4s. It uses the same `CUTAWAY_PLAYWRIGHT` and `CUTAWAY_BROWSER` overrides as the existing browser checker. The ordinary test suite checks export controls and failure handling with browser API substitutes; it does not verify encoding. The sandbox check does not establish compatibility with ChatGPT's actual preview policies. + ## Demos and prompts These previews show the finished hardware demos. Each demo runs offline and includes controls, sources, and an explanation of its simplifications. Animations start paused. @@ -132,7 +138,7 @@ The UI uses the MCP Apps bridge. Controls run locally; “Discuss this view” sends the current settings to the conversation. Downloads preserve the selected state and the applicable license notices. All animation starts paused. -For a development connection, use a reachable HTTPS endpoint ending in `/mcp` and no authentication. See OpenAI’s [connection instructions](https://developers.openai.com/plugins/build/app-quickstart). Public directory installation is pending. +For a development connection, use a reachable HTTPS endpoint ending in `/mcp` and no authentication. See OpenAI’s [connection instructions](https://developers.openai.com/plugins/build/app-quickstart). For normal use, [install Cutaway from the public directory](https://chatgpt.com/plugins/plugin_asdk_app_6acd34e6e95c81919f7fcf2864d55591). ## Packaging @@ -140,11 +146,26 @@ bun run package ``` -This creates `dist/cutaway-<version>.zip` and `dist/workspace-marketplace/`, using the version in [plugin.json](plugin.json). The plugin contains the drawing toolkit, generation instructions, and remote MCP connection in [mcp.json](mcp.json). The server deploys with the website; the offline demos also ship separately. +Every package build creates both ZIPs, using the version in [plugin.json](plugin.json): + +| File | Use | +| --- | --- | +| `dist/cutaway-<version>.zip` | Public submission, including the drawing skill and hosted MCP tools. | +| `dist/cutaway-photo-web-test-<version>.zip` | Private import into ChatGPT on web, with the same drawing skill and templates. Hosted example tools are omitted. | + +The private copy appears as **Cutaway Photo Web Test**, so it can be installed alongside Cutaway. Import it into ChatGPT, start a new chat, select it with `@`, and attach a photo. This tests photo generation; the complete plugin's hosted tools need their own connection test. + +To refresh only the private ZIP while a submission is under review: + +```sh +bun run package:web-test +``` + +This leaves the submission ZIP and workspace marketplace unchanged. The full build also creates `dist/workspace-marketplace/` with the submission package. The server deploys with the website; the offline demos ship separately. For workspace import, copy the contents of `dist/workspace-marketplace/` into a GitHub repository, preserving the hidden `.agents` directory. Reimport or reinstall the package after rebuilding to use the changes. -Run `bun run release` to build `dist/releases/<version>/`. It contains plugin, source, marketplace, hardware, and software-example archives, plus `SHA256SUMS`. Copy exported source outside `dist/` before editing it; builds replace generated files. +Run `bun run release` to build `dist/releases/<version>/`. It contains plugin, source, marketplace, hardware, and software-example archives, plus `SHA256SUMS`. Release and website builds also generate both ZIPs in `dist/`; the private test ZIP stays out of the public downloads. Copy exported source outside `dist/` before editing it; builds replace generated files. ## Credits and license
Full technical diff · 17 changed fields
changed /files/README.md/sha256
"780d933c35c085fd1124da437a5e4751865ff8d1a80a725a29d6233777c5e763"
"105ad03424c0a676adc6ca9f09dd312ca3d446d6c213b60037683edc12887f69"
changed /files/README.md/size
9278
11549
changed /files/plugin.json/sha256
"6468cdc0a3d4ec903f2d19e9bc58c3d0e849d79455533397f303844a0570fa1d"
"86e64aa13976163696ef6204591c0eb3db6ad7e31c49763057f970d0fd3fcae5"
changed /files/plugin.json/size
2407
2635
changed /files/skills~1cutaway~1SKILL.md/sha256
"20d4fe9cb699bca38bd72e04b1925c446b3bdbf3ff8ac37622c6b1e095bfdfb3"
"766ce6de237cba4e95a628e31c8e204b70e0ab27194d19b0b5e5cc2b497de496"
changed /files/skills~1cutaway~1SKILL.md/size
16044
16518
changed /files/skills~1cutaway~1custom~1controls.mjs/sha256
"b06934927c9b67e87e4d8a3e2871b40301d28d19c05a3684e8fef20354ddc1a5"
"bd19eacfd546af0ecba1c1667bce6491f7c63e97971ded1fac7fc0ec2cbc6128"
changed /files/skills~1cutaway~1custom~1controls.mjs/size
6112
8659
changed /files/skills~1cutaway~1custom~1guide.md/sha256
"6b298b60e9bd8a47e63346c34e81f74f4ae0d03704ce7a8277a3af84c4de1000"
"e358f6d7a5aa6fc75185eeb0376507e1bd0ee1fc2944b1d7de244337b6f9d009"
changed /files/skills~1cutaway~1custom~1guide.md/size
7230
8695
changed /files/skills~1cutaway~1custom~1page.mjs/sha256
"3d5d467d17ff0f8b733ab29b5d1d339bdc4e60cf42b577a12f7851e8e562319f"
"8c5dfa0a106f7616928b5f6503ac6ff9e4dee0e2986ee8237e9f72d97ff2fea2"
changed /files/skills~1cutaway~1custom~1page.mjs/size
3606
3792
changed /files/skills~1cutaway~1custom~1style.css/sha256
"9deb8af03bda3f88877374335fcc25a2f6836d904c48f96c74ebdfa87603f247"
"1133a848bb421b0ed0b50e4bc66a9c44ccd567538b45229dc5ebb1866ed97991"
changed /files/skills~1cutaway~1custom~1style.css/size
4704
4852
changed /files/skills~1cutaway~1custom~1validate.mjs/sha256
"0cc6a4148f9ba77d670dd95b0a3c994e8748fca32912d1afdc2997b700d0954c"
"2fbb6dd9baf3a36b8f2b6b237b731ae274ff1c8dca8ff2da31393b5b99471a02"
changed /files/skills~1cutaway~1custom~1validate.mjs/size
5935
5987
added /files/skills~1cutaway~1custom~1video.mjs
Field was absent
{
"sha256": "270a6de3d015914f74f8457b9198424576d90a1a9abdc828be056a1338ce925d",
"size": 7457
}Full snapshot data
{
"files": {
".app.json": {
"sha256": "691ca5722cb79a9555266dfb3e442b1f8c56e0d17e3a57f4578275f6f176eac1",
"size": 99
},
"LICENSE": {
"sha256": "be4c5b56f7543eb1ec0ceca0579db65d3d741c25a0e7c69722b074023f6ce970",
"size": 1068
},
"README.md": {
"sha256": "105ad03424c0a676adc6ca9f09dd312ca3d446d6c213b60037683edc12887f69",
"size": 11549
},
"THIRD_PARTY.md": {
"sha256": "93c3ab958eaf96d5e2c62ece16fbfed46114d99d945ea6446c94c6a722f306a9",
"size": 3811
},
"assets/examples/boxer.svg": {
"sha256": "d9d67bdbf46dc97223a88a7ccb4d97c7303299cc4ea9dd6729d74db4c568b216",
"size": 275901
},
"assets/examples/espresso.svg": {
"sha256": "ace1e36f7e97bd27053e0fd5bfa811ac36b882c8d6c1af39cac750c7d84a4258",
"size": 319350
},
"assets/examples/jet-engine.svg": {
"sha256": "857e9e9c1cb949f3a1fb25ada1ee7ab88388140f803b2fab7826652c0ef8254f",
"size": 246931
},
"assets/examples/wing.svg": {
"sha256": "42ee0115f152f31dd6ac1d7eefd9241ee87a15af4bad9b06efdb062caa512e2c",
"size": 31417
},
"assets/icon-dark.svg": {
"sha256": "cf0bd2d5fcb901d97f06b1c27c20cbf92d61b0fcb625c2afe3a5ffc38f80083e",
"size": 1060
},
"assets/icon.svg": {
"sha256": "a02079104aa19aa1fc436d648dff7e2608757b38d01ea27395ef5d27cf117879",
"size": 1060
},
"mcp.json": {
"sha256": "3b70e49fa069ee4e29a3b84cf47468b96c3cbc2b8349b3f47d43664d534edd2e",
"size": 268
},
"plugin.json": {
"sha256": "86e64aa13976163696ef6204591c0eb3db6ad7e31c49763057f970d0fd3fcae5",
"size": 2635
},
"skills/cutaway/SKILL.md": {
"sha256": "766ce6de237cba4e95a628e31c8e204b70e0ab27194d19b0b5e5cc2b497de496",
"size": 16518
},
"skills/cutaway/agents/openai.yaml": {
"sha256": "ee24a8ba99be4c0bf115bd1922ab42fb317d4745cb11ebc6505f67e92b6655d5",
"size": 260
},
"skills/cutaway/custom/build.mjs": {
"sha256": "03fde9d64e7a5690cebb33a494c56c568ab3e49956685aa8052aaf417ecc1baa",
"size": 1658
},
"skills/cutaway/custom/contract.mjs": {
"sha256": "2fbb74f93ec0360eab7ee1dadc6feb58cb37339d4146395f6dd5b2c4bed7936c",
"size": 5109
},
"skills/cutaway/custom/controls.mjs": {
"sha256": "bd19eacfd546af0ecba1c1667bce6491f7c63e97971ded1fac7fc0ec2cbc6128",
"size": 8659
},
"skills/cutaway/custom/drawing.mjs": {
"sha256": "076c3430607e1c569fa6ea23e16ebe882db2453b4d542cfc13602fdbd6434eb6",
"size": 948
},
"skills/cutaway/custom/guide.md": {
"sha256": "e358f6d7a5aa6fc75185eeb0376507e1bd0ee1fc2944b1d7de244337b6f9d009",
"size": 8695
},
"skills/cutaway/custom/materials.mjs": {
"sha256": "a0ac40d7318f4bb1f57996ec3d8835a90538bbbf4a6aa8a1c810a6c21486a7e0",
"size": 1229
},
"skills/cutaway/custom/model.mjs": {
"sha256": "54ef43320348fee4634da767cacb7c40d22f42e92a14935a2923f61a752a44ac",
"size": 1019
},
"skills/cutaway/custom/page.mjs": {
"sha256": "8c5dfa0a106f7616928b5f6503ac6ff9e4dee0e2986ee8237e9f72d97ff2fea2",
"size": 3792
},
"skills/cutaway/custom/research.json": {
"sha256": "f1e064a7a87b0d13db59b83152f56daa6c6cfea5f4c50bb308cd88b838d2c4fc",
"size": 322
},
"skills/cutaway/custom/runtime.mjs": {
"sha256": "a0187e6bba9fed913ddcf1e5d5dca40ff1ad0aad639f4ad479143f972c1e1f31",
"size": 254
},
"skills/cutaway/custom/style.css": {
"sha256": "1133a848bb421b0ed0b50e4bc66a9c44ccd567538b45229dc5ebb1866ed97991",
"size": 4852
},
"skills/cutaway/custom/validate.mjs": {
"sha256": "2fbb6dd9baf3a36b8f2b6b237b731ae274ff1c8dca8ff2da31393b5b99471a02",
"size": 5987
},
"skills/cutaway/custom/video.mjs": {
"sha256": "270a6de3d015914f74f8457b9198424576d90a1a9abdc828be056a1338ce925d",
"size": 7457
},
"skills/cutaway/examples/LICENSE": {
"sha256": "be4c5b56f7543eb1ec0ceca0579db65d3d741c25a0e7c69722b074023f6ce970",
"size": 1068
},
"skills/cutaway/examples/build.mjs": {
"sha256": "55b7061fa446493454e630c61692c1e833015574cd6163db788c35b7a37f00fd",
"size": 11076
},
"skills/cutaway/examples/catalog.mjs": {
"sha256": "65448e97aca87504ded00cc4dafc5b89fe71e5c7b0cff7369ea075a32f7094d2",
"size": 4730
},
"skills/cutaway/examples/drawings.mjs": {
"sha256": "a18bc027d94f72f08428a2146aed30af704cc6c190019a8190f663d342822251",
"size": 8312
},
"skills/cutaway/examples/live.mjs": {
"sha256": "7a47079ec5cd29c788a1cad079875e2ee88a9b54efa6cfbc35664a01edce97c4",
"size": 4495
},
"skills/cutaway/examples/models.mjs": {
"sha256": "885b2f475bd676fd6197d17353fd477f48884c810b3c4ee385346e3e431eebca",
"size": 6852
},
"skills/cutaway/examples/style.css": {
"sha256": "066cd42544b98f9bd47539597978f36ad5efad9cf945e2b8b87748906575e881",
"size": 6296
},
"skills/cutaway/examples/view.mjs": {
"sha256": "c3525fe9ccba5c9c310e797d595d51f627cf0d6ac38a19575a81d63ae2ebc89a",
"size": 3256
},
"skills/cutaway/glow/LICENSE": {
"sha256": "1a1281a84e233c0501448f641943d1a3e6c07aa7dfcfd07ea59f212f0608426a",
"size": 1194
},
"skills/cutaway/glow/controls.mjs": {
"sha256": "0c55c35f26bfa48204ce334f44970318a785c01b8ab8c6ab776ee455fb6d4986",
"size": 657
},
"skills/cutaway/glow/guide.md": {
"sha256": "766569890fdb05466eae5c6bff7aa31468edbc320a609472fb5305130445dcaa",
"size": 4446
},
"skills/cutaway/glow/palettes.mjs": {
"sha256": "5224b11281f0a8ac3204870f3b2ebfc3723cf7cca88f4e3f79832f9b3f5b0e4f",
"size": 3472
},
"skills/cutaway/glow/svg.mjs": {
"sha256": "4ab025e7d9bba1e3037af9bd5e03d26d8f67ea6af4d1ffec0a6e31df917bc912",
"size": 2603
},
"skills/cutaway/scripts/create-project.mjs": {
"sha256": "4875c5c4dd32d4d389784c479902cd145d77a010633abd77d76ca70cbd0defe7",
"size": 3316
},
"skills/cutaway/upstream/LICENSE": {
"sha256": "1d415c2fa01d5c64a4045e81a120df85170000796b624971975838e9f7f2b1ce",
"size": 1059
},
"skills/cutaway/upstream/examples/desk-computer/build.mjs": {
"sha256": "bfeba9d1943b0ca28ef9867da3483db6ccf4850e022bae6e03ec2c8072506e92",
"size": 23003
},
"skills/cutaway/upstream/examples/dial-indicator/build.mjs": {
"sha256": "9a89224adacd94b4fcb5fe1a7b32a82e9a647200d1b295b670f606ceac6804cd",
"size": 14959
},
"skills/cutaway/upstream/kit/audit.mjs": {
"sha256": "93bc1e1899f555970cb4e623f4432db8cfd537346083b1f8dd0c8652d69feb6e",
"size": 90642
},
"skills/cutaway/upstream/kit/gl.mjs": {
"sha256": "c7c1aba50af022a91c6d767ed6d488f8d68a040893960d3285c19785c57e373a",
"size": 8757
},
"skills/cutaway/upstream/kit/iso-kit.mjs": {
"sha256": "6d3ecc725d30c3b0346da309cf61dfa5a65017c23620bbd4093009d4fb104018",
"size": 35175
},
"skills/cutaway/upstream/kit/iso-kit.ts": {
"sha256": "670b2554e40f42ce3eecdbe4c4672cba1d166dc478d798499175dd8c83b1ae83",
"size": 38572
},
"skills/cutaway/upstream/kit/iso.css": {
"sha256": "ef19bac5a42ba9be42b56b2c1cf7fc7e21d332a8060765e9ca1d987b8ab23924",
"size": 7698
},
"skills/cutaway/upstream/kit/lathe.mjs": {
"sha256": "61cdd2bc84569d129aba1d7d9afc103a078140c0eff3cc6e46a357e3d7dbd16c",
"size": 47981
},
"skills/cutaway/upstream/kit/react/draw.tsx": {
"sha256": "ba7415a29aea00fcd8a119e43884835c95eda897069479f091b8ca4a4d593e19",
"size": 6414
},
"skills/cutaway/upstream/kit/react/live.tsx": {
"sha256": "c957f1fdf50f938fa65164d21e707d8ed3b29ce6f1f425dc576a64ddfd505dcd",
"size": 4058
},
"skills/cutaway/upstream/kit/tube.mjs": {
"sha256": "b30948c85cba6b44d316143cb6dedc59d29e0155161e21e4c4e01b69d5f349f3",
"size": 14220
},
"skills/cutaway/upstream/kit/turn-audit.mjs": {
"sha256": "c117865c8e9eafb98c14cbcf36df1c4d881f5ca3e39e68776fe55de0efc3d1cb",
"size": 57132
},
"skills/cutaway/upstream/kit/turn-build.mjs": {
"sha256": "cd8c76fc1716e85367f18c02ae96ed82154a116e0868125b254a981ecc87467a",
"size": 64900
},
"skills/cutaway/upstream/kit/turn.mjs": {
"sha256": "5c9cfe8e00d182124644a97c4c02a449ab84476f1663e86f6e15b8ff405f1d8e",
"size": 139725
},
"skills/cutaway/upstream/references/3d.md": {
"sha256": "decb414dc1321b89f3e49f31cba1228140b7ccec2f4d7ebfe01267bc040e296f",
"size": 44585
},
"skills/cutaway/upstream/references/craft.md": {
"sha256": "0f1304711e657fc288e46151fd2312b77bda9a30ec6a63eb54ff3bf072350817",
"size": 50260
},
"skills/cutaway/upstream/references/kit.md": {
"sha256": "1680ffd9150e6e58724839e32bb11f3931300953d32976e7f1053b0e4f8459be",
"size": 67738
},
"skills/cutaway/upstream/references/motion.md": {
"sha256": "6dd4eedf1fa6cf3bc678b1bfa217afa5eaa6e7d766fb8f4999e3e1e8dec1ea8d",
"size": 22594
},
"skills/cutaway/upstream/references/react.md": {
"sha256": "b59c1a349e9be135d3cdfbfa2c1af6c8c4075a696633cc2514b30f0116d743e8",
"size": 3606
},
"skills/cutaway/upstream/references/verify.md": {
"sha256": "fa88cf5e5d9c1f8419274d16ce920740c113c9bf5aec0c42fb4efa011d50f3e7",
"size": 43536
},
"skills/cutaway/upstream/references/webgl.md": {
"sha256": "c3c0c26dcfc466058a07a4279c9ee18b09d9c9ea000ae561cf7d199d0670a3cc",
"size": 61041
},
"skills/cutaway/upstream/scripts/inline-kit.mjs": {
"sha256": "11214b4475829ef87eb9e9bad54225fbc210eb0024823d694216b651659172e9",
"size": 819
},
"upstream-files.json": {
"sha256": "bdcfc93dbdff9945a3049d7348606bb05ae6ad875db8e61a4ab2a6a4be2d1b43",
"size": 2287
}
}
}SHA-256 of public snapshot: 71a9dab92df5905dd96bac66affb49a8f41a6c24b0f5951eea89f47352a3289f