feat(render B2): render binder writes user edits into AE before render
Build backend images / build content-svc (push) Failing after 52s
Build backend images / build file-svc (push) Failing after 56s
Build backend images / build gateway (push) Failing after 53s
Build backend images / build identity-svc (push) Failing after 1m29s
Build backend images / build notification-svc (push) Failing after 1m38s
Build backend images / build render-svc (push) Failing after 1m53s
Build backend images / build studio-svc (push) Failing after 56s

Edits previously never reached the MP4 (the node rendered template defaults). Now:
- render-svc claim includes the saved input values as bindings (GetRenderBindings →
  saved_scene_contents with non-empty value).
- node-agent: new binder.go emits a JSON bind-spec + downloads media locally, runs the
  pre-existing data-driven bind.jsx via afterfx (sets text layers' Source Text, replaces
  media footage), saves a bound.aep next to the template, then aerender renders THAT.
- 12-min timeout + fresh-AE + done-marker polling (mirrors scan). Non-fatal: on bind
  failure the job still renders template defaults.

Verified binding data flows (edited frl_c1t1/frl_c1t2 → claim bindings). Live MP4
verification needs the updated node-agent.exe re-run.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-07 01:22:20 +03:30
parent a69bc62724
commit 47a4ced973
8 changed files with 280 additions and 0 deletions
+11
View File
@@ -432,6 +432,17 @@ type ClaimedJob struct {
// template's render_aep_comp (e.g. "frfinal"). Empty → node falls back to the
// project's render queue.
CompName string `json:"comp_name,omitempty"`
// Bindings are the user's edited input values to write into the AE project before
// rendering (the render binder). Key = AE layer/footage name (frl_c{n}{t|m}{i}).
Bindings []RenderBinding `json:"bindings,omitempty"`
}
// RenderBinding is one input value the node writes into the AE project before render:
// a Text layer's source text, or a Media footage replacement.
type RenderBinding struct {
Key string `json:"key"` // AE layer/footage name, e.g. frl_c1t1 / frl_c1m1
Type string `json:"type"` // content element type (Text, Media, …)
Value string `json:"value"` // text content, or a media URL
}
// OutputUploadURLResponse is returned by POST .../output-upload-url.