ComfyUI Node

EDL Scene Parser

Read an edit list back, one scene at a time

By lazniak·Created 2 years ago·Updated 11 months ago· 7
EDL Scene Parser
    • edl_path
    • actual_frame
    • next_frame
    • scene_duration
    • has_next
    • total_scenes
    edl_path
    scene1
    fps25.0
    buy_me_a_coffeefalse
    usage_counterUsage count: 0

    An EDL (Edit Decision List) is the old-school text timeline that NLEs - Premiere, Resolve, Avid - have exported since the 1970s. It's just lines of text describing each cut: track, source, timecodes, clip names. EDL Scene Parser reads one of those files and walks through it scene by scene, handing you the current scene's info plus a "is there more?" flag.

    If that sounds niche, it is - unless you're doing the thing this pack is actually built for. The flagship VibeMusicEngine writes EDL files from audio: it transcribes your song, detects beats, and produces a cut list so you can assemble a music video where every shot matches the lyrics. This node is the read-back half of that loop. Feed it the EDL the Vibe engine wrote (or one you exported from any NLE), set which scene you're on, and it tells you the clip name, how long it lasts, and whether a next scene exists - the inputs you need to generate each shot and know when you're done.

    What you set

    • edl_path (STRING) - path to the .edl file.
    • scene (INT, default 1) - which scene to inspect, 1-based.
    • fps (FLOAT, default 25) - frame rate used to convert the EDL's timecodes into frame counts. Get this wrong and every duration is wrong.

    What comes out

    • actual_frame / next_frame (STRING) - the current and following scene's identifiers.
    • scene_duration (INT) - the scene's length in frames.
    • has_next (BOOLEAN) - true while more scenes remain.
    • total_scenes (INT) - how many scenes the whole EDL contains.

    Here's the honest naming critique: actual_frame isn't a frame number. The parser grabs the clip's name from the FROM CLIP NAME: line that follows each event, so actual_frame is really "the clip name for this scene." Treat it as an identifier, not a frame index, and you won't be confused when it returns sc_00007 instead of 712. The duration is computed properly from the record in/out timecodes at your chosen fps.

    How it works under the hood

    It scans the file for lines that start with a digit and contain a V track marker, then pulls the clip name from the following line and the record timecodes from the event line. Scene numbers beyond the total clamp to the last scene instead of erroring, and an unparseable or empty EDL returns zeroes with has_next false rather than blowing up.

    Install & gotchas

    Same pack, same install - Manager search "videoclipgenerator", or git clone https://github.com/lazniak/videoclipgenerator into custom_nodes and pip install -r requirements.txt, then restart.

    Real-world gotcha: this parser expects CMX3600-style output - the Vibe engine's EDLs work, and so do standard NLE exports, but hand-rolled or exotically formatted EDLs can parse to zero scenes. Also, the buy_me_a_coffee checkbox that every node in this pack carries will open a browser tab if you tick it. Leave it off unless you feel generous; it does nothing else.

    Categoryutils

    Inputs (5)

    NameTypeDefaultDescription
    edl_pathSTRINGPath to the EDL file to parse
    sceneINT1Scene number to process
    fpsFLOAT25.0Frames per second rate
    buy_me_a_coffeeBOOLEANfalseSupport the development! ☕ By enabling this option, you'll be directed to a page where you can show your appreciation for this tool.
    usage_counterSTRINGUsage count: 0Tracks how many times this node has been used.

    Outputs (6)

    NameTypeDescription
    edl_pathSTRING
    actual_frameSTRING
    next_frameSTRING
    scene_durationINT
    has_nextBOOLEAN
    total_scenesINT