FL_PosterLayerStack
The internal node that assembles the poster for the camera
- assets
- FL_PARALLAX_STACK
Second of the two internal poster nodes, and the one whose output you actually see. FL_PosterLayerStack takes the plan and the extracted per-layer assets and assembles them into the final FL_PARALLAX_STACK - background plus depth-ordered cutouts - that FL Layered Parallax flies a camera through.
It's built inside the poster subgraph, so you won't wire it by hand. But two of its three inputs are the pipeline's tuning surface, and understanding them is how you fix a poster that came out wrong.
The three inputs
layout is the plan, serialised as JSON - every entry with its id, name, kind, depth, scale, offsets and visibility.
assets is an autogrow input, one FL_POSTER_LAYER_ASSET per planned layer, in plan order.
plan_key is the quiet one. It's a fingerprint of the plan that gets surfaced in the node's UI output, and it's how the pipeline knows whether the layers it has cached on disk still correspond to the plan in front of it. Change the plan and the key changes - which is why editing a plan's prompts invalidates the layers and editing something cosmetic doesn't necessarily.
The validation is strict in a way that will save you hours: the assets must match the plan one-for-one, the list can't be empty, and the first entry must be the background. Break any of those and you get an error, not a stack with a mystery transparent foreground. If a layer was skipped or reordered somewhere upstream, you find out here.
Assembly is just the plan, executed
For each entry it takes the matching asset and carries through the planned depth, scale and offsets. The background - index 0 - goes straight to the stack's background slot and is not treated as a cutout. Every other entry is added only if it's marked visible. Opacity is set to 1 at this stage, and masks are left empty because each layer already carries real alpha from the RGBA generation. That's the difference between this pipeline and a generate-then-matte workflow: there's no mask to lose, because transparency was produced by the model.
The node also emits a review payload - each layer with its thumbnail and coverage - which is what the poster node's on-node layer list is showing you. That's your feedback loop: run the plan, look at the layers, write overrides for the bad ones, run again.
Install
Part of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
Restart ComfyUI. Needs a current build - the poster pipeline leans on newer core nodes for layered latents and on comfy_api.latest, and a stale ComfyUI will fail the whole pack's import rather than just this node. No extra downloads beyond the layered model, text encoder and RGBA VAE the extraction pass needs.
Why the plumbing layer matters here
There's a genuinely nice pattern in this pipeline worth stealing for your own node work: the expensive part (extraction) and the assembly part are separate nodes, so re-running the assembly is nearly free. You can iterate on depth ordering, visibility and placement - the things that actually decide whether the parallax looks good - without paying for another round of diffusion. Change a depth in an override, re-run, look at locked_composite, repeat.
If you're debugging a poster, work in that order. Get the flat composite right - is the background behind everything, are the cutouts where they should be, does anything look like it's floating in nothing - and only then turn on camera movement. The parallax render is much harder to read when something is wrong underneath it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| layout | STRING | [] | — |
| plan_key | STRING | — | |
| assets | COMFY_AUTOGROW_V3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FL_PARALLAX_STACK | FL_PARALLAX_STACK | — |