FL_PosterLayerAsset
The internals node you shouldn't wire by hand
- image
- FL_POSTER_LAYER_ASSET
The category says it: Poster/Internal. FL_PosterLayerAsset is one of the nodes the poster pipeline builds inside its own subgraph, not something you drag onto the canvas. Knowing what it does still pays off, because it's where the pipeline writes to disk and where the "which layer came out wrong?" review data comes from.
Its job: take one RGBA layer image plus a layer id like layer_3, validate that it's a single four-channel image, save the full-resolution PNG and a small thumbnail, and hand back an asset object carrying the image, the saved filename, the thumbnail filename, and a coverage number.
The mechanism
Two validation rules, both worth knowing because they're the errors you'll hit if you ever do wire it manually.
The layer id must match layer_\d+. Anything else and you get Poster asset: invalid layer ID. That's not pedantry - the id is used as a folder segment in the saved path, and the regex is what keeps a stray string from writing somewhere it shouldn't.
The image must be exactly one RGBA frame. Not a batch, not RGB. And the error message tells you why: "Poster extraction needs one RGBA image per layer. Use Qwen Layered Control and its RGBA VAE." That's the whole architectural disclosure of the poster pipeline in one line - the transparency is generated, not matted, and a plain RGB VAE can't produce it. Which is why the pipeline is built on Qwen's layered-latent route rather than a generate-then-cut-out workflow. It's the same principle behind LayerDiffusion's latent transparency: skip the segmentation problem by making the model produce alpha natively, and hair and glass come out right.
Coverage is the fraction of pixels with meaningful alpha (above 0.05). It's a rough "does this layer actually contain anything" meter. A layer at 0.02 coverage is a few specks; a layer at 0.95 is basically the whole canvas. Neither is automatically wrong, but a supposed headline text layer at near-zero coverage is a plan that didn't work, and this number is how you notice.
Where the data lands
Full images go to Dynamic_Parallax_Poster/layers/<layer_id> and thumbnails to Dynamic_Parallax_Poster/thumbnails/<layer_id> in your ComfyUI output directory. If a poster run behaves oddly, that's the folder to open - you can look at exactly what each layer is, at full resolution, without fighting the node's preview.
The node also has a lazy-evaluation hook: it asks for its input only when it doesn't already have one, giving the disk cache a chance to answer before scheduling the expensive extraction ancestors. Practical upshot: re-running a poster with unchanged layers can skip work, which matters a lot when each layer is a diffusion pass.
Install
Part of the pack, so:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
Restart ComfyUI. Nothing extra here - it uses ComfyUI's standard image saving. But it's is_output_node, so it runs on every queue and writes files whether or not you're looking at them. If you do a lot of poster iterations, that output folder grows.
Practical notes
Don't wire it manually. Its real use to you is diagnostic: when FL Poster Layers produces a stack where one layer is clearly wrong, the asset's coverage percentage and the saved PNG are how you find out whether the extraction failed or the plan was bad. Nine times out of ten it's the plan, and the fix is an override rather than a different node.
And keep the RGBA rule in mind if you ever try to feed this pipeline layers from somewhere else. Anything that gives you RGB plus a separate mask is the wrong shape for this particular route - that's what the FL Parallax Layer node is for.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| layer_id | STRING | layer_0 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FL_POSTER_LAYER_ASSET | FL_POSTER_LAYER_ASSET | — |