Nodes/ComfyUI_Fill-Nodes/FL_PosterLayerAsset
ComfyUI Node

FL_PosterLayerAsset

The internals node you shouldn't wire by hand

By filliptm·Created 3 years ago·Updated a day ago· 638
FL_PosterLayerAsset
  • image
  • FL_POSTER_LAYER_ASSET
layer_idlayer_0

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.

CategoryFill Nodes/VFX/Poster/Internal

Inputs (2)

NameTypeDefaultDescription
imageIMAGE
layer_idSTRINGlayer_0

Outputs (1)

NameTypeDescription
FL_POSTER_LAYER_ASSETFL_POSTER_LAYER_ASSET