Back to Node List

Batch Render

batch_render

Evaluates every variant-like entry and returns an all-or-nothing spritesheet

Reviewed
Guide available
The node name and summary are available in English. Port, parameter, and article details are currently shown in Japanese.

Input Ports

NameTypeDescription
項目一覧
items
List<Any>
Required
レンダリング対象の項目一覧です。VariantRecord / VariantSnapshot / snapshot 的な Map を受けます。
画像
image
Image
Required
各項目ごとに評価する画像レーンです

Output Ports

NameTypeDescription
スプライトシート
spritesheet
SpriteSheet
全項目が成功した時だけ返すスプライトシートです
フレーム一覧
frames
List<Image>
レンダリングしたフレーム画像一覧です
レコード一覧
records
List<VariantRecord>
レンダリングに使うよう正規化した variant record 一覧です
名前一覧
names
List<Text>
正規化後の項目名一覧です
個数
count
Int
正規化した項目数です
フレーム数
frame_count
Int
結果スプライトシートのフレーム数です
FPS
fps
Int
スプライトシート metadata に入る再生 FPS です
列数
columns
Int
実際に使う列数です
行数
rows
Int
実際に使う行数です
フレーム幅
frame_width
Int
1フレームの幅です
フレーム高さ
frame_height
Int
1フレームの高さです
配置順
fill_order
Text
スプライトシートの配置順です

Parameters

NameTypeDefaultRangeDescription / Options
FPS
fps
Int
00–60

結果スプライトシートの再生 FPS です (0 = プロジェクト既定に従う)

列数
columns
Int
00–64

スプライトシートの列数です (0 = 自動)

配置順
fill_order
Enum
RowMajor

フレームをスプライトシートへ詰める順番です

  • 右へRowMajor
  • 下へColumnMajor

Overview

The core batch-production node for generating parameter variations from the same graph. It applies candidates from a list produced by nodes such as variant_range one at a time, evaluates the graph, and combines images with different colors, seeds, or angles into a single sprite sheet. This is where PixPipeline's strength in batch-producing variations takes shape.

Read this first

  • This node applies each candidate received through items and creates one image.
  • Unlike AnimationRender, which iterates over time, this node iterates over candidates.

What happens

The process is:

  1. Select one item from items.
  2. Apply its snapshot to the graph.
  3. Render one result from the image input.
  4. Repeat for every item.
  5. Commit frames and spritesheet only after every item succeeds.

If any one item fails evaluation, the batch fails without returning a partial result.

Understanding the outputs

Output Contents Use
records Candidates that were actually used Review candidate records
frames One image for each item Inspect individual frames
spritesheet A sheet combining frames Playback, saving, and export
count Number of normalized candidates (when all succeed) Check the total count
frame_count Number of frames in the sheet Check metadata

Start with this example

Build the following graph:

  • PixelCanvas
  • Brightness
  • VariantRange
  • BatchRender

Settings:

  • VariantRange.key = strength
  • VariantRange.start = 0
  • VariantRange.end = 1
  • VariantRange.count = 5
  • Bind the strength parameter of Brightness to the strength variable.
  • PixelCanvas.image -> Brightness.image -> BatchRender.image
  • VariantRange.variants -> BatchRender.items

The candidates from VariantRange are:

[
  { "snapshot": { "values": { "strength": 0.0 } } },
  { "snapshot": { "values": { "strength": 0.25 } } },
  { "snapshot": { "values": { "strength": 0.5 } } },
  { "snapshot": { "values": { "strength": 0.75 } } },
  { "snapshot": { "values": { "strength": 1.0 } } }
]

BatchRender applies them to the graph one at a time, producing five images with different brightness levels.

records

[
  { "name": "strength=0.000", "snapshot": { "values": { "strength": 0.0 } } },
  { "name": "strength=0.250", "snapshot": { "values": { "strength": 0.25 } } },
  { "name": "strength=0.500", "snapshot": { "values": { "strength": 0.5 } } },
  { "name": "strength=0.750", "snapshot": { "values": { "strength": 0.75 } } },
  { "name": "strength=1.000", "snapshot": { "values": { "strength": 1.0 } } }
]

frames

[
  "<Image strength=0.0>",
  "<Image strength=0.25>",
  "<Image strength=0.5>",
  "<Image strength=0.75>",
  "<Image strength=1.0>"
]

count / frame_count

count = 5
frame_count = 5

Two-axis combination example

Place CartesianProduct before this node to batch candidates across two axes directly.

Example:

  • VariantRange(key=strength, start=0, end=1, count=3)
  • SeedRange(key=seed, start=10, count=2, step=1)
  • CartesianProduct
  • BatchRender

This produces 3 x 2 = 6 combinations.

BatchRender collects the snapshots inside CartesianProduct and treats them as candidates shaped like this:

{
  "snapshot": {
    "values": {
      "strength": 0.0,
      "seed": 10
    }
  }
}

Where snapshot keys are applied

Snapshot keys can target the graph in these forms:

  1. variable id or name for a variable-bound parameter
  2. node id, variable id, or variable name for a variable_ref node
  3. a direct parameter in exact nodeId:paramId form

For beginners, matching the variable name is the clearest approach. For a direct parameter, both the frontend node id and parameter id must exist in the graph and match exactly, including case.

Common pitfalls

  • Every frame has the same image: the snapshot key does not match anything in the graph. Check that the variable name (or nodeId:paramId) matches VariantRange.key.
  • Confusing it with animation_render: that node iterates over time (all frames with the same settings), while this one iterates over candidates (one candidate per image). Combine them when you need both, such as batch-producing palette variants of a walk animation.
  • Frame sizes vary: if the upstream graph contains solid_render or a similar node, set frame_mode = FixedCanvas to fix the dimensions (see the eight-direction asset example).
  • Only one item fails: Batch Render is all-or-nothing. It does not return the successful subset; fix the failed candidate and evaluate the complete batch again.

Notes

  • Each item is normalized to a VariantRecord before use.
  • A Map returned by ListZip / CartesianProduct can be passed directly.
  • Bookkeeping keys such as index / a_index / b_index are ignored automatically.
  • If different combination axes contain the same snapshot key, Batch Render reports an error instead of choosing an implicit overwrite order. Merge the value explicitly.

Solid eight-direction assets

When batch-producing Solid Render camera azimuths in 45-degree increments, the shortest setup is to create a direct param key with VariantRange.

Example settings:

  • Solid Render node ID: render
  • VariantRange.key = render:azimuth
  • VariantRange.start = 0
  • VariantRange.end = 315
  • VariantRange.count = 8
  • Solid Render.frame_mode = FixedCanvas
  • Solid Render.camera_angle_snap = 45
  • BatchRender.columns = 8

Because BatchRender applies each snapshot to the graph individually, it can combine all eight directions with a consistent frame size.

Related nodes

  • variant_range / seed_range — generate candidate lists (almost always paired with this node)
  • cartesian_product — creates two-axis candidate combinations such as color × seed
  • batch_export — exports the frames as files
  • animation_render — use this for iteration over time (animation)
Back to Node List
Batch Render — PixPipeline Node Reference