SB JSON Parser
Your storyboard JSON, exploded into per-cut prompt lists
- time_of_day
- weather
- mood
- location
- c_description
- fs_description
- camera_shot
- camera_angle
- composition
- camera_movement
- lens_type
- lighting_style
- lighting_direction
- focus_subject
- character_prompt
- count
If you work from structured storyboards - JSON files where each scene holds its cuts, camera choices, lighting, and characters - then most of ComfyUI is a black hole: nothing reads your carefully-organized metadata. SBJsonParser is the front door. It reads a storyboard JSON out of your input/ folder and explodes it into fifteen parallel STRING lists - one per field, aligned by cut index - plus a count. Feed those lists into prompt assembly and you can turn a structured storyboard into a batch of per-cut generations without re-typing a single line.
How it works
The JSON dropdown scans a folder the pack registers at ComfyUI/input/prompt/ (so that's where your .json files go). On parse, it walks the file's scene structure, expanding each scene's cuts into a flat sequence. Scene-level fields - timeOfDay, weather, mood, location - are broadcast to every cut in that scene; cut-level fields like cameraShot, cDescription, lensType, lightingStyle map one-to-one. Two outputs are derived rather than raw: focus_subject (from the cut) and character_prompt, which is built from the file's character section with the focus subject listed first. All the STRING outputs are lists, and they're aligned by index - list position N of every output describes the same cut.
It's also an output node: it shows a human-readable preview of scenes and cuts in the UI, which makes it a handy little sanity checker on its own.
The inputs and outputs
One input: JSON, the file selector. Outputs: time_of_day, weather, mood, location, c_description, fs_description, camera_shot, camera_angle, composition, camera_movement, lens_type, lighting_style, lighting_direction, focus_subject, character_prompt - all STRING lists - plus count (INT).
Note the expected shape differs from what the README's example shows. The code wants a scene object whose entries each contain a cuts object, plus a top-level character object:
{
"scene": { "1": { "timeOfDay": "morning", "cuts": { "1": { "cDescription": "...", "cameraShot": "close-up" } } } },
"character": { "hero": { "appearance": "..." } }
}
If your JSON follows the README's older flat format, you'll get zero cuts and a "No cuts found" preview.
Install
Ships in the IXIWORKS pack - ComfyUI Manager → search ComfyUI-VideoDescription, restart, or clone into custom_nodes/. No extra dependencies. It's the highest-leverage node in the StoryBoard category: everything else - prompt building, string merging, filtering - sits downstream of this one, and it turns a file format nobody in ComfyUI could read into usable data.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| JSON | COMBO | 1 options: (no files) |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| time_of_day | STRING | — |
| weather | STRING | — |
| mood | STRING | — |
| location | STRING | — |
| c_description | STRING | — |
| fs_description | STRING | — |
| camera_shot | STRING | — |
| camera_angle | STRING | — |
| composition | STRING | — |
| camera_movement | STRING | — |
| lens_type | STRING | — |
| lighting_style | STRING | — |
| lighting_direction | STRING | — |
| focus_subject | STRING | — |
| character_prompt | STRING | — |
| count | INT | — |