T8 Film Project Router(影视项目状态路由)
Your long video project keeps contradicting itself — route it like a pipeline, not a prayer
- previous_state
- film_project_state
- active_stage_context
- project_state_json
- invalidation_report_json
Here's the pain this node is answering: you're making a multi-shot H3 or Seedance 2.0 video, you changed the script three times, and now your world rules say one thing while the prompt generation says another, and you've genuinely lost track of which stage's output is still valid. T8 Film Project Router is a small state machine that lives on your canvas and tracks all of it - stage, authoritative inputs, world rules, revisions, and which downstream stages your latest edit just invalidated.
The important thing up front: it doesn't read files, call an LLM, or rewrite anything downstream. It's a bookkeeper with opinions. You feed it your facts and it hands back a structured project state plus an invalidation report saying "you touched the screenplay, so the assets and prompt stages are now stale." What you do with that report is on you - the policy it enforces is literally automatic_downstream_regeneration: false.
The mechanism
It models a film project as an 8-stage pipeline, from 01-synopsis through 08-prompt (H3/Seedance prompts), and it knows the dependency graph between them - change the synopsis and characters, treatment, screenplay, and everything downstream ripple. Four work modes control scope: full-pipeline continue, do only one specified stage, relay on existing authoritative material, or revision (keeps versioning and marks impact).
Each run bumps a revision counter, and here's the genuinely nice part: blank fields inherit from the previous state when you chain routers (previous_state custom socket, or previous_state_json). Want to actually clear a field instead of inheriting it? Type [清空继承] (or [CLEAR_INHERITED]) into that specific input. Set changed_stage to what you just edited and the router computes every downstream stage that's now stale.
Inputs that matter
project_title,mode,target_stage- the basics you set once.changed_stage- the one that triggers invalidation. Leave it at无and the router just organizes; set it and you get a report.world_rules,ability_costs_and_limits,knowledge_gaps(character knowledge gaps),continuity_anchors- these become the "world contract" that downstream prompt stages must not violate.authoritative_inputs- one per line; the router treats these as facts the LLM must copy verbatim, never silently "repair."previous_state- the custom socket from an earlier Router. Recommended overprevious_state_json; if you provide both and they disagree, it errors rather than guessing.
Outputs
film_project_state (custom socket) feeds the next Router version, or the pack's T8 Long-form Planner / T8 Storyboard Pack. active_stage_context is a STRING with the compact state for your current stage - this is what you'd wire toward a prompt node. project_state_json is the full state; invalidation_report_json lists affected stages and which of your confirmed outputs are now stale.
Installing and gotchas
It's in T8mars's pack, so one install covers it: Manager → "MiniMax H3 / Seedance 2.0 / Music 3 Prompt Enhancer (T8)", or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-prompt-enhancer-T8
Restart, Ctrl+F5 after updates. Things that bite: this node is for organizing, and it will not save a project whose stages you never actually confirmed - you have to tell it which stages are done via confirmed_stages (or it treats nothing as confirmed). It also refuses text that looks like an API key (sk-...) because the state JSON can end up in workflow files. And remember the invalidation report is advisory: the emitted state's status is awaiting_human_confirmation, and the router explicitly does not auto-regenerate anything - a stale prompt stage won't block you until you act on the report yourself.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| project_title | STRING | 未命名影视项目 | — |
| mode | COMBO | 全流程(从当前阶段继续) | 4 options: 全流程(从当前阶段继续), 指定阶段(只做本阶段), 接力(使用已有权威资料), 修订(保留版本并标记影响) |
| target_stage | COMBO | 08-prompt | 08 H3 / Seedance 提示词 | 8 options: 01-synopsis | 01 概念锚定, 02-characters | 02 角色圣经, 03-worldbuilding | 03 世界规则(可选), 04-treatment | 04 分场大纲, 05-screenplay | 05 剧本, 06-assets | 06 图像资产, +2 |
| project_brief | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可显式清空本字段。 | |
| authoritative_inputs | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可显式清空全部权威输入。 | |
| confirmed_stages | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可清空已确认阶段。 | |
| changed_stage | COMBO | 无(不触发失效传播) | 9 options: 无(不触发失效传播), 01-synopsis | 01 概念锚定, 02-characters | 02 角色圣经, 03-worldbuilding | 03 世界规则(可选), 04-treatment | 04 分场大纲, 05-screenplay | 05 剧本, +3 |
| revision_note | STRING | — | |
| world_rules | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可显式清空本字段。 | |
| ability_costs_and_limits | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可显式清空本字段。 | |
| knowledge_gaps | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可显式清空本字段。 | |
| continuity_anchors | STRING | 连接上一版时留空表示继承;输入 [清空继承] 可显式清空全部连续性锚点。 | |
| previous_state_jsonopt | STRING | — | |
| previous_stateopt | T8_FILM_PROJECT_STATE | 直接连接上一版 Router 的 film_project_state;与 JSON 同时提供时必须内容一致。空白字段自动继承;在需要清空的对应字段输入 [清空继承]。 |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| film_project_state | T8_FILM_PROJECT_STATE | — |
| active_stage_context | STRING | — |
| project_state_json | STRING | — |
| invalidation_report_json | STRING | — |