Dw Marketing Reels
Search the build
-
ccd338e2026-07-28 auto-save: 2026-07-28T07:28:16 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
98295332026-07-27 reels: add TIKTOK_DRY_RUN wiring-verify mode for postTikTok (no publish) — TK-00128 -
e30682f2026-07-27 tiktok-audit-demo: turnkey capture runbook for the App-Review demo video (TK-00128) -
bc02a052026-07-27 reels: build TikTok Content-Posting-API uploader (dormant, gated on audit) — TK-00128 -
eb7ecf52026-07-27 auto-save: 2026-07-27T16:52:13 (1 files) — data/reels.json -
8adb6932026-07-27 reels: fix IG async-publish timeout (first live post landed despite 12s client timeout) -
5121ca12026-07-27 reels: honest TikTok status + FTC content-claims hold guard (pre-arm) -
19e8ca42026-07-27 reels: consolidate LEAK_DENY to one canonical-synced module + fail-closed leak gate -
4f97f1f2026-07-27 reels: guard against duplicate social post of an already-'posted' reels[0] on nightly re-run -
be479b72026-07-27 auto-save: 2026-07-27T07:18:47 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
2cae9392026-07-26 auto-save: 2026-07-26T07:11:20 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d9aab812026-07-25 auto-save: 2026-07-25T07:34:42 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
689fe272026-07-24 chore: vN patch (session close — image backfill) -
8d53d7f2026-07-24 record completed image backfill: upload-imageless-11 (11/11 EUR SKUs imaged, Steve-approved live Shopify write, verified in mirror) -
5ebec052026-07-24 auto-save: 2026-07-24T07:26:03 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
d86340e2026-07-23 Pin autonomous Claude CLI invocation to Opus (--model opus) -
acc7a772026-07-23 auto-save: 2026-07-23T07:19:17 (3 files) — data/new-arrivals.json data/reels.json data/video-suggestions.json -
ce006d62026-07-22 chore: lint, refactor, v0.8.0 (session close) -
d385b432026-07-22 Route 9:16 catalog reels through build-reel.mjs ($0, IG-publishable, gallery-visible) -
f9fdb8f2026-07-22 auto-save: 2026-07-22T07:42:20 (3 files) — data/video-jobs.json data/video-suggestions.json output/ -
8227e202026-07-22 video-runner: give renders narrated audio via auto-resolved HYPERFRAMES_PYTHON -
6eb30612026-07-22 Harden video-runner: retry transient API rate-limits before erroring -
c0278de2026-07-22 auto-save: 2026-07-22T07:12:00 (3 files) — data/new-arrivals.json data/reels.json scripts/video-runner.mjs -
96a00f62026-07-22 Add hypergen daily video-suggestions tab (4 ideas/day, dated + used-stamp) -
aea6ea12026-07-21 auto-save: 2026-07-21T07:36:20 (2 files) — data/new-arrivals.json data/reels.json -
f9ce6472026-07-20 chore: colorwheel-reel builder cleanup + dl warn (session close) -
c1c43c62026-07-20 Fix Threads post: reposted shop-by-color with correct caption (old mismatched post pending manual delete) -
59fcd752026-07-20 Shop-by-color reel also posted to Threads (video) -
4d8994e2026-07-20 chore: v0.6.0 — /showcase brand-films gallery (session close) -
af86e6b2026-07-20 auto-save: 2026-07-20T07:30:40 (2 files) — data/new-arrivals.json data/reels.json -
d028c212026-07-19 auto-save: 2026-07-19T07:25:16 (2 files) — data/new-arrivals.json data/reels.json -
e5e041b2026-07-18 auto-save: 2026-07-18T07:20:11 (2 files) — data/new-arrivals.json data/reels.json -
f3f78cd2026-07-17 auto-save: 2026-07-17T19:47:29 (1 files) — package-lock.json -
e86b9582026-07-17 Shop-by-color reel posted: Instagram + Bluesky live; Facebook blocked on token scope -
42687b82026-07-17 add public /showcase brand-films gallery page (all 6 promo cuts) -
8c770032026-07-17 Add shop-by-color reel builder — opens on the color wheel (frame-0 thumbnail fix) -
579b3f62026-07-17 chore: v0.5.0 (session close) — Video Studio + color-index hardening -
f8017072026-07-17 reels.json: record IG publish (new-arrivals-audio reel → posted, instagram.com/reel/Da5sp25DyRu) -
54082902026-07-17 add platform-tailored IG + TikTok captions to brand-promo reels -
9651df22026-07-17 point deploy health-check at public /privacy (true 200, not auth 401) -
dcec44c2026-07-17 stage DW brand promo 15s short cut (3 aspects) into marketing reels panel -
5f5394e2026-07-17 5x: report — 4 sweeps; fixed preload storm + console persistence (pm2); M3 'JS error' verified benign (video-preload ERR_ABORTED, no real error) -
eba4f192026-07-17 5x sweep 2: gallery videos preload=none — kills the 21-video simultaneous metadata-preload storm (ERR_ABORTED noise); videos still play on click -
55e44f82026-07-17 deploy: cert-safe nginx script to add public /reels/*.mp4 passthrough to the live marketing.dw vhost (enables Meta media-fetch for IG publishing) -
878597b2026-07-17 fix .deploy.conf health-check port 9848→9600 (reels app real port; 9848 is corkwallcovering) -
463adc42026-07-17 console: relative studio-media URL so the video gallery works inside the MCC iframe proxy (/api/reels/ui) -
8ed53f52026-07-17 stage DW brand promo (3 aspects) into marketing reels panel -
f0a22572026-07-17 DW New Arrivals collection-reveal reel (9:16, product-launch-video/HyperFrames): 8-frame cartesian storyboard + frames, Kokoro VO + MusicGen BGM, captions, transitions -
d648cd22026-07-17 video-studio hardening (contrarian FIX-FIRST): realpathSync kills symlink escape on /studio-media + public /reels/; https-URL/.eml validation + 20-job cap on queue; runner requires CLAUDE_BIN & fails loud (no silent ENOENT); job chips show created-time + host-not-armed warning -
f2f43632026-07-17 New Arrivals reel: 7 curated heroes + local Kokoro VO + MusicGen BGM (/bin/zsh) -
1d2a1cb2026-07-17 console: Video Studio — buttons to queue IG reel / URL→reel / newsletter→video + rendered-video gallery (/api/videos) + gated runner (VIDEO_AUTORUN off = waits for studio session; never auto-posts) -
f7b39872026-07-16 shop-by-color wheel: -50% wheel+dots, mobile+touch, >=80 SKUs (min:80), add-sample-to-cart per card -
907a60d2026-07-16 colorwheel: canonical /pages/shop-by-color body (new wheel, replaces static swatch page); /pages/colors 301→shop-by-color -
1dfe5d52026-07-16 colorwheel: Shopify /pages/colors widget (scoped inline build, hits public color-widen API) -
5f28b852026-07-16 colorwheel: add 6-dot palette below wheel, paginated left/right through 24 curated colors -
80983372026-07-16 colorwheel: widen to 15% ΔE band (big data set), fix spin/click color mismatch, drop hex+count, center dot = picked color -
5ca3fe32026-07-16 shop-by-color motion wheel (local preview :9851, proxies live color-index endpoint) + drafted 12-image Shopify upload script (Steve-run/gated) -
51d3d222026-07-16 Source real product images for 12/14 imageless DW products via Browserbase (O&L family blocked host bypass) -
979735d2026-07-16 auto-save: 2026-07-16T08:12:03 (9 files) — fetch-ol-images.cjs fetch-ol-manifest.json fetch-remaining.cjs fetch-remaining.json harvest-colorways-results.json -
cc29f332026-07-16 auto-save: 2026-07-16T07:11:48 (2 files) — data/new-arrivals.json data/reels.json -
55f1b052026-07-15 chore: v0.4.1 -
eae24362026-07-15 auto-save: 2026-07-15T14:07:06 (2 files) — public/index.html server.js -
2cd59c02026-07-15 chore: v0.4.0 (session close) — FB-graph IG publish + publish-ig.mjs + privacy/terms + audio-mux fix -
15079e22026-07-15 Add self-contained scripts/publish-ig.mjs — post a reel to IG from the marketing project via the FB-graph flow (durable page token), no Norma dependency; SOCIAL_LIVE_ARMED-gated with a public-media reachability guard -
c5afbac2026-07-15 auto-save: 2026-07-15T07:35:12 (2 files) — data/new-arrivals.json data/reels.json -
390b9762026-07-14 Add public /privacy + /terms pages (no-auth) for Meta app publish requirement -
59b2d6b2026-07-14 build-reel: mux silent AAC track into every reel — IG Reels require audio (no-audio MP4 fails Meta processing w/ error 2207082) -
7d816dd2026-07-14 auto-save: 2026-07-14T07:29:44 (2 files) — data/new-arrivals.json data/reels.json -
ac1da402026-07-13 Add package-lock.json — unblocks deploy (npm ci requires a lockfile; project is zero-dep) -
9ed9b0f2026-07-13 New Arrivals reel (2026-07-13-21-49) + refreshed feed (24 arrivals) -
66cb7162026-07-13 Fix console port default 9846->9848 (matches .deploy.conf + README) — 9846 silently collided with live dw-staged-active-viewer -
d02c9bb2026-07-13 Fix publish-status unwrap: read Norma's .result envelope + explicit r.simulated (kills false 'posted' on no-creds + false 'simulated' on live post) + no-creds badge — contrarian gate -
fea25bd2026-07-13 chore: v0.3.0 — multi-account IG picker + meta-token canary + live-post payload fix (session close) -
d9ccbc02026-07-13 auto-save: 2026-07-13T08:23:39 (1 files) — data/reels.json -
aa4f29e2026-07-13 5 themed reels (Thibaut, Grasscloth Edit, Phillip Jeffries, Statement Murals, Schumacher) + fetch upgrades: leak-deny filter at feed level, multi-page collection fetch, spread sampling, Repeat-spec title cleanup -
34da7272026-07-13 auto-save: 2026-07-13T07:23:25 (2 files) — data/new-arrivals.json data/reels.json -
43215272026-07-13 Pin SOCIAL_LIVE_ARMED=0 in nightly plist — schedule can never inherit an armed env (contrarian hardening) -
829f7fe2026-07-13 Fix live-post payload: send video_url (Norma reel.js contract), not mediaUrl — contrarian-caught silent 500 -
f6b331e2026-07-13 auto-save: 2026-07-13T01:21:52 (3 files) — data/new-arrivals.json data/reels.json scripts/fetch-new-arrivals.mjs -
2db6c902026-07-13 docs: publish-social — reels now public (media blocker cleared), only SOCIAL_LIVE_ARMED remains -
2c902282026-07-13 chore: lint, refactor (hoist SLUG), doc outroBig, v0.2.0 (session close) -
582f1f12026-07-13 Multi-account Instagram picker: DW-family account registry + per-reel Post-to selector + account-routed publish -
808fac72026-07-13 Dry-run publish status for cork reel: IG ready-pending-arm (media URL public), TikTok pending-reconnect -
78da8fd2026-07-12 Themeable reels + Phillipe Romano cork reel (env-driven copy/caption/slug + vendor/title/dedupe fetch filters) -
2f74ee02026-07-12 Safety-when-on: ARMED gate (no live post until SOCIAL_LIVE_ARMED=1) + private-label leak filter in captions (contrarian fixes) -
1584e5c2026-07-12 Public media exemption: GET /reels/*.mp4 unauthenticated (console/APIs stay gated) — so Meta/TikTok can fetch reels -
20c8b482026-07-12 Auto-post to IG/TikTok (fail-safe pending-creds) + captions + publish-status panel -
a1ba7d42026-07-12 Build-gate for read-only public deploy + nightly push to Kamatera -
7630cbd2026-07-12 Add nightly runner (gated plist), README, deploy config -
fc8c20e2026-07-12 DW Marketing new-arrivals reels: HyperFrames reel generator + auth-gated console (:9848)
Authors
- Steve90
Agents used
- comms-compliance2
Skills used
- /reels22
- /new-arrivals16
- /video-suggestions7
- /video3
- /pages3
- /newsletter2
- /videos2
- /day2
- /suggestions2
- /index2
- /showcase2
- /privacy2
- /colors2
- /terms2
- /init1
- /upload1
- /status1
- /narrate1
- /record1
- /trim1
- /split1
- /tiktok-post1
- /fire-test-post1
- /leak-deny1
- /conversation1
- /scan-leaks1
- /error1
- /gen1
- /video-jobs1
- /tts-venv1
Creative ideas + design notes
9829533 · 2026-07-27 · reels: add TIKTOK_DRY_RUN wiring-verify mode for postTikTok (no publish) — TK-00128
dryRunTikTok() exercises the real pre-publish path: token refresh (auth plumbing, rotates+persists), creator_info (validates token + reads the privacy levels the app is actually allowed to use), and init-body assembly — then STOPS before video/init. Nothing is uploaded, no post is created. Wired into postTikTok as an un-armed escape hatch (TIKTOK_DRY_RUN=1), so the wiring can be verified without TIKTOK_LIVE_ARMED and without the pending TikTok app audit. Live publish path unchanged and still gated. Offline test (fetch stubbed, throwaway HOME): SELF_ONLY -> wouldPost true; PUBLIC_TO_EVERYONE on unaudited app -> wouldPost false; only token + creator_info called, no init/upload/status. $0 (no live API call). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e30682f · 2026-07-27 · tiktok-audit-demo: turnkey capture runbook for the App-Review demo video (TK-00128)
Scene-by-scene shot list with embedded narration + who-does-what roles (Steve: OAuth consent + account-Private toggle + button clicks; me: cue/narrate/record/trim/split). Encodes the unaudited-app trap (account must be Private during the post) and the ≤50MB split. Readiness verified 2026-07-27. Live capture is a ~10-min guided pass.
bc02a05 · 2026-07-27 · reels: build TikTok Content-Posting-API uploader (dormant, gated on audit) — TK-00128
- scripts/tiktok-post.mjs: ports the proven FILE_UPLOAD flow (creator_info → init → PUT bytes → poll) from tiktok-oauth-catcher/fire-test-post.sh, plus the token refresh the nightly cron needs (TikTok access tokens expire ~24h; refresh tokens rotate and are persisted back to the canonical secrets .env). Reads creds from secrets (single source). - publish-social postTikTok: wired to the uploader behind its OWN gate TIKTOK_LIVE_ARMED, decoupled from IG's SOCIAL_LIVE_ARMED. Dormant → 'ready-pending-tiktok-arm'. - privacy defaults SELF_ONLY; refuses a privacy level the app isn't allowed (→ 'pending-audit'). EXTERNAL BLOCKER: the DW production TikTok app is UNAUDITED, so PUBLIC posting is impossible until TikTok approves the audit (unaudited apps: SELF_ONLY to a private account only). Code is ready; the first live run is Steve-gated (posts + rotates the shared refresh token). Verified: syntax, exports resolve, dry resolution = ready-pending-tiktok-arm, leak gate passes.
8adb693 · 2026-07-27 · reels: fix IG async-publish timeout (first live post landed despite 12s client timeout)
First live DW IG reel posted 2026-07-27 (reel/DbUK59zFdfL) but the client saw a 12s timeout mid-publish (IG container->poll->publish runs ~30-60s), recording a false error. - bump IG post timeout 12s->90s so a real post is captured as posted. - on timeout: return posted-unverified (NOT error) - the request was already sent, so a blind retry would DUPLICATE the post; the dup-guard now skips posted-unverified too. Reconciled reels[0] to posted (permalink) so the nightly cron cannot double-post. TK-14.
5121ca1 · 2026-07-27 · reels: honest TikTok status + FTC content-claims hold guard (pre-arm)
- postTikTok: when armed+token'd but the Content Posting API uploader isn't built,
return status 'not-implemented' + console.warn instead of a silent 'pending-reconnect'
that could read as handled on an armed run (contrarian: silent-success bomb).
- Content-claims gate (comms-compliance Fix 1): HOLD any reel whose caption carries an
unsubstantiated factual claim ('For 25 years', 'As seen in AD/Elle Decor/WSJ') — status
'held-claims-review' — until CLAIMS_SUBSTANTIATED=1. Verified: holds exactly the 3
dw-brand-promo reels (15-17), none of the other 30. Fail-safe default = hold.
TK-14. Lets Steve arm the pipeline WITHOUT the unsubstantiated promo reels posting.
19e8ca4 · 2026-07-27 · reels: consolidate LEAK_DENY to one canonical-synced module + fail-closed leak gate
- scripts/leak-deny.mjs: single source of truth for the private-label denylist, synced to canonical dw-leak-scanner. Adds names the 3 hand-copied regexes had DRIFTED and were missing: lillian august (leaked 2026-07-06), rigo, rigowall. Per-term anchoring: leading-\b on 'versa' (catches standalone + concatenated, safe on Adversarial/conversation/Universal), both-\b on 'rigo' (protects Rigoletto). - build-reel / build-colorwheel-reel / fetch-new-arrivals: import the shared module, removing 3 drift-prone copies. - scripts/scan-leaks.mjs + npm 'scan': fail-closed gate over the staged manifests. - cron-run.sh: run the gate BEFORE publish+push — a leaked name can no longer reach a public post. Turns the old one-shot '0 leaks' assertion into a standing gate. Verified: 22/22 leak+FP assertions pass; gate PASSES on the 33 staged reels. TK-14. Contrarian-gated (FIX FIRST verdict applied).
4f97f1f · 2026-07-27 · reels: guard against duplicate social post of an already-'posted' reels[0] on nightly re-run
comms-compliance find (TK-14): main() always takes reels[0]; if a nightly build fails to prepend a new reel but publish-social still runs, an already-posted reel would be resubmitted to the Graph API (duplicate public post). Skip only a confirmed 'posted'/'already-posted' state; every non-terminal state (pending-creds/ ready-pending-arm/error) is still (re)attempted. Full idempotency-key dedup for the error-response-leg edge is a follow-up. Contrarian-gated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
d86340e · 2026-07-23 · Pin autonomous Claude CLI invocation to Opus (--model opus)
Bare 'claude' spawn inherited the CLI's drifting default model; pin to Opus so this build/gen loop always runs on the intended model. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ce006d6 · 2026-07-22 · chore: lint, refactor, v0.8.0 (session close)
- video-runner: hoist prompt(j) to a single const (drop duplicate call in retry loop) - lint pass: 0 autofixes needed; flagged pre-existing serveFile Range-header null-deref for a future scoped fix (not session code)
d385b43 · 2026-07-22 · Route 9:16 catalog reels through build-reel.mjs ($0, IG-publishable, gallery-visible)
Running a real render exposed that new-arrivals-reel via claude -p was slow (~8min), cost API, produced a SILENT reel, and orphaned it in output/ (invisible to the gallery). The repo's own build-reel.mjs renders the same reel in ~20s, $0 (local ffmpeg/Chrome), with an IG-publishable AAC track, straight into reels/. - video-runner: new-arrivals-reel@9:16 → build-reel.mjs (no arming needed); 1:1 + url/newsletter keep the gated claude -p skill path; retry wraps both - server: /api/videos gallery now also scans output/ (+ serve guard) so the HyperFrames url/newsletter renders that land there are visible + playable
8227e20 · 2026-07-22 · video-runner: give renders narrated audio via auto-resolved HYPERFRAMES_PYTHON
Auto-resolve the local HyperFrames TTS venv (~/.hyperframes/tts-venv/bin/python) and inject it only into the render child's env — so auto-rendered reels get voiceover/BGM without arming or mutating the pm2/server environment. Honours an explicit HYPERFRAMES_PYTHON if already set.
6eb3061 · 2026-07-22 · Harden video-runner: retry transient API rate-limits before erroring
Root cause of the studio host's 'claude exit 1' renders was a transient Anthropic
throttle ('Server is temporarily limiting requests'), which permanently killed the
job with no retry. Now:
- capture claude stderr, classify transient (rate-limit/overloaded/429/529/reset)
- retry with exponential backoff (VIDEO_MAX_TRIES=3, VIDEO_BACKOFF_MS=20000)
- record attempts + a human-readable reason in job.note (not opaque 'exit 1')
- console surfaces the last few errored renders with their reason so failures
don't vanish silently
Applies to both the manual studio buttons and the new suggestions 'Use it' flow.
96a00f6 · 2026-07-22 · Add hypergen daily video-suggestions tab (4 ideas/day, dated + used-stamp)
- scripts/suggest-videos.mjs: $0-local daily generator, 4 ideas/day from New Arrivals catalog, append-only history, idempotent per PT date - server.js: GET /api/video/suggestions, POST /api/video/suggest, POST /api/video/suggestions/use (queues the render + stamps used_at/used_where); shared buildVideoJob/enqueueVideoJob helpers reused by the manual queue door - public/index.html: Suggested-videos tab — day-grouped cards, created date+time chip, Use-it button, and a when/where used-stamp; gated on allowBuild - com.steve.dw-video-suggest launchd agent: fills today's 4 daily at 7:05 PT (ideas only)
f2f4363 · 2026-07-17 · 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>
File tree
- .deploy.conf
- .gitignore
- 5x/REPORT.md
- README.md
- colorwheel/colors-page.shopify.html
- colorwheel/index.html
- colorwheel/server.js
- colorwheel/shop-by-color.page-body.html
- colorwheel/upload-12-images.js
- data/ig-accounts.json
- data/new-arrivals.json
- data/reels.json
- data/video-jobs.json
- data/video-suggestions.json
- deploy/add-reels-passthrough.sh
- deploy/com.steve.dw-marketing-reels.plist
- fetch-dg.cjs
- fetch-dg.json
- fetch-ol-images.cjs
- fetch-ol-manifest.json
- fetch-remaining.cjs
- fetch-remaining.json
- harvest-colorways-results.json
- harvest-colorways.cjs
- harvest-ol-family.cjs
- harvest-ol-results.json
- output/.lastrun
- package-lock.json
- package.json
- public/index.html
- public/privacy.html
- public/showcase.html
- public/terms.html
- scripts/build-colorwheel-reel.mjs
- scripts/build-reel.mjs
- scripts/cron-run.sh
- scripts/fetch-new-arrivals.mjs
- scripts/leak-deny.mjs
- scripts/publish-ig.mjs
- scripts/publish-social.mjs
- scripts/scan-leaks.mjs
- scripts/suggest-videos.mjs
- scripts/tiktok-post.mjs
- scripts/upload-imageless-11.mjs
- scripts/video-runner.mjs
- server.js
- sourced-images/imageless-14/EUR-70328__5314.webp
- sourced-images/imageless-14/EUR-70351__5223.webp
- sourced-images/imageless-14/EUR-70402__5053.webp
- sourced-images/imageless-14/NCW4270-03__coromandel-offwhite.webp
- sourced-images/imageless-14/NCW4270-05__coromandel-offwhite.webp
- sourced-images/imageless-14/NCW4352-05_bonnelles.jpg
- sourced-images/imageless-14/W5223-03__w5223-03.webp
- sourced-images/imageless-14/W6541-02__4591.webp
- sourced-images/imageless-14/W7024-03__w7024-03.webp
- sourced-images/imageless-14/W7334-1__w7334-01.webp
- sourced-images/imageless-14/W7682-01__w7682-01_ff8svfx2jzq6e1ez.webp
- sourced-images/imageless-14/W7814-01__w7814-01_n6lger3vo8gdn9ly.webp
- tiktok-audit-demo/CAPTURE-RUNBOOK.md
- videos/dw-new-arrivals-reveal/.hyperframes/caption-skin.html
- videos/dw-new-arrivals-reveal/.media/preferences.json
- videos/dw-new-arrivals-reveal/AGENTS.md
- videos/dw-new-arrivals-reveal/BRIEF.md
- videos/dw-new-arrivals-reveal/CLAUDE.md
- videos/dw-new-arrivals-reveal/SCRIPT.md
- videos/dw-new-arrivals-reveal/STORYBOARD.md
- videos/dw-new-arrivals-reveal/assets/fonts/cormorant-400.woff2
- videos/dw-new-arrivals-reveal/assets/fonts/cormorant-500.woff2
- videos/dw-new-arrivals-reveal/assets/fonts/cormorant-600.woff2
- videos/dw-new-arrivals-reveal/assets/fonts/cormorant-italic-400.woff2
- videos/dw-new-arrivals-reveal/assets/voice/01.wav
- videos/dw-new-arrivals-reveal/assets/voice/02.wav
- videos/dw-new-arrivals-reveal/assets/voice/03.wav
- videos/dw-new-arrivals-reveal/assets/voice/04.wav
- videos/dw-new-arrivals-reveal/assets/voice/05.wav
- videos/dw-new-arrivals-reveal/assets/voice/06.wav
- videos/dw-new-arrivals-reveal/assets/voice/07.wav
- videos/dw-new-arrivals-reveal/assets/voice/08.wav
- videos/dw-new-arrivals-reveal/audio_engine_meta.json
- videos/dw-new-arrivals-reveal/audio_meta.json
- videos/dw-new-arrivals-reveal/audio_request.json
- videos/dw-new-arrivals-reveal/capture/assets/daintree-bluemoon-thibaut.jpg
- videos/dw-new-arrivals-reveal/capture/assets/floral-chinoiserie-green.jpg
- videos/dw-new-arrivals-reveal/capture/assets/floral-elegance-gray.jpg
- videos/dw-new-arrivals-reveal/capture/assets/floral-fantasy-soft-pink.jpg
- videos/dw-new-arrivals-reveal/capture/assets/gleniffer-black-and-grey.jpg
- videos/dw-new-arrivals-reveal/capture/assets/maranta-arrowroot-pale-green.jpg
- videos/dw-new-arrivals-reveal/capture/assets/serengeti-aqua-thibaut.jpg
- videos/dw-new-arrivals-reveal/capture/assets/venus-black-thibaut.jpg
- videos/dw-new-arrivals-reveal/capture/extracted/asset-descriptions.md
- videos/dw-new-arrivals-reveal/capture/extracted/tokens.json
- videos/dw-new-arrivals-reveal/capture/extracted/visible-text.txt
- videos/dw-new-arrivals-reveal/frame.md
- videos/dw-new-arrivals-reveal/hyperframes.json
- videos/dw-new-arrivals-reveal/index.html
- videos/dw-new-arrivals-reveal/meta.json
- videos/dw-new-arrivals-reveal/package.json