From 049b4b5202fefebd32f00dc55e50afe0eb4796ef Mon Sep 17 00:00:00 2001 From: Kiyeon Jeon Date: Mon, 22 Jun 2026 22:55:48 +0900 Subject: [PATCH 1/3] feat(cli): --theme brand kit + theme-aware batch (design re-skin surface) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 2c. `render/frame/player --theme brand.json` applies a brand kit (a nested partial theme, flattened to a design.* overlay and composed first so --overlay still wins). `batch` gains a `design.` column, so one data file renders one on-brand mp4 per row — on-brand video at scale. Reuses the 2b overlay machinery (composeScene); no core change. Co-Authored-By: Claude Opus 4.8 --- packages/render-cli/src/batch.ts | 5 ++- packages/render-cli/src/cli.ts | 10 +++--- packages/render-cli/src/frame.ts | 6 ++-- packages/render-cli/src/overlay.ts | 42 +++++++++++++++++----- packages/render-cli/src/player.ts | 14 +++++--- packages/render-cli/src/reframe.ts | 12 ++++--- packages/render-cli/test/theme-cli.test.ts | 42 ++++++++++++++++++++++ 7 files changed, 106 insertions(+), 25 deletions(-) create mode 100644 packages/render-cli/test/theme-cli.test.ts diff --git a/packages/render-cli/src/batch.ts b/packages/render-cli/src/batch.ts index 016cab0..c1ffd6d 100644 --- a/packages/render-cli/src/batch.ts +++ b/packages/render-cli/src/batch.ts @@ -56,9 +56,12 @@ export function overlayFromFlat(row: FlatRow, name: string): OverlayDoc { ); } (doc.scene ??= {})[sceneKey as "background" | "duration" | "fps"] = value as never; + } else if (head === "design" && parts.length >= 2) { + // a design-token re-skin column, e.g. "design.color.accent" -> one mp4 per brand + (doc.design ??= {})[parts.slice(1).join(".")] = value; } else { throw new Error( - `row key "${key}" is not a valid overlay address — expected nodes.., states..., timeline.