[object Object]

← back to Dw Marketing Reels

New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh)

f2f43636bc7e784a9f1899a61d00161e2f92300b · 2026-07-17 08:01:36 -0700 · Steve Abrams

- Curated 7 hero picks (1-2 colorways/pattern) across Rebel Walls murals + Thibaut
- 1080x1920 9:16, 22.8s, yuv420p 30fps, AAC 44.1kHz
- Real local audio: Kokoro TTS voiceover (bf_isabella) over ducked MusicGen ambient bed
- Fixed banned-word: caption hashtags now #Wallcovering/#Wallcoverings (was #Wallpaper)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Files touched

Diff

commit f2f43636bc7e784a9f1899a61d00161e2f92300b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Jul 17 08:01:36 2026 -0700

    New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh)
    
    - Curated 7 hero picks (1-2 colorways/pattern) across Rebel Walls murals + Thibaut
    - 1080x1920 9:16, 22.8s, yuv420p 30fps, AAC 44.1kHz
    - Real local audio: Kokoro TTS voiceover (bf_isabella) over ducked MusicGen ambient bed
    - Fixed banned-word: caption hashtags now #Wallcovering/#Wallcoverings (was #Wallpaper)
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 data/new-arrivals.json                             | 422 +++++++++----------
 data/reels.json                                    |  86 ++++
 data/video-jobs.json                               |   1 +
 scripts/build-reel.mjs                             |   2 +-
 .../.hyperframes/caption-skin.html                 | 222 ++++++++++
 .../dw-new-arrivals-reveal/.media/preferences.json |  48 +++
 videos/dw-new-arrivals-reveal/AGENTS.md            |  93 +++++
 videos/dw-new-arrivals-reveal/BRIEF.md             |  54 +++
 videos/dw-new-arrivals-reveal/CLAUDE.md            |  93 +++++
 videos/dw-new-arrivals-reveal/SCRIPT.md            |  64 +++
 videos/dw-new-arrivals-reveal/STORYBOARD.md        | 127 ++++++
 .../assets/fonts/cormorant-400.woff2               | Bin 0 -> 22896 bytes
 .../assets/fonts/cormorant-500.woff2               | Bin 0 -> 23260 bytes
 .../assets/fonts/cormorant-600.woff2               | Bin 0 -> 23384 bytes
 .../assets/fonts/cormorant-italic-400.woff2        | Bin 0 -> 23660 bytes
 videos/dw-new-arrivals-reveal/assets/voice/01.wav  | Bin 0 -> 88108 bytes
 videos/dw-new-arrivals-reveal/assets/voice/02.wav  | Bin 0 -> 345132 bytes
 videos/dw-new-arrivals-reveal/assets/voice/03.wav  | Bin 0 -> 186412 bytes
 videos/dw-new-arrivals-reveal/assets/voice/04.wav  | Bin 0 -> 329772 bytes
 videos/dw-new-arrivals-reveal/assets/voice/05.wav  | Bin 0 -> 293932 bytes
 videos/dw-new-arrivals-reveal/assets/voice/06.wav  | Bin 0 -> 312364 bytes
 videos/dw-new-arrivals-reveal/assets/voice/07.wav  | Bin 0 -> 263212 bytes
 videos/dw-new-arrivals-reveal/assets/voice/08.wav  | Bin 0 -> 167980 bytes
 .../dw-new-arrivals-reveal/audio_engine_meta.json  | 454 +++++++++++++++++++++
 videos/dw-new-arrivals-reveal/audio_meta.json      | 443 ++++++++++++++++++++
 videos/dw-new-arrivals-reveal/audio_request.json   |  44 ++
 .../capture/assets/daintree-bluemoon-thibaut.jpg   | Bin 0 -> 659919 bytes
 .../capture/assets/floral-chinoiserie-green.jpg    | Bin 0 -> 274803 bytes
 .../capture/assets/floral-elegance-gray.jpg        | Bin 0 -> 235683 bytes
 .../capture/assets/floral-fantasy-soft-pink.jpg    | Bin 0 -> 123281 bytes
 .../capture/assets/gleniffer-black-and-grey.jpg    | Bin 0 -> 694794 bytes
 .../assets/maranta-arrowroot-pale-green.jpg        | Bin 0 -> 525041 bytes
 .../capture/assets/serengeti-aqua-thibaut.jpg      | Bin 0 -> 350856 bytes
 .../capture/assets/venus-black-thibaut.jpg         | Bin 0 -> 506653 bytes
 .../capture/extracted/asset-descriptions.md        |  23 ++
 .../capture/extracted/tokens.json                  |   6 +
 .../capture/extracted/visible-text.txt             |  23 ++
 videos/dw-new-arrivals-reveal/frame.md             | 286 +++++++++++++
 videos/dw-new-arrivals-reveal/hyperframes.json     |  12 +
 videos/dw-new-arrivals-reveal/index.html           |  59 +++
 videos/dw-new-arrivals-reveal/meta.json            |   5 +
 videos/dw-new-arrivals-reveal/package.json         |  11 +
 42 files changed, 2366 insertions(+), 212 deletions(-)

