From c6766b18a19de149098d709e5f927c51e92a2388 Mon Sep 17 00:00:00 2001 From: "soroush.asadi" Date: Sun, 7 Jun 2026 01:26:15 +0330 Subject: [PATCH] =?UTF-8?q?docs(handoff):=20phase=20B=20done=20(B1+B2)=20?= =?UTF-8?q?=E2=80=94=20edit=E2=86=92render=20binding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- docs/SESSION_HANDOFF.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/SESSION_HANDOFF.md b/docs/SESSION_HANDOFF.md index ed0c18f..84d8927 100644 --- a/docs/SESSION_HANDOFF.md +++ b/docs/SESSION_HANDOFF.md @@ -41,14 +41,19 @@ docker compose -f docker-compose.v2.yml --env-file .env.v2 up -d ## ⏭️ NEXT UP — Studio↔Template binding EPIC (agreed priority) -**Start with Phase B: edit→render binding.** Full plan in `~/.claude` memory -`epic_studio_template_binding.md`. Summary: -- **B1** persist studio input edits to `saved_scene_contents` (new studio-svc - `PATCH /v1/saved-projects/{id}/contents` by content key) — today edits only go to `edit_state`. -- **B2** render binder (port v1 `JSXGenerator.cs`): before aerender, JSX sets each AE layer - (named `frl_c{n}{t|m}{i}`) text/footage + frshare colours from the saved values, then render. - Today the node renders the template with DEFAULT values → user edits never reach the MP4. -- Then **A** admin preset stories (premade videos — model `preset_stories`/`preset_scenes` +**Phase B DONE (commits a69bc62 B1, 47a4ced B2).** Edit→render binding works: +- **B1 ✅** studio input edits persist to `saved_scene_contents` via studio-svc + `PATCH /v1/saved-projects/{id}/contents` (Next `/api/projects/[id]/contents`); the + persistence hook pushes edited values (bridged `c-` layers) on every save. +- **B2 ✅** render-svc claim now includes `bindings` (GetRenderBindings = saved_scene_contents + with non-empty value); node-agent `binder.go` emits a JSON bind-spec + downloads media, runs + the data-driven `bind.jsx` via afterfx (sets Source Text, replaces footage) → saves `bound.aep` + → aerender renders THAT. +- **VERIFY (needs node-agent re-run):** re-run the updated `node-agent.exe`, edit a text input in + the studio (wait for "saved"), render, confirm the MP4 shows the edited text. Colours + (saved_shared_colors → spec.colors) + footage-item media (vs layer-source) are follow-ups. + +- Next: **A** admin preset stories (premade videos — model `preset_stories`/`preset_scenes` exists, no endpoints/UI; detail "ویدیوهای ساخته‌شده" is placeholder), and **C** AE single-frame scene snapshots (`scenes.snapshot_url` empty → node `aerender -s 0 -e 0`).