← CutawayCONTENT HISTORY

Update to Cutaway

Snapshot Nov 3, 2026 · 00:13 UTC · version 0.3.1

WHAT CHANGED

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.

Save Cutaway and check future changes in Following.

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

Before

Oct 31, 2026 · 01:19 UTC

780d933c35c085fd1124da437a5e4751865ff8d1a80a725a29d6233777c5e763

After

Nov 3, 2026 · 00:13 UTC

105ad03424c0a676adc6ca9f09dd312ca3d446d6c213b60037683edc12887f69

Package file

Before

Oct 31, 2026 · 01:19 UTC

9278

After

Nov 3, 2026 · 00:13 UTC

11549

Package file

Before

Oct 31, 2026 · 01:19 UTC

6468cdc0a3d4ec903f2d19e9bc58c3d0e849d79455533397f303844a0570fa1d

After

Nov 3, 2026 · 00:13 UTC

86e64aa13976163696ef6204591c0eb3db6ad7e31c49763057f970d0fd3fcae5

Package file

Before

Oct 31, 2026 · 01:19 UTC

2407

After

Nov 3, 2026 · 00:13 UTC

2635

Compare saved observations

Download comparison JSON

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

BEFORE
"780d933c35c085fd1124da437a5e4751865ff8d1a80a725a29d6233777c5e763"
AFTER
"105ad03424c0a676adc6ca9f09dd312ca3d446d6c213b60037683edc12887f69"

changed /files/README.md/size

BEFORE
9278
AFTER
11549

changed /files/plugin.json/sha256

BEFORE
"6468cdc0a3d4ec903f2d19e9bc58c3d0e849d79455533397f303844a0570fa1d"
AFTER
"86e64aa13976163696ef6204591c0eb3db6ad7e31c49763057f970d0fd3fcae5"

changed /files/plugin.json/size

BEFORE
2407
AFTER
2635

changed /files/skills~1cutaway~1SKILL.md/sha256

BEFORE
"20d4fe9cb699bca38bd72e04b1925c446b3bdbf3ff8ac37622c6b1e095bfdfb3"
AFTER
"766ce6de237cba4e95a628e31c8e204b70e0ab27194d19b0b5e5cc2b497de496"

changed /files/skills~1cutaway~1SKILL.md/size

BEFORE
16044
AFTER
16518

changed /files/skills~1cutaway~1custom~1controls.mjs/sha256

BEFORE
"b06934927c9b67e87e4d8a3e2871b40301d28d19c05a3684e8fef20354ddc1a5"
AFTER
"bd19eacfd546af0ecba1c1667bce6491f7c63e97971ded1fac7fc0ec2cbc6128"

changed /files/skills~1cutaway~1custom~1controls.mjs/size

BEFORE
6112
AFTER
8659

changed /files/skills~1cutaway~1custom~1guide.md/sha256

BEFORE
"6b298b60e9bd8a47e63346c34e81f74f4ae0d03704ce7a8277a3af84c4de1000"
AFTER
"e358f6d7a5aa6fc75185eeb0376507e1bd0ee1fc2944b1d7de244337b6f9d009"

changed /files/skills~1cutaway~1custom~1guide.md/size

BEFORE
7230
AFTER
8695

changed /files/skills~1cutaway~1custom~1page.mjs/sha256

BEFORE
"3d5d467d17ff0f8b733ab29b5d1d339bdc4e60cf42b577a12f7851e8e562319f"
AFTER
"8c5dfa0a106f7616928b5f6503ac6ff9e4dee0e2986ee8237e9f72d97ff2fea2"

changed /files/skills~1cutaway~1custom~1page.mjs/size

BEFORE
3606
AFTER
3792

changed /files/skills~1cutaway~1custom~1style.css/sha256

BEFORE
"9deb8af03bda3f88877374335fcc25a2f6836d904c48f96c74ebdfa87603f247"
AFTER
"1133a848bb421b0ed0b50e4bc66a9c44ccd567538b45229dc5ebb1866ed97991"

changed /files/skills~1cutaway~1custom~1style.css/size

BEFORE
4704
AFTER
4852

changed /files/skills~1cutaway~1custom~1validate.mjs/sha256

BEFORE
"0cc6a4148f9ba77d670dd95b0a3c994e8748fca32912d1afdc2997b700d0954c"
AFTER
"2fbb6dd9baf3a36b8f2b6b237b731ae274ff1c8dca8ff2da31393b5b99471a02"

changed /files/skills~1cutaway~1custom~1validate.mjs/size

BEFORE
5935
AFTER
5987

added /files/skills~1cutaway~1custom~1video.mjs

BEFORE
Field was absent
AFTER
{
  "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