diff --git a/data/new-arrivals.json b/data/new-arrivals.json
index 0b500fe..266b2ec 100644
--- a/data/new-arrivals.json
+++ b/data/new-arrivals.json
@@ -1,8 +1,218 @@
 {
   "source": "https://designerwallcoverings.com/collections/new-arrivals",
-  "fetched_at": "2026-07-16T14:10:05.443Z",
+  "fetched_at": "2026-07-17T14:10:06.389Z",
   "count": 24,
   "items": [
+    {
+      "id": 7887308816435,
+      "handle": "floral-fantasy-soft-pink-wallcoverings-dwrw-361308",
+      "title": "Floral Fantasy, Soft Pink Wallcoverings | Rebel Walls",
+      "pattern": "Floral Fantasy",
+      "color": "Soft Pink",
+      "vendor": "Rebel Walls",
+      "product_type": "Mural",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20466_interior1.webp?v=1784274020",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20466_interior1_1200x.webp?v=1784274020",
+      "price": "191.00",
+      "url": "https://designerwallcoverings.com/products/floral-fantasy-soft-pink-wallcoverings-dwrw-361308",
+      "created_at": "2026-07-17T00:40:17-07:00",
+      "published_at": "2026-07-17T00:40:18-07:00"
+    },
+    {
+      "id": 7887308783667,
+      "handle": "floral-fantasy-pink-wallcoverings-dwrw-361307",
+      "title": "Floral Fantasy, Pink Wallcoverings | Rebel Walls",
+      "pattern": "Floral Fantasy",
+      "color": "Pink",
+      "vendor": "Rebel Walls",
+      "product_type": "Mural",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20463_interior1.jpg?v=1784274018",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20463_interior1_1200x.jpg?v=1784274018",
+      "price": "191.00",
+      "url": "https://designerwallcoverings.com/products/floral-fantasy-pink-wallcoverings-dwrw-361307",
+      "created_at": "2026-07-17T00:40:14-07:00",
+      "published_at": "2026-07-17T00:40:16-07:00"
+    },
+    {
+      "id": 7887308750899,
+      "handle": "floral-fantasy-gray-wallcoverings-dwrw-361306",
+      "title": "Floral Fantasy, Gray Wallcoverings | Rebel Walls",
+      "pattern": "Floral Fantasy",
+      "color": "Gray",
+      "vendor": "Rebel Walls",
+      "product_type": "Mural",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20465_interior1.jpg?v=1784274015",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20465_interior1_1200x.jpg?v=1784274015",
+      "price": "191.00",
+      "url": "https://designerwallcoverings.com/products/floral-fantasy-gray-wallcoverings-dwrw-361306",
+      "created_at": "2026-07-17T00:40:12-07:00",
+      "published_at": "2026-07-17T00:40:13-07:00"
+    },
+    {
+      "id": 7887308718131,
+      "handle": "floral-fantasy-black-wallcoverings-dwrw-361305",
+      "title": "Floral Fantasy, Black Wallcoverings | Rebel Walls",
+      "pattern": "Floral Fantasy",
+      "color": "Black",
+      "vendor": "Rebel Walls",
+      "product_type": "Mural",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20464_interior1.jpg?v=1784274013",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R20464_interior1_1200x.jpg?v=1784274013",
+      "price": "191.00",
+      "url": "https://designerwallcoverings.com/products/floral-fantasy-black-wallcoverings-dwrw-361305",
+      "created_at": "2026-07-17T00:40:10-07:00",
+      "published_at": "2026-07-17T00:40:10-07:00"
+    },
+    {
+      "id": 7887308685363,
+      "handle": "floral-elegance-gray-wallcoverings-dwrw-361304",
+      "title": "Floral Elegance, Gray Wallcoverings | Rebel Walls",
+      "pattern": "Floral Elegance",
+      "color": "Gray",
+      "vendor": "Rebel Walls",
+      "product_type": "Mural",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R22424_interior1.webp?v=1784274011",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/R22424_interior1_1200x.webp?v=1784274011",
+      "price": "191.00",
+      "url": "https://designerwallcoverings.com/products/floral-elegance-gray-wallcoverings-dwrw-361304",
+      "created_at": "2026-07-17T00:40:06-07:00",
+      "published_at": "2026-07-17T00:40:08-07:00"
+    },
+    {
+      "id": 7887119679539,
+      "handle": "venus-black-dwtt-74291",
+      "title": "Venus, Black Wallcoverings | Thibaut",
+      "pattern": "Venus",
+      "color": "Black",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85069_37abaf04-2400-49f6-a937-764fb0aae01c.jpg?v=1784238020",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85069_37abaf04-2400-49f6-a937-764fb0aae01c_1200x.jpg?v=1784238020",
+      "price": "74.93",
+      "url": "https://designerwallcoverings.com/products/venus-black-dwtt-74291",
+      "created_at": "2026-07-16T14:40:16-07:00",
+      "published_at": "2026-07-16T14:40:18-07:00"
+    },
+    {
+      "id": 7887119646771,
+      "handle": "diamond-head-light-blue-dwtt-74290",
+      "title": "Diamond Head, Light Blue Wallcoverings | Thibaut",
+      "pattern": "Diamond Head",
+      "color": "Light Blue",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85057_bad40471-ef23-46bf-8871-3083dfe07041.jpg?v=1784238015",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85057_bad40471-ef23-46bf-8871-3083dfe07041_1200x.jpg?v=1784238015",
+      "price": "76.56",
+      "url": "https://designerwallcoverings.com/products/diamond-head-light-blue-dwtt-74290",
+      "created_at": "2026-07-16T14:40:12-07:00",
+      "published_at": "2026-07-16T14:40:14-07:00"
+    },
+    {
+      "id": 7887119614003,
+      "handle": "diamond-head-navy-dwtt-74289",
+      "title": "Diamond Head, Navy Wallcoverings | Thibaut",
+      "pattern": "Diamond Head",
+      "color": "Navy",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85056_91eb5596-5e18-4fa9-9abd-be44220d37e7.jpg?v=1784238011",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85056_91eb5596-5e18-4fa9-9abd-be44220d37e7_1200x.jpg?v=1784238011",
+      "price": "76.56",
+      "url": "https://designerwallcoverings.com/products/diamond-head-navy-dwtt-74289",
+      "created_at": "2026-07-16T14:40:07-07:00",
+      "published_at": "2026-07-16T14:40:10-07:00"
+    },
+    {
+      "id": 7886637629491,
+      "handle": "daintree-blue-on-white-dwtt-74288",
+      "title": "Daintree, Blue on White Wallcoverings | Thibaut",
+      "pattern": "Daintree",
+      "color": "Blue on White",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85044_ab28d492-8f66-4bfb-97c8-6653b3551a11.jpg?v=1784216419",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85044_ab28d492-8f66-4bfb-97c8-6653b3551a11_1200x.jpg?v=1784216419",
+      "price": "99.37",
+      "url": "https://designerwallcoverings.com/products/daintree-blue-on-white-dwtt-74288",
+      "created_at": "2026-07-16T08:40:16-07:00",
+      "published_at": "2026-07-16T08:40:17-07:00"
+    },
+    {
+      "id": 7886637334579,
+      "handle": "daintree-pearl-dwtt-74287",
+      "title": "Daintree, Pearl Wallcoverings | Thibaut",
+      "pattern": "Daintree",
+      "color": "Pearl",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85045_acf3eb80-9a01-46a4-afc0-efbf4fc48afa.jpg?v=1784216415",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85045_acf3eb80-9a01-46a4-afc0-efbf4fc48afa_1200x.jpg?v=1784216415",
+      "price": "99.37",
+      "url": "https://designerwallcoverings.com/products/daintree-pearl-dwtt-74287",
+      "created_at": "2026-07-16T08:40:12-07:00",
+      "published_at": "2026-07-16T08:40:14-07:00"
+    },
+    {
+      "id": 7886636908595,
+      "handle": "diamond-head-chartreuse-dwtt-74286",
+      "title": "Diamond Head, Chartreuse Wallcoverings | Thibaut",
+      "pattern": "Diamond Head",
+      "color": "Chartreuse",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85053_42caeb76-18f5-48ac-9524-0306b79a01af.jpg?v=1784216411",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85053_42caeb76-18f5-48ac-9524-0306b79a01af_1200x.jpg?v=1784216411",
+      "price": "76.56",
+      "url": "https://designerwallcoverings.com/products/diamond-head-chartreuse-dwtt-74286",
+      "created_at": "2026-07-16T08:40:08-07:00",
+      "published_at": "2026-07-16T08:40:10-07:00"
+    },
+    {
+      "id": 7886509178931,
+      "handle": "daintree-aqua-dwtt-74285",
+      "title": "Daintree, Aqua Wallcoverings | Thibaut",
+      "pattern": "Daintree",
+      "color": "Aqua",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85043.jpg?v=1784212818",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85043_1200x.jpg?v=1784212818",
+      "price": "99.37",
+      "url": "https://designerwallcoverings.com/products/daintree-aqua-dwtt-74285",
+      "created_at": "2026-07-16T07:40:15-07:00",
+      "published_at": "2026-07-16T07:40:17-07:00"
+    },
+    {
+      "id": 7886509146163,
+      "handle": "daintree-fuchsia-dwtt-74284",
+      "title": "Daintree, Fuchsia Wallcoverings | Thibaut",
+      "pattern": "Daintree",
+      "color": "Fuchsia",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85042_9e1fd8a7-1e53-4146-8341-438a63c2498a.jpg?v=1784212815",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85042_9e1fd8a7-1e53-4146-8341-438a63c2498a_1200x.jpg?v=1784212815",
+      "price": "99.37",
+      "url": "https://designerwallcoverings.com/products/daintree-fuchsia-dwtt-74284",
+      "created_at": "2026-07-16T07:40:12-07:00",
+      "published_at": "2026-07-16T07:40:13-07:00"
+    },
+    {
+      "id": 7886509047859,
+      "handle": "daintree-grey-dwtt-74283",
+      "title": "Daintree, Grey Wallcoverings | Thibaut",
+      "pattern": "Daintree",
+      "color": "Grey",
+      "vendor": "Thibaut",
+      "product_type": "Wallcovering",
+      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85041.jpg?v=1784212810",
+      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85041_1200x.jpg?v=1784212810",
+      "price": "99.37",
+      "url": "https://designerwallcoverings.com/products/daintree-grey-dwtt-74283",
+      "created_at": "2026-07-16T07:40:07-07:00",
+      "published_at": "2026-07-16T07:40:10-07:00"
+    },
     {
       "id": 7886165442611,
       "handle": "floral-drape-wallcoverings-dwrw-361303",
@@ -152,216 +362,6 @@
       "url": "https://designerwallcoverings.com/products/maranta-arrowroot-pale-green-dwtt-74278",
       "created_at": "2026-07-15T17:40:11-07:00",
       "published_at": "2026-07-15T17:40:12-07:00"
-    },
-    {
-      "id": 7886031683635,
-      "handle": "maranta-arrowroot-burgundy-dwtt-74277",
-      "title": "Maranta Arrowroot, Burgundy Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Burgundy",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85011.jpg?v=1784162409",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85011_1200x.jpg?v=1784162409",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-burgundy-dwtt-74277",
-      "created_at": "2026-07-15T17:40:06-07:00",
-      "published_at": "2026-07-15T17:40:09-07:00"
-    },
-    {
-      "id": 7885998358579,
-      "handle": "maranta-arrowroot-black-dwtt-74276",
-      "title": "Maranta Arrowroot, Black Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Black",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85009_339cb61e-0525-4f57-9fa8-5d49d87f769a.jpg?v=1784158818",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85009_339cb61e-0525-4f57-9fa8-5d49d87f769a_1200x.jpg?v=1784158818",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-black-dwtt-74276",
-      "created_at": "2026-07-15T16:40:15-07:00",
-      "published_at": "2026-07-15T16:40:16-07:00"
-    },
-    {
-      "id": 7885998293043,
-      "handle": "maranta-arrowroot-navy-dwtt-74275",
-      "title": "Maranta Arrowroot, Navy Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Navy",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85010.jpg?v=1784158814",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85010_1200x.jpg?v=1784158814",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-navy-dwtt-74275",
-      "created_at": "2026-07-15T16:40:11-07:00",
-      "published_at": "2026-07-15T16:40:13-07:00"
-    },
-    {
-      "id": 7885998194739,
-      "handle": "maranta-arrowroot-cream-dwtt-74274",
-      "title": "Maranta Arrowroot, Cream Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Cream",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85008_ce7c7dec-949d-4618-ae84-a4afa4c85eea.jpg?v=1784158810",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85008_ce7c7dec-949d-4618-ae84-a4afa4c85eea_1200x.jpg?v=1784158810",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-cream-dwtt-74274",
-      "created_at": "2026-07-15T16:40:07-07:00",
-      "published_at": "2026-07-15T16:40:09-07:00"
-    },
-    {
-      "id": 7885984530483,
-      "handle": "maranta-arrowroot-beige-dwtt-74273",
-      "title": "Maranta Arrowroot, Beige Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Beige",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85006_dcbff750-e45a-4e3a-bb7e-8741b3019dc0.jpg?v=1784155219",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85006_dcbff750-e45a-4e3a-bb7e-8741b3019dc0_1200x.jpg?v=1784155219",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-beige-dwtt-74273",
-      "created_at": "2026-07-15T15:40:16-07:00",
-      "published_at": "2026-07-15T15:40:17-07:00"
-    },
-    {
-      "id": 7885984497715,
-      "handle": "maranta-arrowroot-teal-dwtt-74272",
-      "title": "Maranta Arrowroot, Teal Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Teal",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85004_db41712b-e583-40fd-8c6f-89cda3e1c809.jpg?v=1784155215",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85004_db41712b-e583-40fd-8c6f-89cda3e1c809_1200x.jpg?v=1784155215",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-teal-dwtt-74272",
-      "created_at": "2026-07-15T15:40:12-07:00",
-      "published_at": "2026-07-15T15:40:14-07:00"
-    },
-    {
-      "id": 7885984464947,
-      "handle": "maranta-arrowroot-aqua-dwtt-74271",
-      "title": "Maranta Arrowroot, Aqua Wallcoverings | Thibaut",
-      "pattern": "Maranta Arrowroot",
-      "color": "Aqua",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85003_c0267c31-1ee8-48ae-b3f9-f1eaed9951ac.jpg?v=1784155211",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T85003_c0267c31-1ee8-48ae-b3f9-f1eaed9951ac_1200x.jpg?v=1784155211",
-      "price": "306.24",
-      "url": "https://designerwallcoverings.com/products/maranta-arrowroot-aqua-dwtt-74271",
-      "created_at": "2026-07-15T15:40:07-07:00",
-      "published_at": "2026-07-15T15:40:10-07:00"
-    },
-    {
-      "id": 7885948649523,
-      "handle": "treviso-marble-smoke-dwtt-74270",
-      "title": "Treviso Marble, Smoke Wallcoverings | Thibaut",
-      "pattern": "Treviso Marble",
-      "color": "Smoke",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75177_c821b9a4-9999-4924-a6bc-8e0faf87e031.jpg?v=1784151618",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75177_c821b9a4-9999-4924-a6bc-8e0faf87e031_1200x.jpg?v=1784151618",
-      "price": "84.71",
-      "url": "https://designerwallcoverings.com/products/treviso-marble-smoke-dwtt-74270",
-      "created_at": "2026-07-15T14:40:16-07:00",
-      "published_at": "2026-07-15T14:40:17-07:00"
-    },
-    {
-      "id": 7885948616755,
-      "handle": "treviso-marble-neutral-dwtt-74269",
-      "title": "Treviso Marble, Neutral Wallcoverings | Thibaut",
-      "pattern": "Treviso Marble",
-      "color": "Neutral",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75171_42149573-6052-4b52-b319-8a180331b852.jpg?v=1784151615",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75171_42149573-6052-4b52-b319-8a180331b852_1200x.jpg?v=1784151615",
-      "price": "84.71",
-      "url": "https://designerwallcoverings.com/products/treviso-marble-neutral-dwtt-74269",
-      "created_at": "2026-07-15T14:40:13-07:00",
-      "published_at": "2026-07-15T14:40:14-07:00"
-    },
-    {
-      "id": 7885948485683,
-      "handle": "boa-black-on-metallic-gold-dwtt-74268",
-      "title": "Boa, Black on Metallic Gold Wallcoverings | Thibaut",
-      "pattern": "Boa",
-      "color": "Black on Metallic Gold",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75168_8d3fe98d-44da-4a8c-b0ce-ace844ac5864.jpg?v=1784151611",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75168_8d3fe98d-44da-4a8c-b0ce-ace844ac5864_1200x.jpg?v=1784151611",
-      "price": "81.45",
-      "url": "https://designerwallcoverings.com/products/boa-black-on-metallic-gold-dwtt-74268",
-      "created_at": "2026-07-15T14:40:07-07:00",
-      "published_at": "2026-07-15T14:40:10-07:00"
-    },
-    {
-      "id": 7885926629427,
-      "handle": "boa-aqua-on-metallic-gold-dwtt-74267",
-      "title": "Boa, Aqua on Metallic Gold Wallcoverings | Thibaut",
-      "pattern": "Boa",
-      "color": "Aqua on Metallic Gold",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75167.jpg?v=1784148019",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75167_1200x.jpg?v=1784148019",
-      "price": "81.45",
-      "url": "https://designerwallcoverings.com/products/boa-aqua-on-metallic-gold-dwtt-74267",
-      "created_at": "2026-07-15T13:40:16-07:00",
-      "published_at": "2026-07-15T13:40:17-07:00"
-    },
-    {
-      "id": 7885926531123,
-      "handle": "portland-metallic-pewter-dwtt-74266",
-      "title": "Portland, Metallic Pewter Wallcoverings | Thibaut",
-      "pattern": "Portland",
-      "color": "Metallic Pewter",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75143.jpg?v=1784148016",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75143_1200x.jpg?v=1784148016",
-      "price": "130.32",
-      "url": "https://designerwallcoverings.com/products/portland-metallic-pewter-dwtt-74266",
-      "created_at": "2026-07-15T13:40:12-07:00",
-      "published_at": "2026-07-15T13:40:14-07:00"
-    },
-    {
-      "id": 7885926498355,
-      "handle": "portland-white-dwtt-74265",
-      "title": "Portland, White Wallcoverings | Thibaut",
-      "pattern": "Portland",
-      "color": "White",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75138.jpg?v=1784148010",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75138_1200x.jpg?v=1784148010",
-      "price": "130.32",
-      "url": "https://designerwallcoverings.com/products/portland-white-dwtt-74265",
-      "created_at": "2026-07-15T13:40:08-07:00",
-      "published_at": "2026-07-15T13:40:10-07:00"
-    },
-    {
-      "id": 7885884850227,
-      "handle": "haywood-charcoal-dwtt-74264",
-      "title": "Haywood, Charcoal Wallcoverings | Thibaut",
-      "pattern": "Haywood",
-      "color": "Charcoal",
-      "vendor": "Thibaut",
-      "product_type": "Wallcovering",
-      "image": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75136_2c6b84f7-382c-400e-aa52-1bcb2e6d1f63.jpg?v=1784144418",
-      "image_hi": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T75136_2c6b84f7-382c-400e-aa52-1bcb2e6d1f63_1200x.jpg?v=1784144418",
-      "price": "149.86",
-      "url": "https://designerwallcoverings.com/products/haywood-charcoal-dwtt-74264",
-      "created_at": "2026-07-15T12:40:15-07:00",
-      "published_at": "2026-07-15T12:40:17-07:00"
     }
   ]
 }
