Nodes/AkkiNodes LLM Suite: Your Personal AI Film Studio/Pro Shot List Parser v9.4 (Definitive)
ComfyUI Node

Pro Shot List Parser v9.4 (Definitive)

The parser that turns an LLM's messy shot breakdown into a CSV your whole pipeline can trust

By routhakash·Created about a year ago·Updated 9 months ago· 8
Pro Shot List Parser v9.4 (Definitive)
    • full_report_csv
    • shot_details_for_dossier
    • cinematography_notes
    • sound_design_notes
    • performance_notes
    • master_character_list
    • master_prop_list
    • debug_log
    shot_breakdown_report
    character_bible
    shot_index_for_debug0

    Here's the core tension in every LLM pipeline: the AI is great at writing a cinematic shot-by-shot breakdown, and terrible at keeping CHARACTERS: She consistent with the fact that the character's name is "Mara." The Pro Shot List Parser is the pack's answer to that - it takes the raw shot report from the AI Cinematographer, cross-checks every name against the character bible, and emits a clean, canonical CSV that every downstream node in the Akki suite treats as ground truth.

    This is the node the pack's "Code is Law" philosophy is built around. The LLM does the creative work upstream; this parser is pure deterministic Python doing the correctness work that AI is bad at. If you're using AkkiNodes as a real "Script to Screen" pipeline and not just a toy, this node is the difference between a CSV you can feed into production tools and a text file full of half-resolved pronouns.

    How it works

    Three inputs:

    • shot_breakdown_report - the raw, tagged shot report coming out of the AI Cinematographer (the //---SHOT_START---// ... //---SHOT_END---// blocks).
    • character_bible - the canonical character list from ScriptCrafter P1; the parser pulls NAME: lines out of it to build its reference set.
    • shot_index_for_debug (default 0) - leave at 0 for a full parse; set it to a shot number to run a single-shot debug pass.

    The mechanism is a two-pass transform. Pass 1 establishes "ground truth" for the shot - the real character list from the CHARACTERS field, with junk filtered out. Pass 2 then resolves every field against that context. Pronouns like she/they are only expanded when the shot unambiguously has one character; otherwise they're left alone so the upstream problem surfaces instead of being silently mangled. Character name variants get matched to bible names via Levenshtein distance (within a distance of 3), dialogue is re-formatted as Name: (action) line, and keys get aliased - SET_TYPE becomes SHOT_TYPE, CAMERA becomes Camera & Lens, and so on.

    The eight outputs are the point:

    • full_report_csv - the canonical, quoted CSV of every shot. This is the artifact the rest of the pipeline reads.
    • shot_details_for_dossier, cinematography_notes, sound_design_notes, performance_notes - split-out reference bundles for different production roles.
    • master_character_list and master_prop_list - deduplicated inventories gathered across all shots.
    • debug_log - set shot_index_for_debug above 0 and this becomes the only meaningful output, showing the raw parsed blocks and the normalized result for that one shot.

    Installing

    Standard pack install:

    cd ComfyUI/custom_nodes
    git clone https://github.com/routhakash/AkkiNodes-LLM-Suite-for-ComfyUI
    

    On Windows, run install.bat as administrator once (installs llama-cpp-python==0.3.9 and openai into the ComfyUI venv), drop a GGUF model into ComfyUI/models/llms/, restart. Linux/macOS: install those two packages into your ComfyUI environment yourself.

    Gotchas

    • Garbage in, garbage out - but it tries hard. The parser is defensive by design: an empty report or one starting with ERROR: returns an 8-tuple of error strings rather than crashing. If every output starts with ERROR:, the problem is upstream in the Cinematographer, not here.
    • The CSV shape depends on the report's columns. The node builds headers from a preferred order plus whatever extra keys appear. If you hand it a hand-written breakdown that doesn't use the tagged block format, _extract_raw_data will find zero shot blocks and you'll get a generic parse error.
    • Pronoun resolution is deliberately conservative. Ambiguous she in a two-character shot stays she so the error survives to be fixed at the source - that matches the pack's "fix data where it's produced" philosophy. Don't expect magic; expect correctness checks.
    • This pack has no community footprint worth citing (zero meaningful reddit/GitHub discussion), so the source code is the spec. That also means if you hit a genuinely weird edge case, you're the QA team.

    If your workflow just needs "shot list → CSV," you could parse it in a script - but then you'd be reimplementing the name-matching and pronoun logic that's already been through nine versions of iteration here.

    CategoryAkkiNodes/Production

    Inputs (3)

    NameTypeDefaultDescription
    shot_breakdown_reportSTRING
    character_bibleSTRING
    shot_index_for_debugINT0

    Outputs (8)

    NameTypeDescription
    full_report_csvSTRING
    shot_details_for_dossierSTRING
    cinematography_notesSTRING
    sound_design_notesSTRING
    performance_notesSTRING
    master_character_listSTRING
    master_prop_listSTRING
    debug_logSTRING