ComfyUI-Easy-Media
A ComfyUI custom node package for streamlined media loading and video pipeline assembly. Provides intuitive nodes that simplify media resource loading with user-friendly parameters, making it easier to build and configure video processing workflows.
Nodes (39)
One Input, One Output — and It Might Not Even Do Anything
Burn Subtitles Without Leaving ComfyUI
One Workflow for Both the UI and the API, Without the Double Graph
Mix or Concatenate Up to Six Audio Tracks — Your Call
Bernini, Now With Mouths That Move
A/B Your Generations Without Leaving the Canvas
Strip the Soundtrack Out of Any Video
Turn '0, 2, 5' Into an Actual List of Numbers
Upscale and Inject Your Guide Image Into an LTX Latent, in One Step
The LTX Node That Does Four Jobs So Your Graph Doesn't Have To
One Sampler for the Whole Audio-Video Latent Stack
Ten Audio Sockets Into One List, With a Quiet Little Secret
Ten Images, One List — the Pack's Everywhere Input
Let SAM3 Cut Your References Out and Arrange Them On a Canvas
Ten Video Sockets, One List — Keep Your Slot Positions Honest
Find a Line in Any Text and Get a Number Back
Stitch Two Clips Together, Frame by Frame
Merge Every Segment on Disk Without Re-Adding Them by Hand
The H3 Reference Node That's Really a Plumbing Shuffle
MiniMax H3, One Node to Rule All the Modes
The node that finishes your subtitled video (and hands you an SRT for free)
Grab the dialog out of your multitrack without touching a video editor
The editor node that turned ComfyUI into a mini NLE for video generation
Stop hardcoding dimensions — read them off your multitrack instead
The LLM-powered prompt expander that knows your video and your timeline
The unglamorous bridge node your local llama.cpp prompt graph needs
Pull one task segment out of the timeline — prompt, media, and all
Speech-to-text straight from ComfyUI, with timestamps and no cloud account
The cleanup node that stops your H3 loops from filling the disk
The Save Video node that keeps your frames usable downstream
Ten single audio outputs from one list, for when indexing isn't a thing
Split an image batch into ten named sockets and stop fighting the list
Ten single videos from a video list — the bridge node you'll stop noticing
The timeline node that made multi-shot videos actually buildable in ComfyUI
Read your timeline's prompt, dimensions, and image indexes in one grab
The one-number node your timeline loop has been missing
The per-shot extractor that turns your timeline into a generation loop
Stamp your reference frames onto the LTX latent, at exactly the frames you choose
Turn a stack of reference stills into the IC-LoRA reference video LTX wants
A ComfyUI custom node package for streamlined media loading and video pipeline assembly. Provides intuitive nodes that simplify media resource editing and loading with user-friendly parameters, making it easier to build and configure video processing workflows.
<img src="https://github.com/user-attachments/assets/493947f1-3fff-4503-b2d3-408591b7597f" style="width:100%"> </div>📦 Installation
[!IMPORTANT] It is strongly recommended that before installing this node package, you first ensure that
FFmpeghas already been installed in your system environment
cd Your_ComfyUI_Path/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media.git
✏️ Example Workflows
After installing, open ComfyUI and find the bundled example workflows in the Templates panel on the left sidebar — look for entries under ComfyUI-Easy-Media.
✨ Features
🎞️ MultiTrack Editor
Comparison
Tips: The advantage of the multi-track editor is its decoupling design — it is used solely for media editing and loading, and is not bound to any model. Users can freely choose any model node to process the media data output by the multi-track editor.
Overview
Tracks
| Track Type | Description | | - | - | | Task Track | Supports multiple task type definitions such as t2v, i2v, r2v, v2v | | Video Track | Import and manage video clips, supporting multi-segment video stitching and intelligent segmentation | | Audio Track | Import and manage audio clips, supporting multi-segment audio stitching | | Subtitle Track | Add subtitles recognized from audio/video |
- Task segments are the core of this node; workflows can be designed for automatic looping based on the number of task track segments
- When adding video clips to the video track, corresponding task segments will be automatically added with matching duration
- Selecting a task segment allows you to set image, task type, and user prompt / system prompt (defaults exist based on task type, or you can write your own)
- The MultiTrack Info Output node outputs video dimensions, total frame count, frame rate, and task count
- The MultiTrack Task Output node outputs user prompt & system prompt for corresponding segments; users can decide whether to connect LLM nodes for prompt expansion or use images in segments for reverse inference
Use Cases
| Scenario | Description | Requirements | |----------|-------------|-------------| | Video Generation | MiniMax H3/wan/bernini/ltx t2v, i2v, r2v | Task track segments only | | Video Editing | bernini v2v, bernini vi2v, wan animate, ltx video replace, ltx iclora edit/inpaint/outpaint | Video track segments + task track segments | | Video Reference | wan scail2, wan animate, ltx iclora guide | Video track segments + task track segments | | Video Dubbing | wan infinititalk, longcat avatar, ltx ai2v | Task track segments + audio track segments | | Video Subtitles | - | Task track segments + subtitle track segments |
- Only the most common open-source model generation types are listed; theoretically any video model pipeline can use the multi-track editor as a preprocessing tool
Optional Models
| Scenario | Description | Download | Local Path | Prerequisites
| - | - | - | - | - |
| Video Subtitles (Whisper) | Audio/video recognition to generate subtitles | Whisper Large V3 | models/audio_encoders/ | pip install openai-whisper |
| Video Subtitles (Qwen3) | Audio/video recognition to generate subtitles | Qwen3-ASR <br> Qwen3-ForcedAligner | models/Qwen3-ASR/ | pip install qwen-asr torchaudio |
| Subtitle Narration | Convert subtitles to speech voiceover | VoxCPM2 | models/voxcpm/ | pip install voxcpm |
| Shot Detection | Intelligently segment video shots | OmniShotCut | models/checkpoints | - |
Note: Some models support automatic download via the built-in Easy-Media model download interface. Model files will be placed in the
ComfyUI/models/directory.
🎞️ Subtitle To Video
🎞️ Compare Videos
🎞️ APIWorkflowGate
Note: In
APP Mode, you can use theAPIWorkflowGatenode to determine that only workflows intended for API calls will pass through the preceding input items; otherwise, regular workflow queues will begin execution directly from the subsequent nodes.
🎞️ Timeline Editor
If you want to dynamically invoke the timeline editor via
agentsorapp, a method is available: input media assets into the corresponding input ports of the timeline editor (prompt_override,image,audio,video). Whenprompt_overrideis injected, it will override the segment data in the timeline editor. However, compared to directly editing segment content via the visual interface, the dynamic parameter injection method has limitations—for example, it is not convenient to control audio duration and ranges.prompt_overrideprovides a prompt formatting template specification, similar topromptRelay + seedance2.0dynamic prompts. See the example below for details.
Optional Parameters:
prompt_override: Due to ComfyUI's force_input compatibility issues, when force_input exists, custom widgets cannot be accessed. Therefore, the parameter type is currently set toAnyType. It is recommended to connect using a regular string type node.image: Input image resource list; it is recommended to use the newly addedeasy makeImageListnode to create image lists.video: Input video resource list; if a segment only needs one video, connect the video directly to the video input port. If multiple video segments are needed, it is recommended to use the newly addedeasy makeVideoListnode to create video lists.audio: Input audio resource list; if a segment only needs one audio, connect the audio directly to the audio input port. If multiple audio segments are needed, it is recommended to use the newly addedeasy makeAudioListnode to create audio lists.
Prompt Example:
@图片1 @音频1 镜头晃动,老者正望着光亮处神色慌张地喊话: 别学那玩意,别连线啊。 [0-120] | @图片2 @音频2 镜头缓慢推进,男人正在操作电脑,说道:有意思,这ComfyUI能火,我指定得学它 [120-240]
- [0-120] and [120-240] represent the start and end frame ranges of segments on the timeline, in frames (frame), also supports [0-5s] [5-10s] writing, in seconds. If no time range is specified, the total duration set on the original timeline editor will be equally distributed.
- Segments are separated by
|, representing different time periods. Each segment can containmedia placeholder,text prompt, andstart-end frame range. - Image injection: Supports
@image{n},@img{n},@图{n},@图片{n},@图像{n}as placeholders to inject image resources, where{n}represents the n-th image in the image list (starting from 1). For example,@image1will inject the first image from the image list. - Video injection: Supports
@video{n},@视频{n}as placeholders to inject video resources, where{n}represents the n-th video in the video list (starting from 1). For example,@video1will inject the first video from the video list. - Audio injection: Supports
@audio{n},@音频{n}as placeholders to inject audio resources, where{n}represents the n-th audio in the audio list (starting from 1). For example,@audio1will inject the first audio from the audio list.
Adding Media via Timeline Editor Input Ports:
If you only want to pass parameters via the
imageoraudio,videoinput ports and do not want to useprompt_override, you can use theslotmethod to associate media in the image or audio adding section with the media from the corresponding input port. This way, when executing workflow tasks, the input media resources will automatically be associated with the corresponding segments in the timeline editor. (Note: The preview displayed on the timeline editor traces back to the resources of the corresponding nodes that initially loaded the images or audio. If you use cropping or truncation nodes between the loading and timeline editor workflow to process the original media, the backend will also execute this processing; however, the frontend preview display shows the initial state.)
🎞️ SaveVideo
Integrated and enhanced the video saving node from the SaveVideoRGBA node package. Supports video export with customizable output path, filename prefix, frame rate, and other parameters.
🎞️ Merge Videos From Paths
Load video files from a list of file paths (or URLs) and concatenate them into a single video output.
The trim_frame_count parameter defaults to -1, which keeps all frames of the merged video. When set to a value greater than 0, the node calculates the duration based on the merged video's frame rate and uses FFmpeg to trim the final video.
Development & Testing
- Create a
config.yamlfile in the ComfyUI-Easy-Media directory and add the following content to enable frontend development mode:
WEB_VERSION: dev
- Navigate to the frontend directory and compile the development code for debugging:
cd frontend && bun install && bun run dev
- After modifying the code, compile for production:
bun run build:release
Node List
| Node ID | Description | | ------- | ----------- | | easy timelineEditor | Load media timeline (prompt, image, audio tracks) and output structured data | | easy timelineInfoOutput | Output timeline info including formatted prompt, dimensions, and image indexes | | easy timelineSegmentOutput | Output specific segment data from the timeline | | easy timelineSegmentCount | Output the total number of segments in the timeline | | easy makeImageList | Combine multiple image inputs into an image list | | easy makeAudioList | Combine multiple audio inputs into an audio list | | easy splitAudios | Split an audio list into multiple single-audio outputs | | easy audioMerge | Merge or concatenate up to six audio inputs | | easy makeVideoList | Combine multiple video inputs into a video list | | easy splitVideos | Split a video list into multiple single-video outputs | | easy compareVideos | Preview source and output VIDEO inputs side by side with an interactive comparison slider | | easy imageIndexesToIntList | Convert comma-separated image index string to integer list | | easy saveVideo | Save images and optional audio as video file | | easy getAudioFromVideo | Extract audio from a VIDEO input | | easy mergeVideos | Concatenate multiple compatible VIDEO segments | | easy mergeVideosFromPaths | Load and concatenate videos from file path list, optionally trimming the merged output by frame count | | easy multiTrackEditor | Multi-track editor for editing and transferring multi-track media data | | easy multiTrackInfoOutput | Output multi-track dimensions, duration, frame rate, and task count | | easy multiTrackTaskOutput | Output multi-track task segment prompts and task-ranged media | | easy recognizeSubtitle | Recognize subtitles with Qwen3-ASR or Whisper Large V3; configure SRT/timestamp output, sentence length, and model unloading | | easy addSubtitleToVideo | Normalize multiline SRT, timestamp, or bracket-formatted text and burn it into a video | | easy multiTrackAddSubtitleToVideo | Add subtitle track to video track | | easy makeRefsCompositeBySam3 | Detect subject in prompt using SAM3 and composite reference images onto canvas | | easy splitImages | Split an image list or batch into multiple single-image outputs | | easy matchLine | Return zero-based index of the first line containing matching text | | easy apiWorkflowGate | Determine if the workflow is an API call and pass through preceding input items | | easy minimaxH3ToVideo | Build MiniMax H3 text-to-video, reference-to-video, or first/last-frame conditioning and latent inputs | | easy removeH3MotionContextLatent | Remove H3 Motion Context latent files after a loop finishes | | LTXVAddGuidesFromBatchIndexes | Add guide images from batch images to specified frame indexes of latent variables | | LTXVMakeRefVideo | Expand a reference image batch into an IC-LoRA reference video | | easy ltxMultiTrackEncode | Build Prompt Relay conditioning and LTX video/audio latents | | easy ltxI2VInplaceAndUpsample | Optionally upscale an LTX video latent and apply an image guide in place | | easy ltxSamplerSimple | Sample combined LTX audio/video latents and crop video guides | | easy berniniS2VConditioning | Unified Bernini + Wan S2V conditioning: original optional single-speaker audio, spatially masked single-speaker audio, or optional sequential two-speaker audio |