\ No newline at end of file
diff --git a/data/reels.json b/data/reels.json
index 160875f..bfc2068 100644
--- a/data/reels.json
+++ b/data/reels.json
@@ -1,4 +1,90 @@
 [
+  {
+    "file": "new-arrivals-audio-2026-07-17-14-57.mp4",
+    "file_silent": "new-arrivals-2026-07-17-14-51.mp4",
+    "created_at": "2026-07-17T14:51:42.855Z",
+    "products": 7,
+    "seconds": 22.8,
+    "audio": {
+      "voiceover": "Kokoro TTS (bf_isabella), local, $0",
+      "bgm": "MusicGen small (facebook/musicgen-small), local, $0",
+      "mix": "MusicGen bed ducked to 0.22 + fade; Kokoro VO delayed 1.6s at 1.35x; alimiter"
+    },
+    "curated": true,
+    "curation_note": "7 heroes hand-picked for variety: 1-2 colorways per pattern across Rebel Walls murals + Thibaut wallcoverings",
+    "titles": [
+      "Floral Fantasy / Soft Pink",
+      "Venus / Black",
+      "Floral Chinoiserie / Dark Blue",
+      "Daintree / Aqua",
+      "Floral Elegance / Gray",
+      "Maranta Arrowroot / Pale Green",
+      "Floral Fantasy / Black"
+    ],
+    "caption": "New arrivals just landed ✨ Floral Fantasy, Venus, Floral Chinoiserie & more from Rebel Walls, Thibaut. Discover the latest wallcoverings — shop the collection at designerwallcoverings.com 🔗\n\n#DesignerWallcoverings #NewArrivals #Wallcovering #Wallcoverings #InteriorDesign #InteriorDecor #HomeDesign #LuxuryInteriors #DesignInspo #RebelWalls #Thibaut",
+    "hashtags": [
+      "#DesignerWallcoverings",
+      "#NewArrivals",
+      "#Wallcovering",
+      "#Wallcoverings",
+      "#InteriorDesign",
+      "#InteriorDecor",
+      "#HomeDesign",
+      "#LuxuryInteriors",
+      "#DesignInspo",
+      "#RebelWalls",
+      "#Thibaut"
+    ],
+    "publish": {
+      "instagram": {
+        "status": "pending"
+      },
+      "tiktok": {
+        "status": "pending"
+      }
+    }
+  },
+  {
+    "file": "new-arrivals-2026-07-17-14-10.mp4",
+    "created_at": "2026-07-17T14:10:32.356Z",
+    "products": 6,
+    "seconds": 19,
+    "titles": [
+      "Floral Fantasy / Soft Pink",
+      "Floral Fantasy / Pink",
+      "Floral Fantasy / Gray",
+      "Floral Fantasy / Black",
+      "Floral Elegance / Gray",
+      "Venus / Black"
+    ],
+    "caption": "New arrivals just landed ✨ Floral Fantasy, Floral Elegance, Venus from Rebel Walls, Thibaut. Discover the latest wallcoverings — shop the collection at designerwallcoverings.com 🔗\n\n#DesignerWallcoverings #NewArrivals #Wallpaper #Wallcovering #InteriorDesign #InteriorDecor #HomeDesign #LuxuryInteriors #DesignInspo #RebelWalls #Thibaut",
+    "hashtags": [
+      "#DesignerWallcoverings",
+      "#NewArrivals",
+      "#Wallpaper",
+      "#Wallcovering",
+      "#InteriorDesign",
+      "#InteriorDecor",
+      "#HomeDesign",
+      "#LuxuryInteriors",
+      "#DesignInspo",
+      "#RebelWalls",
+      "#Thibaut"
+    ],
+    "publish": {
+      "instagram": {
+        "status": "pending-creds",
+        "account": "dw",
+        "note": "Designer Wallcoverings @designerwallcoverings: IG_AGENT_AUTH not set (route via secrets skill)",
+        "at": "2026-07-17T14:10:32.402Z"
+      },
+      "tiktok": {
+        "status": "pending-reconnect",
+        "note": "TikTok channel not connected",
+        "at": "2026-07-17T14:10:32.402Z"
+      }
+    }
+  },
   {
     "file": "new-arrivals-2026-07-16-14-10.mp4",
     "created_at": "2026-07-16T14:10:36.971Z",
diff --git a/data/video-jobs.json b/data/video-jobs.json
new file mode 100644
index 0000000..fe51488
--- /dev/null
+++ b/data/video-jobs.json
@@ -0,0 +1 @@
+[]
diff --git a/scripts/build-reel.mjs b/scripts/build-reel.mjs
index 88929be..a06b76b 100644
--- a/scripts/build-reel.mjs
+++ b/scripts/build-reel.mjs
@@ -46,7 +46,7 @@ function captionFor(items) {
     + `\n\n${THEME.captionTail}`;
   const tagify = s => '#' + String(s).replace(/[^a-z0-9]+/gi, '');
   const tags = [...new Set([
-    '#DesignerWallcoverings', ...THEME.tagsExtra, '#Wallpaper', '#Wallcovering',
+    '#DesignerWallcoverings', ...THEME.tagsExtra, '#Wallcovering', '#Wallcoverings',
     '#InteriorDesign', '#InteriorDecor', '#HomeDesign', '#LuxuryInteriors', '#DesignInspo',
     ...vendors.slice(0, 3).map(tagify),
   ])].slice(0, 14);
diff --git a/videos/dw-new-arrivals-reveal/.hyperframes/caption-skin.html b/videos/dw-new-arrivals-reveal/.hyperframes/caption-skin.html
new file mode 100644
index 0000000..135fa97
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/.hyperframes/caption-skin.html
@@ -0,0 +1,222 @@
+<!--
+  Cartesian — caption skin (preset-local source).
+
+  This is the preset's own lower-third karaoke caption look. product-launch-video's
+  Step 2 copies it into the project as caption-skin.html; captions.mjs then fills the
+  three reserved holes, wraps the fragment in a <template>, and writes
+  compositions/captions.html:
+    · the empty GROUPS array            → the engine's scene-aware word groups
+    · the 0 duration + 0 width/height   → real total + canvas size
+    · the empty data-brand-tokens style → :root tokens derived from the project's frame.md
+
+  Token contract — reference ONLY this fixed vocab (captions.mjs injects it from
+  frame.md, so the Step-2 brand overlay flows through; each var has a cartesian literal
+  fallback for standalone preview):
+    --cap-ink · --cap-canvas · --cap-accent · --cap-accent-2 · --font-display ·
+    --font-body · --cap-band-top · --cap-band-height
+  Hooks (do not rename): .caption-group / .caption-word + states .is-active / .is-spoken,
+  root data-composition-id="captions", timeline at window.__timelines["captions"].
+  State changes use gsap.set({className}) (applied on the engine's frame-by-frame seek);
+  never tl.call() callbacks (seek does not fire them → wrong state on render).
+
+  Visual: a museum-catalog lower-third — a warm-stone card on a single 1px taupe
+  hairline border (cartesian's universal structural device), SHARP corners, ZERO
+  shadow, ZERO fill beyond the stone canvas. Playfair Display 400, sentence case, ink
+  glyphs. Upcoming words sit in faint ink; the current word is marked QUIETLY — a faint
+  stone wash with a 1px taupe hairline underline (restraint, not a loud block); spoken
+  words settle to solid ink, the wash and underline cleared.
+-->
+<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
+
+<!-- captions.mjs injects the project's :root tokens here -->
+<style data-brand-tokens></style>
+
+<style>
+  #captions-root {
+    position: absolute;
+    inset: 0;
+    pointer-events: none;
+  }
+  .caption-layer {
+    position: absolute;
+    inset: 0;
+    z-index: 20;
+    pointer-events: none;
+  }
+  /* the keep-out band, from captionBand(H) — frame content stays above it */
+  .caption-stage {
+    position: absolute;
+    left: 0;
+    right: 0;
+    top: var(--cap-band-top, 900px);
+    height: var(--cap-band-height, 180px);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .caption-group {
+    /* every group is absolutely stacked over the SAME band — exactly one shown at a
+       time via opacity. Must be absolute: in-flow groups would lay out side-by-side. */
+    position: absolute;
+    inset: 0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    opacity: 0;
+  }
+
+  /* THE stone card — single 1px taupe hairline border (cartesian's universal
+     structural device), SHARP corners, ZERO shadow, ZERO fill beyond the stone canvas */
+  .caption-pill {
+    max-width: 78%;
+    padding: 20px 44px 24px;
+    background: var(--cap-canvas, #ede8e0);
+    border: 1px solid var(--cap-accent-2, #b8b0a4);
+    border-radius: 0;
+  }
+  .caption-line {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: center;
+    gap: 0.1em 0.34em;
+    font-family: var(--font-display, "Playfair Display"), Georgia, serif;
+    font-weight: 400;
+    font-size: clamp(40px, 4.4vw, 58px);
+    line-height: 1.16;
+    letter-spacing: -0.01em;
+  }
+
+  /* upcoming — faint ink, no mark */
+  .caption-word {
+    display: inline-block;
+    padding: 0 0.06em;
+    border-bottom: 1px solid transparent;
+    color: color-mix(in srgb, var(--cap-ink, #1a1a1a) 42%, var(--cap-canvas, #ede8e0));
+  }
+  /* current word — a QUIET marker: a faint warm-stone wash behind solid ink, plus a
+     1px taupe hairline underline (restraint, not a loud block; SHARP, NO shadow) */
+  .caption-word.is-active {
+    color: var(--cap-ink, #1a1a1a);
+    background: color-mix(in srgb, var(--cap-accent, #8a8178) 18%, var(--cap-canvas, #ede8e0));
+    border-bottom: 1px solid var(--cap-accent, #8a8178);
+  }
+  /* already spoken — solid ink, wash + underline cleared */
+  .caption-word.is-spoken {
+    color: var(--cap-ink, #1a1a1a);
+    background: transparent;
+    border-bottom: 1px solid transparent;
+  }
+
+  /* optional per-word accents (dormant until a word-classer tags them) */
+  /* brand / key term — Playfair Display italic, cartesian's only display inflection */
+  .caption-word.cap-brand {
+    font-style: italic;
+  }
+  /* numerals / data — the body sans voice, slightly recessed */
+  .caption-word.cap-num {
+    font-family: var(--font-body, "Inter"), ui-sans-serif, sans-serif;
+    color: color-mix(in srgb, var(--cap-ink, #1a1a1a) 72%, var(--cap-canvas, #ede8e0));
+  }
+  /* emphasis — a 1px taupe hairline underline (no second color; stone-and-ink only) */
+  .caption-word.cap-cta {
+    text-decoration: underline;
+    text-decoration-thickness: 1px;
+    text-decoration-color: var(--cap-accent, #8a8178);
+    text-underline-offset: 0.12em;
+  }
+
+  @media (max-aspect-ratio: 9/16) {
+    .caption-pill {
+      max-width: 92%;
+    }
+    .caption-line {
+      font-size: clamp(34px, 5.4vw, 48px);
+    }
+  }
+</style>
+
+<div
+  id="captions-root"
+  data-composition-id="captions"
+  data-timeline-locked
+  data-start="0"
+  data-duration="0"
+  data-fps="30"
+  data-width="0"
+  data-height="0"
+>
+  <div class="caption-layer" aria-hidden="true">
+    <div id="caption-stage" class="caption-stage"></div>
+  </div>
+</div>
+
+<script>
+  // captions.mjs injects the engine's scene-aware groups + real duration here.
+  var GROUPS = [];
+  var DURATION = 0;
+
+  (function () {
+    var stage = document.getElementById("caption-stage");
+
+    // build DOM: one .caption-group per group, .caption-word per word
+    GROUPS.forEach(function (group, g) {
+      var groupEl = document.createElement("div");
+      groupEl.className = "caption-group";
+      groupEl.id = "caption-group-" + g;
+      var pill = document.createElement("div");
+      pill.className = "caption-pill";
+      var line = document.createElement("div");
+      line.className = "caption-line";
+      (group.words || []).forEach(function (w, i) {
+        var span = document.createElement("span");
+        span.className = "caption-word";
+        span.id = "caption-word-" + g + "-" + i;
+        span.textContent = String(w.text);
+        line.appendChild(span);
+      });
+      pill.appendChild(line);
+      groupEl.appendChild(pill);
+      stage.appendChild(groupEl);
+    });
+
+    window.__timelines = window.__timelines || {};
+    var tl = gsap.timeline({ paused: true });
+
+    GROUPS.forEach(function (group, g) {
+      var groupEl = document.getElementById("caption-group-" + g);
+      var words = group.words || [];
+      var next = GROUPS[g + 1];
+      var isLast = g === GROUPS.length - 1;
+      var start = Math.max(0, Number(group.start));
+      var end = isLast ? DURATION : Math.min(Number(next.start), Number(group.end) + 0.3);
+      if (end <= start) end = start + 0.01;
+
+      // group on/off — exactly one group visible at a time
+      tl.set(groupEl, { opacity: 1 }, start);
+      tl.set(groupEl, { opacity: 0 }, end);
+
+      // 3-state karaoke via className SETS — seek-safe (gsap.set applies on the
+      // engine's frame-by-frame seek; .call callbacks would NOT fire).
+      words.forEach(function (w, i) {
+        var el = document.getElementById("caption-word-" + g + "-" + i);
+        var at = Math.max(start, Number(w.start));
+        tl.set(el, { className: "caption-word" }, start); // upcoming (also resets on reverse-seek)
+        tl.set(el, { className: "caption-word is-active" }, at); // current
+        tl.fromTo(el, { scale: 0.985 }, { scale: 1, duration: 0.2, ease: "power1.out" }, at);
+        if (i + 1 < words.length) {
+          var nextAt = Math.max(start, Number(words[i + 1].start));
+          tl.set(el, { className: "caption-word is-spoken" }, nextAt); // demote when next activates
+        }
+      });
+      if (words.length) {
+        var lastEl = document.getElementById("caption-word-" + g + "-" + (words.length - 1));
+        var lastSpoken = Math.min(end, Number(words[words.length - 1].end) + 0.1);
+        tl.set(lastEl, { className: "caption-word is-spoken" }, lastSpoken);
+      }
+    });
+
+    // full-span anchor so the sub-comp timeline spans the whole video
+    tl.to({}, { duration: DURATION }, 0);
+    window.__timelines["captions"] = tl;
+  })();
+</script>
diff --git a/videos/dw-new-arrivals-reveal/.media/preferences.json b/videos/dw-new-arrivals-reveal/.media/preferences.json
new file mode 100644
index 0000000..34e7511
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/.media/preferences.json
@@ -0,0 +1,48 @@
+{
+  "version": 1,
+  "preferences": {
+    "destination": {
+      "value": "instagram-reels",
+      "confirmed_in": [
+        "dw-new-arrivals-reveal"
+      ],
+      "updated_at": "2026-07-17T14:51:58.459Z"
+    },
+    "aspect": {
+      "value": "1080x1920",
+      "confirmed_in": [
+        "dw-new-arrivals-reveal"
+      ],
+      "updated_at": "2026-07-17T14:51:58.500Z"
+    },
+    "language": {
+      "value": "en",
+      "confirmed_in": [
+        "dw-new-arrivals-reveal"
+      ],
+      "updated_at": "2026-07-17T14:51:58.538Z"
+    },
+    "flow": {
+      "value": "automation",
+      "confirmed_in": [
+        "dw-new-arrivals-reveal"
+      ],
+      "updated_at": "2026-07-17T14:51:58.574Z"
+    },
+    "storyboard": {
+      "value": "no",
+      "confirmed_in": [
+        "dw-new-arrivals-reveal"
+      ],
+      "updated_at": "2026-07-17T14:51:58.612Z"
+    },
+    "style_preset.product-launch-video": {
+      "value": "cartesian",
+      "confirmed_in": [
+        "dw-new-arrivals-reveal"
+      ],
+      "updated_at": "2026-07-17T14:51:58.651Z"
+    }
+  },
+  "sightings": {}
+}
diff --git a/videos/dw-new-arrivals-reveal/AGENTS.md b/videos/dw-new-arrivals-reveal/AGENTS.md
new file mode 100644
index 0000000..a63562c
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/AGENTS.md
@@ -0,0 +1,93 @@
+# HyperFrames Composition Project
+
+## Skills — USE THESE FIRST
+
+**Always invoke the relevant skill before writing or modifying compositions.** Skills encode framework-specific patterns (e.g., `window.__timelines` registration, `data-*` attribute semantics, shader-compatible CSS rules) that are NOT in generic web docs. Skipping them produces broken compositions.
+
+**Doing anything with HyperFrames?** Start at `/hyperframes` — it tells you what HyperFrames can do and which skill or workflow handles your intent (make a video, TTS / BGM, prep footage, author / animate, render, install blocks), confirms your brief up front (the intent layer), and routes every "make me a…" request (a video, a deck, a composition port) to the right workflow. Read it first, especially when there's no project context to orient you. The workflows it routes to:
+
+- `/product-launch-video` — any **website** URL or brief / script → a product launch / SaaS / promo video, or a site tour / showcase featuring the site's own captured visuals.
+- `/faceless-explainer` — arbitrary text (topic / article / notes), **no URL, no website capture** → 60-90s faceless explainer.
+- `/embedded-captions` — an existing talking-head video (MP4) → the same footage with captions / subtitles added (rail + embed, or pure-cinematic embed); the footage itself is untouched.
+- `/talking-head-recut` — an existing talking-head / interview / podcast video (MP4) → the same footage **packaged with designed graphic overlays** (kinetic titles, lower-thirds, data callouts, pull-quotes, side panels, pip) synced to the transcript; the clip plays unchanged underneath. (Plain captions/subtitles → `/embedded-captions`.)
+- `/pr-to-video` — a GitHub PR (URL / `owner/repo#N` / "this PR") → 30-90s code-change explainer (changelog / feature reveal / fix / refactor).
+- `/motion-graphics` — a short (typically under 10s) design-led **motion graphic**, motion-is-the-message, no narration: kinetic type, a stat / number count-up, a chart, a logo sting, a lower-third / overlay, or an animated tweet / headline / captured-page highlight; rendered to MP4 or a transparent overlay. Longer / narrated / custom → `/general-video`.
+- `/music-to-video` — a **music track** (audio file, or video to pull audio from) → beat-synced video (lyric / slideshow / kinetic promo). Music drives pacing; user-supplied images / videos are cut onto the same beat grid.
+- `/slideshow` — a **presentation / pitch deck / interactive deck** — discrete slides, fragment reveals, branching, hotspot navigation, presenter mode. Output is a navigable deck, not a rendered video.
+- `/general-video` — fallback for any other video (title card, longer brand / sizzle reel, multi-scene montage, static loop, custom composition) and the home of **companion mode** — co-create with the full HyperFrames toolbox; the original hyperframes authoring flow, any length.
+
+**Porting an existing composition?** `/remotion-to-hyperframes` translates a Remotion (React) composition into HyperFrames HTML — a source migration, separate from the creation workflows above.
+
+The domain skills (`/hyperframes-core`, `/hyperframes-animation`, `/hyperframes-keyframes`, `/hyperframes-creative`, `/hyperframes-cli`, `/media-use`, `/hyperframes-registry`, `/figma`) and the full capability map live inside `/hyperframes` — it is the single source of truth for which skill handles which intent.
+
+> **Tailwind v4 projects** (`hyperframes init --tailwind`): see `/hyperframes-core` → `references/tailwind.md`.
+
+> **Skill missing or stale?** Run `npx hyperframes skills update <name>` to install/refresh
+> the specific skill you need (the `/hyperframes` router does this automatically before
+> entering a workflow), or bare `npx hyperframes skills update` to refresh the core set plus
+> everything already installed — neither pulls the full set. Restart the agent session so
+> newly installed skills load.
+
+## Commands
+
+```bash
+npm run dev          # start the preview server (long-running — keep it alive in background)
+npm run check        # lint + runtime + layout + motion + contrast (one command)
+npm run render       # render to MP4
+npm run publish      # publish and get a shareable link
+npx hyperframes lint --verbose  # include info-level findings
+npx hyperframes lint --json     # machine-readable output for CI
+npx hyperframes docs <topic> # reference docs in terminal
+```
+
+> **`npm run dev` is a long-running server, not a one-shot command.** It blocks until stopped.
+> In Claude Code, always run it with `run_in_background: true`. Never run it as a foreground
+> command — it will time out and the server will die, breaking the browser preview.
+
+> **Pinned CLI version.** These scripts pin an exact `hyperframes@X.Y.Z` so this project re-renders identically over time. Weeks later that pin lags fixes shipped since. To move up: `npx hyperframes@latest upgrade --project . --check` (shows the delta), then `npx hyperframes@latest upgrade --project .` to rewrite the pins. Always unpinned — the pinned script re-runs the old version against itself.
+
+## Documentation
+
+**For quick reference**, use the local CLI docs command (no network required):
+
+```bash
+npx hyperframes docs <topic>
+```
+
+Topics: `data-attributes`, `gsap`, `compositions`, `rendering`, `examples`, `troubleshooting`
+
+**For full documentation**, discover pages via the machine-readable index — do NOT guess URLs:
+
+```
+https://hyperframes.heygen.com/llms.txt
+```
+
+## Project Structure
+
+- `index.html` — main composition (root timeline)
+- `compositions/` — sub-compositions referenced via `data-composition-src`
+- `meta.json` — project metadata (id, name)
+- `transcript.json` — whisper word-level transcript (if generated)
+
+## Linting — ALWAYS RUN AFTER CHANGES
+
+After creating or editing any `.html` composition, **always** run the full check before considering the task complete:
+
+```bash
+npm run check
+```
+
+Fix all errors before presenting the result. Warnings should be reviewed before rendering.
+
+## Key Rules
+
+1. Every timed element needs `data-start`, `data-duration`, and `data-track-index`
+2. Elements with timing **MUST** have `class="clip"` — the framework uses this for visibility control
+3. Timelines must be paused and registered on `window.__timelines`:
+   ```js
+   window.__timelines = window.__timelines || {};
+   window.__timelines["composition-id"] = gsap.timeline({ paused: true });
+   ```
+4. Videos use `muted` with a separate `<audio>` element for the audio track
+5. Sub-compositions use `data-composition-src="compositions/file.html"` to reference other HTML files
+6. Only deterministic logic — no `Date.now()`, no `Math.random()`, no network fetches
diff --git a/videos/dw-new-arrivals-reveal/BRIEF.md b/videos/dw-new-arrivals-reveal/BRIEF.md
new file mode 100644
index 0000000..a6bc549
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/BRIEF.md
@@ -0,0 +1,54 @@
+---
+workflow: product-launch-video
+flow: automation
+storyboard: no
+message: "New-season wallcovering arrivals have landed — shop the reveal"
+destination: instagram-reels
+aspect: 1080x1920
+language: en
+audience: interior designers, trade professionals, and design-forward retail shoppers
+length: 45-55s
+angle: new-arrivals collection reveal
+style_preset: cartesian
+---
+
+## Intent
+
+A quiet-luxury "New Arrivals — Collection Reveal" promo Reel for Designer
+Wallcoverings. Editorial, to-the-trade credible, unhurried — the feel of a
+design house unveiling its new season rather than a sale. Serif display type,
+cream/ink/soft-accent palette. Structure is a collection reveal: a hook, a hero
+statement pattern, a cascade of the new patterns, and a close on the CTA.
+
+The source is Designer Wallcoverings' live New Arrivals collection (24 current
+new-arrival products). The video features the strongest, most visually-varied of
+these real, published patterns as its assets. These are existing live products —
+no settlement gate required.
+
+## Assets
+
+- capture/assets/floral-fantasy-soft-pink.jpg — Rebel Walls "Floral Fantasy", Soft Pink mural (pink/gray/black romantic florals) — the hero statement pattern. (1200x800)
+- capture/assets/venus-black-thibaut.jpg — Thibaut "Venus", Black — graphic ink-on-cream botanical, high-contrast. (1200x1200)
+- capture/assets/floral-elegance-gray.jpg — Rebel Walls "Floral Elegance", Gray — soft editorial floral. (1200x1376)
+- capture/assets/floral-chinoiserie-green.jpg — Rebel Walls "Floral Chinoiserie", Green — lush chinoiserie scenic. (1200x1432)
+- capture/assets/maranta-arrowroot-pale-green.jpg — Thibaut "Maranta Arrowroot", Pale Green — grasscloth-feel botanical.
+- capture/assets/daintree-bluemoon-thibaut.jpg — Thibaut "Daintree", Bluemoon — layered leaf motif, cool blue.
+- capture/assets/serengeti-aqua-thibaut.jpg — Thibaut "Serengeti", Aqua — animal-print texture, aqua.
+- capture/assets/gleniffer-black-and-grey.jpg — Thibaut "Gleniffer", Black and Grey — refined damask, monochrome.
+
+## Customizations
+
+- 9:16 Instagram Reels, 1080x1920.
+- Collection-reveal beat structure: hook → hero → feature cascade of patterns → CTA.
+- Closing CTA: "Shop New Arrivals at designerwallcoverings.com".
+
+## Notes
+
+- Brand voice: luxury, editorial, trade-credible. Designer Wallcoverings is both
+  to-the-trade and retail.
+- HARD RULE: never use the word "Wallpaper" anywhere (copy, captions, alt text,
+  narration). Always "Wallcovering" / "Wallcoverings".
+- Light cream accents: keep caption + wordmark contrast WCAG-safe (ink on cream,
+  never light-on-light).
+- Local audio only ($0): Kokoro TTS (default Marcia voice — omit --voice) +
+  MusicGen BGM via the tts-venv python.
diff --git a/videos/dw-new-arrivals-reveal/CLAUDE.md b/videos/dw-new-arrivals-reveal/CLAUDE.md
new file mode 100644
index 0000000..a63562c
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/CLAUDE.md
@@ -0,0 +1,93 @@
+# HyperFrames Composition Project
+
+## Skills — USE THESE FIRST
+
+**Always invoke the relevant skill before writing or modifying compositions.** Skills encode framework-specific patterns (e.g., `window.__timelines` registration, `data-*` attribute semantics, shader-compatible CSS rules) that are NOT in generic web docs. Skipping them produces broken compositions.
+
+**Doing anything with HyperFrames?** Start at `/hyperframes` — it tells you what HyperFrames can do and which skill or workflow handles your intent (make a video, TTS / BGM, prep footage, author / animate, render, install blocks), confirms your brief up front (the intent layer), and routes every "make me a…" request (a video, a deck, a composition port) to the right workflow. Read it first, especially when there's no project context to orient you. The workflows it routes to:
+
+- `/product-launch-video` — any **website** URL or brief / script → a product launch / SaaS / promo video, or a site tour / showcase featuring the site's own captured visuals.
+- `/faceless-explainer` — arbitrary text (topic / article / notes), **no URL, no website capture** → 60-90s faceless explainer.
+- `/embedded-captions` — an existing talking-head video (MP4) → the same footage with captions / subtitles added (rail + embed, or pure-cinematic embed); the footage itself is untouched.
+- `/talking-head-recut` — an existing talking-head / interview / podcast video (MP4) → the same footage **packaged with designed graphic overlays** (kinetic titles, lower-thirds, data callouts, pull-quotes, side panels, pip) synced to the transcript; the clip plays unchanged underneath. (Plain captions/subtitles → `/embedded-captions`.)
+- `/pr-to-video` — a GitHub PR (URL / `owner/repo#N` / "this PR") → 30-90s code-change explainer (changelog / feature reveal / fix / refactor).
+- `/motion-graphics` — a short (typically under 10s) design-led **motion graphic**, motion-is-the-message, no narration: kinetic type, a stat / number count-up, a chart, a logo sting, a lower-third / overlay, or an animated tweet / headline / captured-page highlight; rendered to MP4 or a transparent overlay. Longer / narrated / custom → `/general-video`.
+- `/music-to-video` — a **music track** (audio file, or video to pull audio from) → beat-synced video (lyric / slideshow / kinetic promo). Music drives pacing; user-supplied images / videos are cut onto the same beat grid.
+- `/slideshow` — a **presentation / pitch deck / interactive deck** — discrete slides, fragment reveals, branching, hotspot navigation, presenter mode. Output is a navigable deck, not a rendered video.
+- `/general-video` — fallback for any other video (title card, longer brand / sizzle reel, multi-scene montage, static loop, custom composition) and the home of **companion mode** — co-create with the full HyperFrames toolbox; the original hyperframes authoring flow, any length.
+
+**Porting an existing composition?** `/remotion-to-hyperframes` translates a Remotion (React) composition into HyperFrames HTML — a source migration, separate from the creation workflows above.
+
+The domain skills (`/hyperframes-core`, `/hyperframes-animation`, `/hyperframes-keyframes`, `/hyperframes-creative`, `/hyperframes-cli`, `/media-use`, `/hyperframes-registry`, `/figma`) and the full capability map live inside `/hyperframes` — it is the single source of truth for which skill handles which intent.
+
+> **Tailwind v4 projects** (`hyperframes init --tailwind`): see `/hyperframes-core` → `references/tailwind.md`.
+
+> **Skill missing or stale?** Run `npx hyperframes skills update <name>` to install/refresh
+> the specific skill you need (the `/hyperframes` router does this automatically before
+> entering a workflow), or bare `npx hyperframes skills update` to refresh the core set plus
+> everything already installed — neither pulls the full set. Restart the agent session so
+> newly installed skills load.
+
+## Commands
+
+```bash
+npm run dev          # start the preview server (long-running — keep it alive in background)
+npm run check        # lint + runtime + layout + motion + contrast (one command)
+npm run render       # render to MP4
+npm run publish      # publish and get a shareable link
+npx hyperframes lint --verbose  # include info-level findings
+npx hyperframes lint --json     # machine-readable output for CI
+npx hyperframes docs <topic> # reference docs in terminal
+```
+
+> **`npm run dev` is a long-running server, not a one-shot command.** It blocks until stopped.
+> In Claude Code, always run it with `run_in_background: true`. Never run it as a foreground
+> command — it will time out and the server will die, breaking the browser preview.
+
+> **Pinned CLI version.** These scripts pin an exact `hyperframes@X.Y.Z` so this project re-renders identically over time. Weeks later that pin lags fixes shipped since. To move up: `npx hyperframes@latest upgrade --project . --check` (shows the delta), then `npx hyperframes@latest upgrade --project .` to rewrite the pins. Always unpinned — the pinned script re-runs the old version against itself.
+
+## Documentation
+
+**For quick reference**, use the local CLI docs command (no network required):
+
+```bash
+npx hyperframes docs <topic>
+```
+
+Topics: `data-attributes`, `gsap`, `compositions`, `rendering`, `examples`, `troubleshooting`
+
+**For full documentation**, discover pages via the machine-readable index — do NOT guess URLs:
+
+```
+https://hyperframes.heygen.com/llms.txt
+```
+
+## Project Structure
+
+- `index.html` — main composition (root timeline)
+- `compositions/` — sub-compositions referenced via `data-composition-src`
+- `meta.json` — project metadata (id, name)
+- `transcript.json` — whisper word-level transcript (if generated)
+
+## Linting — ALWAYS RUN AFTER CHANGES
+
+After creating or editing any `.html` composition, **always** run the full check before considering the task complete:
+
+```bash
+npm run check
+```
+
+Fix all errors before presenting the result. Warnings should be reviewed before rendering.
+
+## Key Rules
+
+1. Every timed element needs `data-start`, `data-duration`, and `data-track-index`
+2. Elements with timing **MUST** have `class="clip"` — the framework uses this for visibility control
+3. Timelines must be paused and registered on `window.__timelines`:
+   ```js
+   window.__timelines = window.__timelines || {};
+   window.__timelines["composition-id"] = gsap.timeline({ paused: true });
+   ```
+4. Videos use `muted` with a separate `<audio>` element for the audio track
+5. Sub-compositions use `data-composition-src="compositions/file.html"` to reference other HTML files
+6. Only deterministic logic — no `Date.now()`, no `Math.random()`, no network fetches
diff --git a/videos/dw-new-arrivals-reveal/SCRIPT.md b/videos/dw-new-arrivals-reveal/SCRIPT.md
new file mode 100644
index 0000000..4caaaa1
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/SCRIPT.md
@@ -0,0 +1,64 @@
+# SCRIPT — dw-new-arrivals-reveal
+
+**Voice:** Marcia (Kokoro, local — default; --voice omitted)
+**Voice settings:** default
+**Voice direction:** Warm, poised, editorial. Unhurried luxury — a design house
+unveiling its new season, never a hard sell. Even, quiet confidence.
+
+---
+
+## Line 1 — Hook (Frame 1)
+
+**Time:** 0.0 – 4.0s
+**Delivery:** Settle in; land the promise gently.
+
+    The new season has arrived.
+
+## Line 2 — Hero reveal (Frame 2)
+
+**Time:** 4.0 – 11.0s
+**Delivery:** Present the flagship with a little reverence.
+
+    Leading the collection: Floral Fantasy from Rebel Walls — a full-wall mural in soft pink, gray, and black.
+
+## Line 3 — Venus (Frame 3)
+
+**Time:** 11.0 – 16.0s
+**Delivery:** Crisp, confident.
+
+    Venus, in graphic black — a bold botanical from Thibaut.
+
+## Line 4 — Florals (Frame 4)
+
+**Time:** 16.0 – 21.0s
+**Delivery:** Flowing, painterly.
+
+    Floral Chinoiserie in green, and Floral Elegance in gray — painterly murals from Rebel Walls.
+
+## Line 5 — Botanicals (Frame 5)
+
+**Time:** 21.0 – 26.0s
+**Delivery:** Calmer, cooler.
+
+    Maranta Arrowroot in pale green, and Daintree in bluemoon — layered botanicals from Thibaut.
+
+## Line 6 — Texture (Frame 6)
+
+**Time:** 26.0 – 31.0s
+**Delivery:** Assured, tie the pair together.
+
+    Serengeti in aqua, and the refined Gleniffer damask — texture and structure, both new from Thibaut.
+
+## Line 7 — Range (Frame 7)
+
+**Time:** 31.0 – 35.0s
+**Delivery:** Warm, summarizing.
+
+    Murals, grasscloths, and statement patterns — the season's newest, all in one place.
+
+## Line 8 — CTA (Frame 8)
+
+**Time:** 35.0 – 40.0s
+**Delivery:** Clear, inviting; land the domain cleanly.
+
+    Shop new arrivals at designer wallcoverings dot com.
diff --git a/videos/dw-new-arrivals-reveal/STORYBOARD.md b/videos/dw-new-arrivals-reveal/STORYBOARD.md
new file mode 100644
index 0000000..aef07eb
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/STORYBOARD.md
@@ -0,0 +1,127 @@
+---
+format: 1080x1920
+message: "New-season wallcovering arrivals have landed — shop the reveal"
+arc: Hook → Hero reveal → Feature cascade → CTA
+audience: interior designers, trade professionals, and design-forward retail shoppers
+mode: autonomous
+music: elegant
+---
+
+## Frame 1 — Hook
+
+- scene: Cormorant display title fades up on stone paper; a compass ring drifts in
+- duration: 4s
+- poster: 3s
+- transition_in: cut
+- status: outline
+- voiceover: "The new season has arrived."
+- asset_candidates: none (typographic cover)
+- src: compositions/frames/01-hook.html
+
+Open cold on the promise, purely typographic. Taupe label eyebrow "NEW ARRIVALS", a
+two-line Cormorant display headline in ink ("The new season / has arrived"), one faint
+compass ring behind. Quiet, editorial, unhurried — a design house opening its doors, not
+a sale. Sets the whole tone.
+
+## Frame 2 — Hero reveal
+
+- scene: Full-bleed Floral Fantasy mural rises behind a thin ink caption plate
+- duration: 7s
+- poster: 4s
+- transition_in: crossfade
+- status: outline
+- voiceover: "Leading the collection: Floral Fantasy from Rebel Walls — a full-wall mural in soft pink, gray, and black."
+- asset_candidates: capture/assets/floral-fantasy-soft-pink.jpg
+- src: compositions/frames/02-hero.html
+
+The statement piece. The pink/gray/black romantic floral mural fills the frame with a
+slow Ken-Burns push. A hairline-framed caption block, lower third, ink-on-cream:
+"Floral Fantasy · Rebel Walls". This is the flagship visual — give it room to breathe.
+
+## Frame 3 — Cascade: Venus
+
+- scene: Venus swatch settles into a hairline-framed portrait card, label beside it
+- duration: 5s
+- poster: 3s
+- transition_in: wipe
+- status: outline
+- voiceover: "Venus, in graphic black — a bold botanical from Thibaut."
+- asset_candidates: capture/assets/venus-black-thibaut.jpg
+- src: compositions/frames/03-venus.html
+
+Begin the feature cascade. Off-center portrait image on the right in a 1px taupe frame,
+Cormorant pattern name + taupe attribution on the left. High-contrast ink-on-cream keeps
+the eye moving.
+
+## Frame 4 — Cascade: Chinoiserie & Elegance
+
+- scene: Two floral panels slide in stacked, each with a hairline label
+- duration: 5s
+- poster: 3s
+- transition_in: crossfade
+- status: outline
+- voiceover: "Floral Chinoiserie in green, and Floral Elegance in gray — painterly murals from Rebel Walls."
+- asset_candidates: capture/assets/floral-chinoiserie-green.jpg, capture/assets/floral-elegance-gray.jpg
+- src: compositions/frames/04-florals.html
+
+Two-up beat to build pace. Two mural panels stacked or side-by-side, each in a taupe
+hairline frame with a small Cormorant caption. Lush green chinoiserie against soft gray
+floral — variety of mood in one breath.
+
+## Frame 5 — Cascade: Botanicals
+
+- scene: Maranta and Daintree swatches enter with staggered timing
+- duration: 5s
+- poster: 3s
+- transition_in: wipe
+- status: outline
+- voiceover: "Maranta Arrowroot in pale green, and Daintree in bluemoon — layered botanicals from Thibaut."
+- asset_candidates: capture/assets/maranta-arrowroot-pale-green.jpg, capture/assets/daintree-bluemoon-thibaut.jpg
+- src: compositions/frames/05-botanicals.html
+
+The tonal, textural beat. Two calmer swatches — grasscloth-feel arrowroot and cool
+bluemoon leaf motif — each hairline-framed with a Cormorant name. Cool, quiet greens and
+blues after the drama.
+
+## Frame 6 — Cascade: Serengeti & Gleniffer
+
+- scene: Serengeti and Gleniffer settle in; a taupe rule ties the pair
+- duration: 5s
+- poster: 3s
+- transition_in: crossfade
+- status: outline
+- voiceover: "Serengeti in aqua, and the refined Gleniffer damask — texture and structure, both new from Thibaut."
+- asset_candidates: capture/assets/serengeti-aqua-thibaut.jpg, capture/assets/gleniffer-black-and-grey.jpg
+- src: compositions/frames/06-texture.html
+
+Close the cascade on contrast: aqua animal-print texture against a black-and-grey damask.
+Two hairline-framed swatches with Cormorant names, a single taupe rule beneath tying them.
+
+## Frame 7 — Range line
+
+- scene: A short taupe rule; a Cormorant line naming the season's breadth
+- duration: 4s
+- poster: 3s
+- transition_in: crossfade
+- status: outline
+- voiceover: "Murals, grasscloths, and statement patterns — the season's newest, all in one place."
+- asset_candidates: none (typographic bridge)
+- src: compositions/frames/07-range.html
+
+A quiet typographic breath before the CTA. One centered Cormorant line over a taupe rule,
+restating the range. No imagery — let the patterns just shown do the memory work.
+
+## Frame 8 — CTA
+
+- scene: Centered Cormorant sign-off inside the largest compass ring; one ink accent line; the URL
+- duration: 5s
+- poster: 3s
+- transition_in: crossfade
+- status: outline
+- voiceover: "Shop new arrivals at designerwallcoverings.com."
+- asset_candidates: none (typographic closer)
+- src: compositions/frames/08-cta.html
+
+The closing plate. Centered Cormorant "Shop New Arrivals" inside the largest compass ring,
+a short ink horizontal-accent beneath, then the URL "designerwallcoverings.com" in tracked
+taupe. The one clear next step.
diff --git a/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-400.woff2 b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-400.woff2
new file mode 100644
index 0000000..9be8870
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-400.woff2 differ
diff --git a/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-500.woff2 b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-500.woff2
new file mode 100644
index 0000000..12aa705
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-500.woff2 differ
diff --git a/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-600.woff2 b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-600.woff2
new file mode 100644
index 0000000..88ec261
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-600.woff2 differ
diff --git a/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-italic-400.woff2 b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-italic-400.woff2
new file mode 100644
index 0000000..68922f7
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/fonts/cormorant-italic-400.woff2 differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/01.wav b/videos/dw-new-arrivals-reveal/assets/voice/01.wav
new file mode 100644
index 0000000..4aaf62e
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/01.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/02.wav b/videos/dw-new-arrivals-reveal/assets/voice/02.wav
new file mode 100644
index 0000000..d7c8b39
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/02.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/03.wav b/videos/dw-new-arrivals-reveal/assets/voice/03.wav
new file mode 100644
index 0000000..6dd5816
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/03.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/04.wav b/videos/dw-new-arrivals-reveal/assets/voice/04.wav
new file mode 100644
index 0000000..b085eec
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/04.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/05.wav b/videos/dw-new-arrivals-reveal/assets/voice/05.wav
new file mode 100644
index 0000000..6f1e3da
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/05.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/06.wav b/videos/dw-new-arrivals-reveal/assets/voice/06.wav
new file mode 100644
index 0000000..70f0611
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/06.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/07.wav b/videos/dw-new-arrivals-reveal/assets/voice/07.wav
new file mode 100644
index 0000000..9b7d4b0
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/07.wav differ
diff --git a/videos/dw-new-arrivals-reveal/assets/voice/08.wav b/videos/dw-new-arrivals-reveal/assets/voice/08.wav
new file mode 100644
index 0000000..0271be9
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/assets/voice/08.wav differ
diff --git a/videos/dw-new-arrivals-reveal/audio_engine_meta.json b/videos/dw-new-arrivals-reveal/audio_engine_meta.json
new file mode 100644
index 0000000..6a146de
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/audio_engine_meta.json
@@ -0,0 +1,454 @@
+{
+  "tts_provider": "kokoro",
+  "voice_id": "am_michael",
+  "bgm": null,
+  "bgm_pending": false,
+  "bgm_provider": null,
+  "bgm_pid": null,
+  "bgm_log": null,
+  "bgm_mode": null,
+  "bgm_target_duration_s": null,
+  "bgm_seed_duration_s": null,
+  "bgm_loop_count": null,
+  "voices": [
+    {
+      "id": "01",
+      "path": "assets/voice/01.wav",
+      "duration_s": 1.835,
+      "words": []
+    },
+    {
+      "id": "02",
+      "path": "assets/voice/02.wav",
+      "duration_s": 7.189,
+      "words": [
+        {
+          "id": "w0",
+          "text": "leading",
+          "start": 0.08,
+          "end": 0.41
+        },
+        {
+          "id": "w1",
+          "text": "the",
+          "start": 0.47,
+          "end": 0.63
+        },
+        {
+          "id": "w2",
+          "text": "collection,",
+          "start": 0.63,
+          "end": 1.42
+        },
+        {
+          "id": "w3",
+          "text": "Floral",
+          "start": 1.51,
+          "end": 1.78
+        },
+        {
+          "id": "w4",
+          "text": "Fantasy",
+          "start": 1.93,
+          "end": 2.39
+        },
+        {
+          "id": "w5",
+          "text": "from",
+          "start": 2.48,
+          "end": 2.78
+        },
+        {
+          "id": "w6",
+          "text": "Rebel",
+          "start": 2.78,
+          "end": 3.25
+        },
+        {
+          "id": "w7",
+          "text": "Walls,",
+          "start": 3.25,
+          "end": 3.8
+        },
+        {
+          "id": "w8",
+          "text": "a",
+          "start": 3.87,
+          "end": 3.92
+        },
+        {
+          "id": "w9",
+          "text": "full-wall",
+          "start": 3.92,
+          "end": 4.56
+        },
+        {
+          "id": "w10",
+          "text": "mural",
+          "start": 4.56,
+          "end": 5.02
+        },
+        {
+          "id": "w11",
+          "text": "in",
+          "start": 5.04,
+          "end": 5.2
+        },
+        {
+          "id": "w12",
+          "text": "soft",
+          "start": 5.2,
+          "end": 5.49
+        },
+        {
+          "id": "w13",
+          "text": "pink,",
+          "start": 5.59,
+          "end": 5.97
+        },
+        {
+          "id": "w14",
+          "text": "gray,",
+          "start": 6.18,
+          "end": 6.48
+        },
+        {
+          "id": "w15",
+          "text": "and",
+          "start": 6.48,
+          "end": 6.75
+        },
+        {
+          "id": "w16",
+          "text": "black.",
+          "start": 6.75,
+          "end": 7.18
+        }
+      ]
+    },
+    {
+      "id": "03",
+      "path": "assets/voice/03.wav",
+      "duration_s": 3.883,
+      "words": []
+    },
+    {
+      "id": "04",
+      "path": "assets/voice/04.wav",
+      "duration_s": 6.869,
+      "words": []
+    },
+    {
+      "id": "05",
+      "path": "assets/voice/05.wav",
+      "duration_s": 6.123,
+      "words": [
+        {
+          "id": "w0",
+          "text": "Maranta",
+          "start": 0.04,
+          "end": 0.46
+        },
+        {
+          "id": "w1",
+          "text": "Arrowroot",
+          "start": 0.46,
+          "end": 1.37
+        },
+        {
+          "id": "w2",
+          "text": "in",
+          "start": 1.43,
+          "end": 1.62
+        },
+        {
+          "id": "w3",
+          "text": "Pale",
+          "start": 1.62,
+          "end": 2.04
+        },
+        {
+          "id": "w4",
+          "text": "Green,",
+          "start": 2.04,
+          "end": 2.64
+        },
+        {
+          "id": "w5",
+          "text": "and",
+          "start": 2.67,
+          "end": 2.88
+        },
+        {
+          "id": "w6",
+          "text": "Daintree",
+          "start": 2.88,
+          "end": 3.5
+        },
+        {
+          "id": "w7",
+          "text": "in",
+          "start": 3.5,
+          "end": 3.66
+        },
+        {
+          "id": "w8",
+          "text": "Blue",
+          "start": 3.66,
+          "end": 3.91
+        },
+        {
+          "id": "w9",
+          "text": "Moon,",
+          "start": 3.98,
+          "end": 4.42
+        },
+        {
+          "id": "w10",
+          "text": "layered",
+          "start": 4.42,
+          "end": 4.78
+        },
+        {
+          "id": "w11",
+          "text": "botanicals",
+          "start": 4.78,
+          "end": 5.32
+        },
+        {
+          "id": "w12",
+          "text": "from",
+          "start": 5.32,
+          "end": 5.5
+        },
+        {
+          "id": "w13",
+          "text": "Thibbout.",
+          "start": 5.5,
+          "end": 5.91
+        }
+      ]
+    },
+    {
+      "id": "06",
+      "path": "assets/voice/06.wav",
+      "duration_s": 6.507,
+      "words": [
+        {
+          "id": "w0",
+          "text": "Serengeti",
+          "start": 0.07,
+          "end": 0.83
+        },
+        {
+          "id": "w1",
+          "text": "and",
+          "start": 0.91,
+          "end": 1.21
+        },
+        {
+          "id": "w2",
+          "text": "Aqua,",
+          "start": 1.21,
+          "end": 1.75
+        },
+        {
+          "id": "w3",
+          "text": "and",
+          "start": 1.75,
+          "end": 1.92
+        },
+        {
+          "id": "w4",
+          "text": "the",
+          "start": 1.92,
+          "end": 1.99
+        },
+        {
+          "id": "w5",
+          "text": "refined",
+          "start": 2.13,
+          "end": 2.52
+        },
+        {
+          "id": "w6",
+          "text": "Glenifer",
+          "start": 2.52,
+          "end": 3.16
+        },
+        {
+          "id": "w7",
+          "text": "damask",
+          "start": 3.16,
+          "end": 3.59
+        },
+        {
+          "id": "w8",
+          "text": "texture",
+          "start": 3.7,
+          "end": 4.16
+        },
+        {
+          "id": "w9",
+          "text": "and",
+          "start": 4.16,
+          "end": 4.31
+        },
+        {
+          "id": "w10",
+          "text": "structure,",
+          "start": 4.38,
+          "end": 5.13
+        },
+        {
+          "id": "w11",
+          "text": "both",
+          "start": 5.23,
+          "end": 5.42
+        },
+        {
+          "id": "w12",
+          "text": "new",
+          "start": 5.53,
+          "end": 5.63
+        },
+        {
+          "id": "w13",
+          "text": "from",
+          "start": 5.63,
+          "end": 5.92
+        },
+        {
+          "id": "w14",
+          "text": "Thibbout.",
+          "start": 5.99,
+          "end": 6.42
+        }
+      ]
+    },
+    {
+      "id": "07",
+      "path": "assets/voice/07.wav",
+      "duration_s": 5.483,
+      "words": [
+        {
+          "id": "w0",
+          "text": "murals,",
+          "start": 0.06,
+          "end": 0.52
+        },
+        {
+          "id": "w1",
+          "text": "grass",
+          "start": 0.52,
+          "end": 0.87
+        },
+        {
+          "id": "w2",
+          "text": "cloths",
+          "start": 0.87,
+          "end": 1.24
+        },
+        {
+          "id": "w3",
+          "text": "and",
+          "start": 1.31,
+          "end": 1.47
+        },
+        {
+          "id": "w4",
+          "text": "statement",
+          "start": 1.47,
+          "end": 2.09
+        },
+        {
+          "id": "w5",
+          "text": "patterns,",
+          "start": 2.09,
+          "end": 2.76
+        },
+        {
+          "id": "w6",
+          "text": "the",
+          "start": 2.82,
+          "end": 2.88
+        },
+        {
+          "id": "w7",
+          "text": "season's",
+          "start": 2.88,
+          "end": 3.67
+        },
+        {
+          "id": "w8",
+          "text": "newest,",
+          "start": 3.67,
+          "end": 4.4
+        },
+        {
+          "id": "w9",
+          "text": "all",
+          "start": 4.4,
+          "end": 4.58
+        },
+        {
+          "id": "w10",
+          "text": "in",
+          "start": 4.58,
+          "end": 4.71
+        },
+        {
+          "id": "w11",
+          "text": "one",
+          "start": 4.71,
+          "end": 4.92
+        },
+        {
+          "id": "w12",
+          "text": "place.",
+          "start": 4.92,
+          "end": 5.44
+        }
+      ]
+    },
+    {
+      "id": "08",
+      "path": "assets/voice/08.wav",
+      "duration_s": 3.499,
+      "words": [
+        {
+          "id": "w0",
+          "text": "Shop",
+          "start": 0.07,
+          "end": 0.3
+        },
+        {
+          "id": "w1",
+          "text": "new",
+          "start": 0.41,
+          "end": 0.54
+        },
+        {
+          "id": "w2",
+          "text": "arrivals",
+          "start": 0.54,
+          "end": 1.15
+        },
+        {
+          "id": "w3",
+          "text": "at",
+          "start": 1.15,
+          "end": 1.31
+        },
+        {
+          "id": "w4",
+          "text": "designerwallcoverings.com",
+          "start": 1.31,
+          "end": 3.26
+        }
+      ]
+    }
+  ],
+  "sfx": [],
+  "total_duration_s": 41.388
+}
\ No newline at end of file
diff --git a/videos/dw-new-arrivals-reveal/audio_meta.json b/videos/dw-new-arrivals-reveal/audio_meta.json
new file mode 100644
index 0000000..04b8414
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/audio_meta.json
@@ -0,0 +1,443 @@
+{
+  "bgm": null,
+  "voices": [
+    {
+      "frame": 1,
+      "path": "assets/voice/01.wav",
+      "duration_s": 1.835,
+      "words": []
+    },
+    {
+      "frame": 2,
+      "path": "assets/voice/02.wav",
+      "duration_s": 7.189,
+      "words": [
+        {
+          "id": "w0",
+          "text": "leading",
+          "start": 0.08,
+          "end": 0.41
+        },
+        {
+          "id": "w1",
+          "text": "the",
+          "start": 0.47,
+          "end": 0.63
+        },
+        {
+          "id": "w2",
+          "text": "collection,",
+          "start": 0.63,
+          "end": 1.42
+        },
+        {
+          "id": "w3",
+          "text": "Floral",
+          "start": 1.51,
+          "end": 1.78
+        },
+        {
+          "id": "w4",
+          "text": "Fantasy",
+          "start": 1.93,
+          "end": 2.39
+        },
+        {
+          "id": "w5",
+          "text": "from",
+          "start": 2.48,
+          "end": 2.78
+        },
+        {
+          "id": "w6",
+          "text": "Rebel",
+          "start": 2.78,
+          "end": 3.25
+        },
+        {
+          "id": "w7",
+          "text": "Walls,",
+          "start": 3.25,
+          "end": 3.8
+        },
+        {
+          "id": "w8",
+          "text": "a",
+          "start": 3.87,
+          "end": 3.92
+        },
+        {
+          "id": "w9",
+          "text": "full-wall",
+          "start": 3.92,
+          "end": 4.56
+        },
+        {
+          "id": "w10",
+          "text": "mural",
+          "start": 4.56,
+          "end": 5.02
+        },
+        {
+          "id": "w11",
+          "text": "in",
+          "start": 5.04,
+          "end": 5.2
+        },
+        {
+          "id": "w12",
+          "text": "soft",
+          "start": 5.2,
+          "end": 5.49
+        },
+        {
+          "id": "w13",
+          "text": "pink,",
+          "start": 5.59,
+          "end": 5.97
+        },
+        {
+          "id": "w14",
+          "text": "gray,",
+          "start": 6.18,
+          "end": 6.48
+        },
+        {
+          "id": "w15",
+          "text": "and",
+          "start": 6.48,
+          "end": 6.75
+        },
+        {
+          "id": "w16",
+          "text": "black.",
+          "start": 6.75,
+          "end": 7.18
+        }
+      ]
+    },
+    {
+      "frame": 3,
+      "path": "assets/voice/03.wav",
+      "duration_s": 3.883,
+      "words": []
+    },
+    {
+      "frame": 4,
+      "path": "assets/voice/04.wav",
+      "duration_s": 6.869,
+      "words": []
+    },
+    {
+      "frame": 5,
+      "path": "assets/voice/05.wav",
+      "duration_s": 6.123,
+      "words": [
+        {
+          "id": "w0",
+          "text": "Maranta",
+          "start": 0.04,
+          "end": 0.46
+        },
+        {
+          "id": "w1",
+          "text": "Arrowroot",
+          "start": 0.46,
+          "end": 1.37
+        },
+        {
+          "id": "w2",
+          "text": "in",
+          "start": 1.43,
+          "end": 1.62
+        },
+        {
+          "id": "w3",
+          "text": "Pale",
+          "start": 1.62,
+          "end": 2.04
+        },
+        {
+          "id": "w4",
+          "text": "Green,",
+          "start": 2.04,
+          "end": 2.64
+        },
+        {
+          "id": "w5",
+          "text": "and",
+          "start": 2.67,
+          "end": 2.88
+        },
+        {
+          "id": "w6",
+          "text": "Daintree",
+          "start": 2.88,
+          "end": 3.5
+        },
+        {
+          "id": "w7",
+          "text": "in",
+          "start": 3.5,
+          "end": 3.66
+        },
+        {
+          "id": "w8",
+          "text": "Blue",
+          "start": 3.66,
+          "end": 3.91
+        },
+        {
+          "id": "w9",
+          "text": "Moon,",
+          "start": 3.98,
+          "end": 4.42
+        },
+        {
+          "id": "w10",
+          "text": "layered",
+          "start": 4.42,
+          "end": 4.78
+        },
+        {
+          "id": "w11",
+          "text": "botanicals",
+          "start": 4.78,
+          "end": 5.32
+        },
+        {
+          "id": "w12",
+          "text": "from",
+          "start": 5.32,
+          "end": 5.5
+        },
+        {
+          "id": "w13",
+          "text": "Thibbout.",
+          "start": 5.5,
+          "end": 5.91
+        }
+      ]
+    },
+    {
+      "frame": 6,
+      "path": "assets/voice/06.wav",
+      "duration_s": 6.507,
+      "words": [
+        {
+          "id": "w0",
+          "text": "Serengeti",
+          "start": 0.07,
+          "end": 0.83
+        },
+        {
+          "id": "w1",
+          "text": "and",
+          "start": 0.91,
+          "end": 1.21
+        },
+        {
+          "id": "w2",
+          "text": "Aqua,",
+          "start": 1.21,
+          "end": 1.75
+        },
+        {
+          "id": "w3",
+          "text": "and",
+          "start": 1.75,
+          "end": 1.92
+        },
+        {
+          "id": "w4",
+          "text": "the",
+          "start": 1.92,
+          "end": 1.99
+        },
+        {
+          "id": "w5",
+          "text": "refined",
+          "start": 2.13,
+          "end": 2.52
+        },
+        {
+          "id": "w6",
+          "text": "Glenifer",
+          "start": 2.52,
+          "end": 3.16
+        },
+        {
+          "id": "w7",
+          "text": "damask",
+          "start": 3.16,
+          "end": 3.59
+        },
+        {
+          "id": "w8",
+          "text": "texture",
+          "start": 3.7,
+          "end": 4.16
+        },
+        {
+          "id": "w9",
+          "text": "and",
+          "start": 4.16,
+          "end": 4.31
+        },
+        {
+          "id": "w10",
+          "text": "structure,",
+          "start": 4.38,
+          "end": 5.13
+        },
+        {
+          "id": "w11",
+          "text": "both",
+          "start": 5.23,
+          "end": 5.42
+        },
+        {
+          "id": "w12",
+          "text": "new",
+          "start": 5.53,
+          "end": 5.63
+        },
+        {
+          "id": "w13",
+          "text": "from",
+          "start": 5.63,
+          "end": 5.92
+        },
+        {
+          "id": "w14",
+          "text": "Thibbout.",
+          "start": 5.99,
+          "end": 6.42
+        }
+      ]
+    },
+    {
+      "frame": 7,
+      "path": "assets/voice/07.wav",
+      "duration_s": 5.483,
+      "words": [
+        {
+          "id": "w0",
+          "text": "murals,",
+          "start": 0.06,
+          "end": 0.52
+        },
+        {
+          "id": "w1",
+          "text": "grass",
+          "start": 0.52,
+          "end": 0.87
+        },
+        {
+          "id": "w2",
+          "text": "cloths",
+          "start": 0.87,
+          "end": 1.24
+        },
+        {
+          "id": "w3",
+          "text": "and",
+          "start": 1.31,
+          "end": 1.47
+        },
+        {
+          "id": "w4",
+          "text": "statement",
+          "start": 1.47,
+          "end": 2.09
+        },
+        {
+          "id": "w5",
+          "text": "patterns,",
+          "start": 2.09,
+          "end": 2.76
+        },
+        {
+          "id": "w6",
+          "text": "the",
+          "start": 2.82,
+          "end": 2.88
+        },
+        {
+          "id": "w7",
+          "text": "season's",
+          "start": 2.88,
+          "end": 3.67
+        },
+        {
+          "id": "w8",
+          "text": "newest,",
+          "start": 3.67,
+          "end": 4.4
+        },
+        {
+          "id": "w9",
+          "text": "all",
+          "start": 4.4,
+          "end": 4.58
+        },
+        {
+          "id": "w10",
+          "text": "in",
+          "start": 4.58,
+          "end": 4.71
+        },
+        {
+          "id": "w11",
+          "text": "one",
+          "start": 4.71,
+          "end": 4.92
+        },
+        {
+          "id": "w12",
+          "text": "place.",
+          "start": 4.92,
+          "end": 5.44
+        }
+      ]
+    },
+    {
+      "frame": 8,
+      "path": "assets/voice/08.wav",
+      "duration_s": 3.499,
+      "words": [
+        {
+          "id": "w0",
+          "text": "Shop",
+          "start": 0.07,
+          "end": 0.3
+        },
+        {
+          "id": "w1",
+          "text": "new",
+          "start": 0.41,
+          "end": 0.54
+        },
+        {
+          "id": "w2",
+          "text": "arrivals",
+          "start": 0.54,
+          "end": 1.15
+        },
+        {
+          "id": "w3",
+          "text": "at",
+          "start": 1.15,
+          "end": 1.31
+        },
+        {
+          "id": "w4",
+          "text": "designerwallcoverings.com",
+          "start": 1.31,
+          "end": 3.26
+        }
+      ]
+    }
+  ],
+  "sfx": []
+}
\ No newline at end of file
diff --git a/videos/dw-new-arrivals-reveal/audio_request.json b/videos/dw-new-arrivals-reveal/audio_request.json
new file mode 100644
index 0000000..ebd1c93
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/audio_request.json
@@ -0,0 +1,44 @@
+{
+  "provider": "kokoro",
+  "speed": 1,
+  "lines": [
+    {
+      "id": "01",
+      "text": "The new season has arrived."
+    },
+    {
+      "id": "02",
+      "text": "Leading the collection: Floral Fantasy from Rebel Walls — a full-wall mural in soft pink, gray, and black."
+    },
+    {
+      "id": "03",
+      "text": "Venus, in graphic black — a bold botanical from Thibaut."
+    },
+    {
+      "id": "04",
+      "text": "Floral Chinoiserie in green, and Floral Elegance in gray — painterly murals from Rebel Walls."
+    },
+    {
+      "id": "05",
+      "text": "Maranta Arrowroot in pale green, and Daintree in bluemoon — layered botanicals from Thibaut."
+    },
+    {
+      "id": "06",
+      "text": "Serengeti in aqua, and the refined Gleniffer damask — texture and structure, both new from Thibaut."
+    },
+    {
+      "id": "07",
+      "text": "Murals, grasscloths, and statement patterns — the season's newest, all in one place."
+    },
+    {
+      "id": "08",
+      "text": "Shop new arrivals at designer wallcoverings dot com."
+    }
+  ],
+  "bgm": {
+    "mode": "retrieve",
+    "query": "elegant",
+    "blob": "New-season wallcovering arrivals have landed — shop the reveal",
+    "arc": "Hook → Hero reveal → Feature cascade → CTA"
+  }
+}
\ No newline at end of file
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/daintree-bluemoon-thibaut.jpg b/videos/dw-new-arrivals-reveal/capture/assets/daintree-bluemoon-thibaut.jpg
new file mode 100644
index 0000000..653714e
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/daintree-bluemoon-thibaut.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/floral-chinoiserie-green.jpg b/videos/dw-new-arrivals-reveal/capture/assets/floral-chinoiserie-green.jpg
new file mode 100644
index 0000000..afb2556
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/floral-chinoiserie-green.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/floral-elegance-gray.jpg b/videos/dw-new-arrivals-reveal/capture/assets/floral-elegance-gray.jpg
new file mode 100644
index 0000000..da55ba0
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/floral-elegance-gray.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/floral-fantasy-soft-pink.jpg b/videos/dw-new-arrivals-reveal/capture/assets/floral-fantasy-soft-pink.jpg
new file mode 100644
index 0000000..9af88f2
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/floral-fantasy-soft-pink.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/gleniffer-black-and-grey.jpg b/videos/dw-new-arrivals-reveal/capture/assets/gleniffer-black-and-grey.jpg
new file mode 100644
index 0000000..cb2d5ac
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/gleniffer-black-and-grey.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/maranta-arrowroot-pale-green.jpg b/videos/dw-new-arrivals-reveal/capture/assets/maranta-arrowroot-pale-green.jpg
new file mode 100644
index 0000000..33285a2
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/maranta-arrowroot-pale-green.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/serengeti-aqua-thibaut.jpg b/videos/dw-new-arrivals-reveal/capture/assets/serengeti-aqua-thibaut.jpg
new file mode 100644
index 0000000..4e060cd
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/serengeti-aqua-thibaut.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/assets/venus-black-thibaut.jpg b/videos/dw-new-arrivals-reveal/capture/assets/venus-black-thibaut.jpg
new file mode 100644
index 0000000..945752c
Binary files /dev/null and b/videos/dw-new-arrivals-reveal/capture/assets/venus-black-thibaut.jpg differ
diff --git a/videos/dw-new-arrivals-reveal/capture/extracted/asset-descriptions.md b/videos/dw-new-arrivals-reveal/capture/extracted/asset-descriptions.md
new file mode 100644
index 0000000..5deb512
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/capture/extracted/asset-descriptions.md
@@ -0,0 +1,23 @@
+# Asset inventory — Designer Wallcoverings New Arrivals
+
+Eight new-arrival product images were downloaded locally to `capture/assets/`
+from the DW New Arrivals collection (no-capture path — provided source, not
+crawled). All are true JPEG, verified with `file`. Selected for visual variety
+and impact.
+
+| File | Pattern / Vendor | Look | Dominant color | Dims | Role |
+|---|---|---|---|---|---|
+| `capture/assets/floral-fantasy-soft-pink.jpg` | Floral Fantasy / Rebel Walls | Full-wall romantic floral mural, blowsy blooms | Soft pink, gray, black | 1200x800 | **Hero** — statement pattern |
+| `capture/assets/venus-black-thibaut.jpg` | Venus / Thibaut | Graphic ink botanical, bold silhouettes | Black on cream | 1200x1200 | Cascade — high-contrast beat |
+| `capture/assets/floral-elegance-gray.jpg` | Floral Elegance / Rebel Walls | Soft editorial floral, painterly | Gray, blush | 1200x1376 | Cascade |
+| `capture/assets/floral-chinoiserie-green.jpg` | Floral Chinoiserie / Rebel Walls | Lush chinoiserie scenic, birds-and-branches | Green | 1200x1432 | Cascade |
+| `capture/assets/maranta-arrowroot-pale-green.jpg` | Maranta Arrowroot / Thibaut | Grasscloth-feel botanical, arrowroot leaves | Pale green | 1200x1200 | Cascade |
+| `capture/assets/daintree-bluemoon-thibaut.jpg` | Daintree / Thibaut | Layered leaf motif, tropical foliage | Cool blue (bluemoon) | 1200x1200 | Cascade |
+| `capture/assets/serengeti-aqua-thibaut.jpg` | Serengeti / Thibaut | Animal-print texture, tonal spots | Aqua | 1200x1200 | Cascade |
+| `capture/assets/gleniffer-black-and-grey.jpg` | Gleniffer / Thibaut | Refined damask, symmetrical | Black and grey | 1200x1200 | Cascade / close |
+
+Notes:
+- The three Rebel Walls files are room-setting interiors (mural on a styled wall);
+  the five Thibaut files are flat pattern swatches.
+- No brand logo asset captured; the DW wordmark is rendered as type from the
+  cartesian preset's display font.
diff --git a/videos/dw-new-arrivals-reveal/capture/extracted/tokens.json b/videos/dw-new-arrivals-reveal/capture/extracted/tokens.json
new file mode 100644
index 0000000..02491af
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/capture/extracted/tokens.json
@@ -0,0 +1,6 @@
+{
+  "title": "New Arrivals — Designer Wallcoverings",
+  "description": "New-season wallcovering arrivals from Designer Wallcoverings: a collection reveal of the season's newest patterns from Rebel Walls and Thibaut.",
+  "colors": ["#1c1a17", "#f4efe6", "#b98a7a", "#7c8c6f", "#2f3d4a"],
+  "fonts": ["Cormorant Garamond", "Inter"]
+}
diff --git a/videos/dw-new-arrivals-reveal/capture/extracted/visible-text.txt b/videos/dw-new-arrivals-reveal/capture/extracted/visible-text.txt
new file mode 100644
index 0000000..457a9eb
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/capture/extracted/visible-text.txt
@@ -0,0 +1,23 @@
+Designer Wallcoverings — New Arrivals — Collection Reveal
+
+The new season has landed. Designer Wallcoverings has just added its newest
+wallcovering arrivals — statement murals and refined patterns from the houses of
+Rebel Walls and Thibaut.
+
+Hero: Floral Fantasy, Soft Pink (Rebel Walls) — romantic pink, gray and black
+florals rendered as a full-wall mural.
+
+The new arrivals:
+- Floral Fantasy — Rebel Walls — soft pink, gray, black romantic florals ($191)
+- Venus, Black — Thibaut — graphic ink-on-cream botanical
+- Floral Elegance, Gray — Rebel Walls — soft editorial floral ($191)
+- Floral Chinoiserie, Green — Rebel Walls — lush chinoiserie scenic ($191)
+- Maranta Arrowroot, Pale Green — Thibaut — grasscloth-feel botanical
+- Daintree, Bluemoon — Thibaut — layered leaf motif in cool blue
+- Serengeti, Aqua — Thibaut — animal-print texture in aqua
+- Gleniffer, Black and Grey — Thibaut — refined monochrome damask
+
+Closing call to action: Shop New Arrivals at designerwallcoverings.com
+
+Brand voice: luxury, editorial, to-the-trade and retail. Never the word
+"Wallpaper" — always "Wallcovering" / "Wallcoverings".
diff --git a/videos/dw-new-arrivals-reveal/frame.md b/videos/dw-new-arrivals-reveal/frame.md
new file mode 100644
index 0000000..0cf596d
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/frame.md
@@ -0,0 +1,286 @@
+---
+version: alpha
+name: Cartesian — Frame (video / frame layer)
+description: >
+  Video-first companion to Cartesian's design.md. The unit is the frame (1920×1080). Atoms are
+  identical and sacred — the five-tone warm-stone palette, Cormorant Garamond 400 + Cormorant Garamond, the
+  universal 1px taupe hairline as the only structural device, compass-drafted geometric rings,
+  and zero shadow / zero fill. Composition, frame scale, and aspect-ratio behavior are rewritten
+  for the frame. Restraint is the rule; motion is out of scope.
+unit: the frame — 1920×1080 primary; 9:16 and 1:1 documented
+principle: atoms are sacred · composition is free · numbers come from the script
+
+colors:
+  bg-primary: "#f4efe6"
+  bg-secondary: "#E5D4CE"
+  text-primary: "#1c1a17"
+  text-secondary: "#5A5A5A"
+  accent: "#7c8c6f"
+  line: "#b98a7a"
+  white-overlay: "rgba(255,255,255,0.3)"
+
+typography:
+  # — reading ramp (Cormorant Garamond) —
+  body:        { fontFamily: "Cormorant Garamond", cqw: 1.0,  weight: 400, lineHeight: 1.6, color: "text-secondary" }
+  body-sm:     { fontFamily: "Cormorant Garamond", cqw: 0.85, weight: 400, lineHeight: 1.6 }
+  subtitle:    { fontFamily: "Cormorant Garamond", cqw: 1.3,  weight: 400, lineHeight: 1.5 }
+  label:       { fontFamily: "Cormorant Garamond", px: 14, weight: 500, tracking: "3px", upper: true, color: "accent" }
+  attribution: { fontFamily: "Cormorant Garamond", px: 15, weight: 400, tracking: "2px", upper: true, color: "accent" }
+  micro:       { fontFamily: "Cormorant Garamond", px: 12, weight: 400, tracking: "2px", upper: true, color: "accent" }
+  # — display / hero ramp (Cormorant Garamond 400, sentence case) —
+  h3:          { fontFamily: "Cormorant Garamond", cqw: 1.8, weight: 400, lineHeight: 1.1 }
+  timeline-headline:{ fontFamily: "Cormorant Garamond", cqw: 1.9, weight: 400, lineHeight: 1.1 }
+  card-headline:{ fontFamily: "Cormorant Garamond", cqw: 2.0, weight: 400, lineHeight: 1.15 }
+  stat-figure: { fontFamily: "Cormorant Garamond", cqw: 3.0, weight: 400, lineHeight: 1.0 }
+  quote-mark:  { fontFamily: "Cormorant Garamond", cqw: 9.0, weight: 400, lineHeight: 0.5, color: "line" }
+  h2:          { fontFamily: "Cormorant Garamond", cqw: 4.0, weight: 400, lineHeight: 1.1 }
+  h1:          { fontFamily: "Cormorant Garamond", cqw: 6.2, weight: 400, lineHeight: 1.06 }
+  display:     { fontFamily: "Cormorant Garamond", cqw: 8.0, weight: 400, lineHeight: 1.04 }
+
+spacing:
+  pad-x: "7cqw"
+  pad-y: "5cqw"
+  gap-xl: "6cqw"
+  gap-lg: "5cqw"
+
+components:
+  hairline:
+    rule: "0.07cqw solid {colors.line}"
+    description: "The universal structural device — every separator (agenda rule, timeline connector, card border, stats top) is this 1px taupe line. No thick borders exist."
+  card:
+    backgroundColor: "{colors.white-overlay}"
+    border: "0.07cqw solid {colors.line}"
+    rounded: "0"
+    shadow: "none"
+    description: "Faint white-overlay fill (canvas bleeds through) is what makes a card distinct from a bare region."
+  card-icon:
+    border: "0.07cqw solid {colors.line}"
+    rounded: "50%"
+    size: "40px circle"
+    textColor: "{colors.accent}"
+    typography: "Playfair numeral/letter"
+    description: "Ringed circle mark."
+  agenda-row:
+    borderBottom: "0.07cqw solid {colors.line}"
+    typography: "{typography.h3} (numeral {colors.accent}, label {colors.text-primary})"
+    description: "Numeral left, label right over a taupe rule."
+  timeline:
+    borderTop: "0.07cqw solid {colors.line}"
+    typography: "{typography.timeline-headline} + {typography.body-sm}"
+    description: "A single taupe top rule across items — no nodes, no dots."
+  stats-cluster:
+    borderTop: "0.07cqw solid {colors.line}"
+    typography: "{typography.stat-figure} + uppercase {colors.accent} labels"
+    description: "Inline modest stat figures (no hero numeral)."
+  geo-ring:
+    border: "1px solid {colors.line} (inner dashed ::before ~70–80%)"
+    rounded: "50%"
+    size: "10–50cqw"
+    opacity: "0.2–0.5"
+    description: "Compass-construction rings behind content. 1–2 per frame, never more."
+  horizontal-accent:
+    backgroundColor: "{colors.text-primary}"
+    size: "~18cqw × 1px"
+    description: "The system's only INK-BLACK rule — a strong terminal accent on cover/closing, sparingly."
+  vertical-line:
+    backgroundColor: "{colors.line}"
+    size: "1px × full height, ~5cqw from edge"
+    opacity: "0.3–0.4"
+    description: "Drafting-paper alignment guide. Optional."
+  image-placeholder:
+    backgroundColor: "{colors.bg-secondary}"
+    mark: "crossed +30°/−30° 1px taupe diagonals (an X)"
+    typography: "small uppercase {typography.micro}"
+    description: "The signature image-not-wired mark."
+  team-photo:
+    backgroundColor: "{colors.bg-secondary}"
+    border: "0.07cqw solid {colors.line}"
+    rounded: "50%"
+    typography: "Playfair initial in {colors.accent}"
+    description: "Circular portrait frame."
+---
+
+# Cartesian — Frame (video / frame layer)
+
+## Brand adaptation (READ FIRST — the frontmatter is the source of truth)
+
+This is the **cartesian** preset remixed onto the captured brand. The YAML frontmatter above (colors · typography · components) is **normative and already correct — use it verbatim.** The prose below is the ORIGINAL preset's intent; read it THROUGH the frontmatter:
+
+- **Fonts** — already set to **Cormorant Garamond** (display) / **Inter** (body); ignore any preset font name lingering in prose.
+- **Colors** — use the frontmatter hex; preset color NAMES in prose (e.g. "cobalt", "cream") mean the remapped brand values.
+
+
+## Overview
+
+Cartesian at frame scale is a **quiet museum-catalog editorial system** — restraint through 1px
+lines. Every structural separator is a single 1px taupe hairline; there are no thick borders, no
+fills (save the faint white-overlay card), no shadows, no rounded rectangles. Hierarchy comes from
+**type contrast and negative space**, and atmosphere from **compass-drafted geometric rings**
+drifting behind content.
+
+The voice is a literary pairing: **Cormorant Garamond** at weight 400 (the thin-stroke didone, never
+bold, always sentence case) carries every headline, numeral, and quote mark in ink; **Cormorant Garamond**
+carries body in warm gray and labels in uppercase taupe with 2–3px tracking. The palette is five
+warm stones plus ink — no populist accent color exists. The correct density is **sparse and
+breathing**: one clear idea, well-framed, on stone paper.
+
+**Key characteristics at frame scale:**
+
+- **1px taupe hairline** as the universal structural device — every separator is this one line.
+- **Cormorant Garamond 400** (ink, sentence case) for display; **Cormorant Garamond** body (gray) + labels (taupe, tracked).
+- **Five warm stones + ink** — no red/blue/green; the only "color" is type contrast.
+- **Compass-drafted geometric rings** (solid + dashed, 20–50% opacity) behind content for mood.
+- **Flat** — zero shadow, zero rounded rectangle (circles only); the lone ink line is the `horizontal-accent`.
+- **Sparse and breathing** — generous negative space; crowding reads as broken.
+
+## The Frame
+
+### Frame Craft Bar
+
+Three eyeball tests gate every frame before any structural check:
+
+- **Squint** — one Playfair element dominates at **3–6× its nearest neighbor**; the serif/sans + size contrast carries hierarchy, not weight.
+- **Silence** — declarative frames read **55–60% empty**; Cartesian has **no dense frame** — even the agenda/index breathes (the system breaks when crowded).
+- **Restraint** — **at most two geo rings** per frame; the single INK-BLACK `horizontal-accent` rule used sparingly; no populist accent color ever.
+- **Reference** — aim at a **Vignelli editorial / Cooper Hewitt catalogue / pencil-and-tracing-paper plan**; failure looks like a **shadowed, rounded-card SaaS deck**.
+
+- **Primary:** 1920×1080 (16:9). Display authored in **`cqw`** (`px ÷ 1920 × 100 = cqw`).
+- **Vertical:** 1080×1920 (9:16). **Square:** 1080×1080 (1:1).
+- **Safe area:** `pad-x` (7cqw) generous gutters; geometry may bleed off an edge.
+
+**The container law (load-bearing).** Every frame ground sets `container-type: size`; ALL
+frame-relative units are `cqw`/`cqh` against it — never `vw`. The 1px hairlines and geo rings hold
+their proportion against the frame at any render size.
+
+## Colors
+
+Tokens identical to the source. `{colors.bg-primary}` is the ground; `{colors.text-primary}` ink is
+headlines and the one black accent rule; `{colors.text-secondary}` gray is body; `{colors.accent}`
+taupe is labels, numerals, small text; `{colors.line}` taupe is every 1px structural border.
+`{colors.bg-secondary}` is the only secondary fill (placeholders, photo frames). **No populist
+accent** — when emphasis is needed, grow the type, switch sans→serif, or add a single
+`horizontal-accent` ink line. Headlines are never taupe; small text is never ink.
+
+## Typography
+
+Two ramps. The **reading ramp** (Cormorant Garamond body 1.0cqw gray, labels in px taupe) carries copy + chrome;
+the **display ramp** (Playfair `h3` 1.8cqw → `display` 8.0cqw, all weight 400) carries every headline.
+
+- **Legibility floor:** any load-bearing line ≥ **1.4cqw**; px labels are chrome only.
+- **Fit-to-measure:** size the headline to its length. Cap the block at **≤ 78cqw**; ≤3 words → `display`/`h1`; 4–6 → `h2`; 7+ → `h3`. Cartesian has no hero-stat numeral — stats stay modest (`stat-figure` 3cqw).
+- **Playfair at 400, ink, sentence case** — never bold, never uppercase, never taupe. **Cormorant Garamond labels uppercase, 2–3px tracked, taupe.** Italic via Playfair italic for emphasis only.
+
+## Depth & Surface
+
+The flat plane is the only technique. Hierarchy from:
+
+- **Type contrast** — Playfair serif vs Cormorant Garamond sans; the 8cqw→0.7cqw scale.
+- **1px taupe hairlines** — every divider, card outline, timeline rule, photo ring.
+- **Tone** — ink vs gray vs taupe.
+- **Negative space** — generous padding.
+- **Geometric atmosphere** — compass rings that suggest depth without creating it.
+
+**Ceiling:** no box-shadow, no elevated card, no gradient, no rounded rectangle. The single ink line
+(`horizontal-accent`) is the only non-taupe rule.
+
+## Shapes
+
+- **50% (circle)** — card-icon, team-photo, nav-dot, every geo ring.
+- **0** — everything else; soft-rounded corners do not exist.
+
+## Components
+
+- **hairline** — the universal 1px taupe separator (the identity).
+- **card** (1px taupe + white-overlay) / **card-icon** (ringed circle) / **agenda-row** / **timeline** (line, no nodes) / **stats-cluster** — all built on the hairline.
+- **geo-ring** — compass decoration (solid + dashed), 1–2 per frame. **horizontal-accent** — the one ink line, sparingly. **vertical-line** — drafting guide.
+- **image-placeholder** (crossed-X) / **team-photo** (ringed initial) — the stone-fill placeholders.
+
+## Frame Treatments
+
+> Recipe: ground · container · composes · focal · chrome · accent · silence · Fixed/Free · density.
+> Every frame is sparse and breathing; 1–2 geo decorations max.
+
+### 1 · Cover (identity · move: serif + compass ring · left)
+
+**Ground** `{colors.bg-primary}`, `pad-x`. **Composes** geo-ring (right, ~34cqw, solid+dashed), vertical-line (left), label, display/h1. **Focal** a 2–3 line Playfair `display`/`h1` headline in ink (italic on the key word), left-anchored, with a taupe `label` above and an Cormorant Garamond subtitle below. **Chrome** optional bottom meta row (Playfair value + taupe label). **Accent** the geo ring; optionally one `horizontal-accent` ink line (if it clears the meta). **Silence** ~55% empty. **Fixed** Playfair 400 ink sentence-case, ≤2 geo elements, 1px lines. **Free** title, ring placement, meta. **Density** sparse.
+
+### 2 · Agenda / Index (index · move: hairline list · left)
+
+**Ground** `{colors.bg-primary}`, `pad-x`. **Composes** label, h2, agenda-rows. **Focal** a Playfair `h2` over 4–6 agenda rows (Playfair numeral in taupe + Playfair label in ink), each on a 1px taupe rule. **Chrome** taupe `label` eyebrow. **Accent** none — taupe numerals carry it. **Silence** moderate; rows generously spaced. **Fixed** 1px taupe rules, Playfair 400. **Free** items, count. **Density** standard (sparse rows).
+
+### 3 · Pull Quote (quote · move: centered statement · compass ring)
+
+**Ground** `{colors.bg-primary}`, centered. **Composes** geo-ring (centered dashed, ~26cqw), quote-mark, h2/display-quote, attribution. **Focal** a 2-line Playfair quote in ink, centered, under a 50%-taupe Playfair quote-mark; a taupe uppercase attribution beneath. **Accent** the faint centered ring. **Silence** ~60% — deliberately open. **Fixed** Playfair 400, one ring, centered. **Free** quote, attribution. **Density** sparse.
+
+### 4 · Closing Plate (closer · move: centered ring · centered)
+
+**Ground** `{colors.bg-primary}`, centered. **Composes** geo-ring (centered, ~40cqw, solid+dashed), label, h1/display, horizontal-accent. **Focal** a 1–2 line Playfair sign-off in ink (italic key word), centered inside the largest compass ring; a short ink `horizontal-accent` beneath. **Accent** the ring + the one ink line. **Silence** ~60%. **Fixed** Playfair 400, centered, ≤2 geo. **Free** sign-off, ring scale. **Density** sparse.
+
+### 5 · Two-Column Editorial (content · move: asymmetric split · left)
+
+**Ground** `{colors.bg-primary}`, `pad-x`, two columns with `gap-xl`. **Composes** label, h2, body, image-placeholder (crossed-X) or card. **Focal** a Playfair `h2` + Cormorant Garamond body in the text column; an image-placeholder or card in the other. **Accent** none. **Silence** generous gutter. **Fixed** 1px taupe card/placeholder borders, white-overlay fill. **Free** which side is text, body copy. **Density** standard.
+
+### 6 · Stats / Timeline (data · move: hairline rail · left)
+
+**Ground** `{colors.bg-primary}`, `pad-x`. **Composes** label, h3, stats-cluster or timeline. **Focal** a modest Playfair stat row (or a 1px-rule timeline with year + headline + body, no nodes), framed by a 1px taupe top rule. **Accent** none. **Silence** moderate. **Fixed** modest stat scale, hairline rule, no nodes. **Free** figures, phases. **Density** standard.
+
+## Composition Rules
+
+### Do
+
+- Use a **single 1px taupe line** for every separator — the hairline is the identity.
+- Set every **Playfair headline at 400, ink, sentence case**; render labels taupe, uppercase, 2–3px tracked.
+- Layer **one or two compass rings** (solid + dashed, 20–50% opacity) behind content for atmosphere.
+- Let frames **breathe** — sparse, generous negative space; 55–60% empty on declarative frames.
+- Lean centered on quote/closer; asymmetric/left on cover/agenda/editorial. Use `bg-secondary` for placeholder fills.
+
+### Don't
+
+- Don't introduce a populist accent color — stone and ink only.
+- Don't bold Playfair, render headlines in taupe, or use thick (2px+) borders.
+- Don't add shadows, elevated cards, or rounded rectangles (circles only).
+- Don't crowd the frame — packed layouts read as broken.
+- Never more than two geo decorations per frame; don't blow a headline edge-to-edge.
+
+## Aspect-Ratio Behavior
+
+| Treatment            | 16:9                       | 9:16                                | 1:1                         |
+| -------------------- | -------------------------- | ----------------------------------- | --------------------------- |
+| Cover                | headline left, ring right  | headline top, ring below            | headline upper, ring behind |
+| Agenda / Index       | h2 + rows                  | h2 + rows (tighter)                 | h2 + rows                   |
+| Pull Quote           | centered, ring behind      | centered, taller                    | centered                    |
+| Closing Plate        | centered in ring           | centered, ring scaled               | centered                    |
+| Two-Column Editorial | text + visual side-by-side | stacked (collapse)                  | stacked                     |
+| Stats / Timeline     | horizontal rail            | vertical stack (drop timeline rule) | compact                     |
+
+Generous `pad-x` holds on the short edge; re-step display per ratio above the 1.4cqw floor. On
+9:16, the timeline rule loses meaning when stacked — switch to a vertical list (per source).
+
+## Approved Entities
+
+No real customers, logos, or vendors are defined in the source — render any such mark as a
+placeholder (the crossed-X image-placeholder, or a ringed initial for portraits).
+
+## Numerals & Claims (hard rule)
+
+Never invent figures, dates, or counts at frame scale. Render slots as `— figure —`, `{metric}`.
+Stats and timeline years carry placeholders until the script supplies them. Agenda ordinals
+(01, 02…) are decorative and may be sequential.
+
+## Pre-Render Self-Audit
+
+- **Squint** — one Playfair element dominates; the serif/sans contrast carries hierarchy.
+- **Silence** — declarative frames 55–60% empty; nothing is crowded.
+- **Palette** — five stones + ink only; no populist accent; headlines ink, labels taupe.
+- **Lines** — every separator is a 1px taupe hairline; the only ink line is `horizontal-accent`.
+- **Type** — Playfair 400 sentence-case, fit-to-measure; labels uppercase 2–3px; ≥1.4cqw floor.
+- **Depth** — 0 shadow, 0 rounded rectangle; ≤2 geo rings per frame.
+- **Anchor** — centered on quote/closer, left/asymmetric on cover/agenda/editorial; no 3 in a row alike.
+- **Fabrication** — every numeral traces to the script, else placeholder.
+
+## Known Gaps
+
+- **Motion intentionally out of scope.** frame.md specifies composition only; the 0.6s fade in the source is a deck mechanic.
+- **Cormorant Garamond + Cormorant Garamond via Google Fonts.** CJK pairing (Noto Serif SC 700/400) carries over; Playfair has no Hanzi italic — substitute weight/taupe for emphasis.
+- **9:16 / 1:1 are guidance**; verify the legibility floor and that the timeline collapses to a vertical list.
+- Geo rings, the crossed-X placeholder, and the dashed inner ring are CSS-only; no external imagery is required.
diff --git a/videos/dw-new-arrivals-reveal/hyperframes.json b/videos/dw-new-arrivals-reveal/hyperframes.json
new file mode 100644
index 0000000..dc9ec2e
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/hyperframes.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
+  "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",
+  "paths": {
+    "blocks": "compositions",
+    "components": "compositions/components",
+    "assets": "assets"
+  },
+  "media": {
+    "autoProxy": true
+  }
+}
diff --git a/videos/dw-new-arrivals-reveal/index.html b/videos/dw-new-arrivals-reveal/index.html
new file mode 100644
index 0000000..cfed975
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/index.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=1920, height=1080" />
+    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
+    <style>
+      * {
+        margin: 0;
+        padding: 0;
+        box-sizing: border-box;
+      }
+      html,
+      body {
+        margin: 0;
+        width: 1920px;
+        height: 1080px;
+        overflow: hidden;
+        background: #000;
+      }
+      body {
+        font-family: "Inter", sans-serif;
+      }
+      code,
+      pre,
+      .monospace {
+        font-family: "JetBrains Mono", monospace;
+      }
+    </style>
+  </head>
+  <body>
+    <div
+      id="root"
+      data-composition-id="main"
+      data-start="0"
+      data-duration="10"
+      data-width="1920"
+      data-height="1080"
+    >
+      
+      
+
+      <!--
+        Add your clips here. Example:
+        <div id="title" class="clip" data-start="0" data-duration="5" data-track-index="1"
+             style="font-size: 64px; color: #fff; padding: 40px">
+          Hello World
+        </div>
+      -->
+    </div>
+
+    <script>
+      window.__timelines = window.__timelines || {};
+      const tl = gsap.timeline({ paused: true });
+      // Example: tl.from("#title", { opacity: 0, y: -50, duration: 1 }, 0);
+      window.__timelines["main"] = tl;
+    </script>
+  </body>
+</html>
diff --git a/videos/dw-new-arrivals-reveal/meta.json b/videos/dw-new-arrivals-reveal/meta.json
new file mode 100644
index 0000000..710cb9a
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/meta.json
@@ -0,0 +1,5 @@
+{
+  "id": "dw-new-arrivals-reveal",
+  "name": "dw-new-arrivals-reveal",
+  "createdAt": "2026-07-17T14:50:51.442Z"
+}
\ No newline at end of file
diff --git a/videos/dw-new-arrivals-reveal/package.json b/videos/dw-new-arrivals-reveal/package.json
new file mode 100644
index 0000000..791cae4
--- /dev/null
+++ b/videos/dw-new-arrivals-reveal/package.json
@@ -0,0 +1,11 @@
+{
+  "name": "dw-new-arrivals-reveal",
+  "private": true,
+  "type": "module",
+  "scripts": {
+    "dev": "npx --yes hyperframes@0.7.61 preview",
+    "check": "npx --yes hyperframes@0.7.61 check",
+    "render": "npx --yes hyperframes@0.7.61 render",
+    "publish": "npx --yes hyperframes@0.7.61 publish"
+  }
+}

← 1d2a1cb console: Video Studio — buttons to queue IG reel / URL→reel  ·  back to Dw Marketing Reels  ·  video-studio hardening (contrarian FIX-FIRST): realpathSync d648cd2 →