Extensions/ComfyUI-Easy-Media
ComfyUI Extension

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.

By yolain·Created 3 months ago·Updated about 16 hours ago· 158
yolain/ComfyUI-Easy-Media
Nodes39
On cloudLocal install
Categorymodel_patches/video_models, EasyUse/Video
Stars158
Updatedabout 16 hours ago

Nodes (39)

Bernini Model Patch

One Input, One Output — and It Might Not Even Do Anything

model_patches/video_models
Add Subtitle To Video

Burn Subtitles Without Leaving ComfyUI

EasyUse/Video
API Workflow Gate

One Workflow for Both the UI and the API, Without the Double Graph

EasyUse/Logic
Merge Audio

Mix or Concatenate Up to Six Audio Tracks — Your Call

EasyUse/Audio
Easy Bernini S2V Conditioning

Bernini, Now With Mouths That Move

conditioning/video_models
Compare Videos

A/B Your Generations Without Leaving the Canvas

EasyUse/Video
Get Audio From Video

Strip the Soundtrack Out of Any Video

EasyUse/Video
Image Indexes To Int List

Turn '0, 2, 5' Into an Actual List of Numbers

EasyUse/Image
LTX I2V Inplace & Upsample

Upscale and Inject Your Guide Image Into an LTX Latent, in One Step

EasyUse/LTX
LTX MultiTrack Encode

The LTX Node That Does Four Jobs So Your Graph Doesn't Have To

EasyUse/LTX
LTX Sampler Simple

One Sampler for the Whole Audio-Video Latent Stack

EasyUse/LTX
Make Audio List

Ten Audio Sockets Into One List, With a Quiet Little Secret

EasyUse/Audio
Make Image List

Ten Images, One List — the Pack's Everywhere Input

EasyUse/Image
Make Refs Composite By SAM3

Let SAM3 Cut Your References Out and Arrange Them On a Canvas

EasyUse/Image
Make Video List

Ten Video Sockets, One List — Keep Your Slot Positions Honest

EasyUse/Video
Match Line

Find a Line in Any Text and Get a Number Back

EasyUse/Logic
Merge Videos

Stitch Two Clips Together, Frame by Frame

EasyUse/Video
Merge Videos From Paths

Merge Every Segment on Disk Without Re-Adding Them by Hand

EasyUse/Video
Easy MiniMax H3 Reference Bridge

The H3 Reference Node That's Really a Plumbing Shuffle

EasyUse/MiniMax
MiniMax H3 To Video

MiniMax H3, One Node to Rule All the Modes

EasyUse/MiniMax
MultiTrack Add Subtitle To Video

The node that finishes your subtitled video (and hands you an SRT for free)

EasyUse/MultiTrackEditor
MultiTrack Audio Output

Grab the dialog out of your multitrack without touching a video editor

EasyUse/MultiTrackEditor
MultiTrack Editor

The editor node that turned ComfyUI into a mini NLE for video generation

EasyUse/MultiTrackEditor
MultiTrack Info Output

Stop hardcoding dimensions — read them off your multitrack instead

EasyUse/MultiTrackEditor
MultiTrack Prompt Enhancer

The LLM-powered prompt expander that knows your video and your timeline

EasyUse/MultiTrackEditor
MultiTrack Prompt Enhancer Image List Bridge

The unglamorous bridge node your local llama.cpp prompt graph needs

_easy_media/internal
MultiTrack Task Output

Pull one task segment out of the timeline — prompt, media, and all

EasyUse/MultiTrackEditor
Recognize Subtitle

Speech-to-text straight from ComfyUI, with timestamps and no cloud account

EasyUse/Media
!!Remove h3 motion context latent

The cleanup node that stops your H3 loops from filling the disk

EasyUse/MiniMax
Save Video

The Save Video node that keeps your frames usable downstream

EasyUse/Video
Split Audios

Ten single audio outputs from one list, for when indexing isn't a thing

EasyUse/Audio
Split Images

Split an image batch into ten named sockets and stop fighting the list

EasyUse/Image
Split Videos

Ten single videos from a video list — the bridge node you'll stop noticing

EasyUse/Video
Timeline Editor

The timeline node that made multi-shot videos actually buildable in ComfyUI

EasyUse/TimelineEditor
Timeline Info Output

Read your timeline's prompt, dimensions, and image indexes in one grab

EasyUse/TimelineEditor
Timeline Segment Count

The one-number node your timeline loop has been missing

EasyUse/TimelineEditor
Timeline Segment Output

The per-shot extractor that turns your timeline into a generation loop

EasyUse/TimelineEditor
LTXVAddGuidesFromBatchIndexes

Stamp your reference frames onto the LTX latent, at exactly the frames you choose

conditioning/ltxv
LTXVMakeRefVideo

Turn a stack of reference stills into the IC-LoRA reference video LTX wants

image/ltxv
Readme
<div align="center"> <img src="https://github.com/user-attachments/assets/fb602a3c-4a2a-48da-8c44-d36417f4633b" height="120"> <h1>ComfyUI-Easy-Media</h1>

中文文档 | Changelog

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 FFmpeg has 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

Compare

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

multiTrackEditor

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

SubtitleToVideo

🎞️ Compare Videos

CompareVideos

🎞️ APIWorkflowGate

APIWorkflowGate

Note: In APP Mode, you can use the APIWorkflowGate node 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

timelineEditor

<details> <summary>Dynamic Parameter Injection</summary>

If you want to dynamically invoke the timeline editor via agents or app, a method is available: input media assets into the corresponding input ports of the timeline editor (prompt_override, image, audio, video). When prompt_override is 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_override provides a prompt formatting template specification, similar to promptRelay + seedance2.0 dynamic prompts. See the example below for details.

dynamicInput

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 to AnyType. It is recommended to connect using a regular string type node.
  • image: Input image resource list; it is recommended to use the newly added easy makeImageList node 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 added easy makeVideoList node 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 added easy makeAudioList node 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 contain media placeholder, text prompt, and start-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, @image1 will 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, @video1 will 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, @audio1 will inject the first audio from the audio list.

Adding Media via Timeline Editor Input Ports:

If you only want to pass parameters via the image or audio, video input ports and do not want to use prompt_override, you can use the slot method 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.)

dynamicInput2

</details>

🎞️ SaveVideo

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

  1. Create a config.yaml file in the ComfyUI-Easy-Media directory and add the following content to enable frontend development mode:
WEB_VERSION: dev
  1. Navigate to the frontend directory and compile the development code for debugging:
cd frontend && bun install && bun run dev
  1. 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 |

Credits

Source of Inspiration

<!-- LINK GROUP -->