MultiTrack Project
The node that does the looping for you
- tracks_info
- model_loader
- model_loader_2nd
- sampler
- sampler_2nd
- sigmas
- sigmas_2nd
- PROJECT_NAME
- LOCKED_AUDIO
If you've ever built a "generate 12 segments in a loop" workflow, you know the pain: a chain of loaders, samplers, and latent-save nodes all wired to a single task_index, forever fighting the cache. easy multitrackProject is Easy-Media's answer, and it's the node that makes the pack's whole MultiTrack pitch click. You feed it the TRACKS_INFO output of the MultiTrack Editor, it expands each task into a full encode → sample → decode → save pipeline for you, in order, with optional two-pass (dual) sampling, and hands back a PROJECT_NAME for the combine node at the end. No segment loop, no manual index math.
One honest caveat first: this node currently runs MiniMax H3 only. The source refuses anything that isn't a MiniMaxH3 model config. The editor stays model-agnostic; the project executor is H3-shaped.
What it does with a timeline
The README lays out the internal flow, and it's worth knowing because it explains every input:
- Read the task, load its media on demand (v1.3.0's lazy-loading - nothing is decoded until a segment needs it).
- Build conditioning for the task's mode - text-to-video, image-to-video, first/last frame, or multimedia reference - plus audio/video latents.
- First pass at the editor's dimensions.
- Optional second pass: multiply by
upscale_by, align to the nearest multiple of 32, upscale the latent, sample again. - Decode, trim the context overlap, save the segment, carry context to the next, repeat.
Shot vs Context continuity is per-segment: Shot starts fresh, Context inherits the previous segment's audio/video tail. The pipeline passes context between segments automatically - you never wire up your own Save/Resume Latent nodes.
The inputs that matter
tracks_info- from the MultiTrack Editor. This is the whole plan: tasks, prompts, media, continuity modes.model_loader- aFAST_MODEL_LOADERfrom easy modelLoaderPack: H3 model + CLIP + video VAE + audio VAE (audio VAE is required for video projects, because H3 generates audio jointly).project_name- names the folder underComfyUI/output/easy_media/projects/. Reuse the same name to resume.segment_start_number/segment_count- start segment counts from 1 (unlike the zero-basedtask_indexin MultiTrack Task Output - an easy way to confuse yourself).segment_count = -1means "process everything remaining."project_save-newkeeps old results and adds versions for regenerated segments (so you can A/B compare);overridereplaces them.sampling_plan- built-in presets (ultra_light,light,medium,high) that pick samplers and sigma schedules for Turbo vs non-Turbo H3, orcustomfor manual.sampling_mode-singleordual(first pass + upscale + second pass).upscale_by- second-pass scale relative to editor dims, default1.250.1.000skips resizing but still allows a second pass.1st_pass_only- run and checkpoint only the first pass of the first selected segment; turn it off next run to resume at pass two. Great for previewing speed.upscale_model- H3 latent upscaler weights for direct latent upscaling, orNoneto go through a VAE decode → resize → re-encode path.
Outputs are just two: PROJECT_NAME (feed it to easy multitrackProjectVideoCombine) and LOCKED_AUDIO (the original audio, if you locked it, without regenerating).
Installation
The pack itself, plus FFmpeg (the README insists FFmpeg is installed before the pack - it is a hard dependency for media handling):
# system FFmpeg first
# then:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media
Restart ComfyUI, or install via ComfyUI Manager by searching "ComfyUI-Easy-Media". The pack's pyproject.toml declares zero Python dependencies - the heavy stuff is optional and per-feature. For dual sampling you need one of two upscale paths: ComfyUI-KJNodes (for ImageResizeKJv2 when upscale_model is None), or the H3 latent upscaler plus its weights in ComfyUI/models/latent_upscale_models/. Then the MiniMax H3 weights themselves (~42.5GB, under a community licence that geofences the US, EU, UK and Korea out of local use). torchaudio is needed if you lock audio from a file that isn't already at the VAE's sample rate.
Troubleshooting
- "currently supports only MiniMaxH3 models" - you wired a non-H3 model into
model_loader. That's the guard working. - "requires ImageResizeKJv2 from ComfyUI-KJNodes" -
upscale_modelisNonein dual mode and KJNodes isn't installed. Install it, or select real upscaler weights. Selecting weights without the latent-upscaler pack raises an error rather than silently switching paths - that's deliberate. - Context resolution errors when resuming - if you change editor dimensions,
upscale_by, or a previous segment's version, the saved context chain can no longer match. Regenerate the affected earlier segments first; later Context segments won't fix themselves. - Nothing in the output folder - check
segment_start_number. It's 1-based, andsegment_count = -1inoverridemode deletes saved segments from the start point onward before regenerating. That deletion is the point, but it will eat results if you weren't expecting it.
The project's expanded graph contains the internal _EasyUse/H3 nodes (h3SegmentSamplingStart, h3ContextMediaTrim, h3ProjectArtifact, …) - you'll see them if you inspect the queue. Leave them alone; they're the pipeline's organs, not yours to rewire.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| tracks_info | TRACKS_INFO | — | |
| model_loader | FAST_MODEL_LOADER | — | |
| project_name | STRING | — | |
| project_save | COMBO | override | 2 options: new, override |
| segment_start_number | INT | 11–2147483647 | The task segment start number. |
| segment_count | INT | -1-1–2147483647 | Maximum task segments in this queue. When set to -1, override mode deletes saved segments from segment_start_number onward before regeneration; new mode preserves existing video and latent files. |
| seed | INT | 420–18446744073709550000 | — |
| sampling_plan | COMBO | light | 5 options: custom, ultra_light, light, medium, high |
| sampling_mode | COMBO | 3 options: [object Object], [object Object], [object Object] | |
| 1st_pass_only | BOOLEAN | false | Run and save only the first selected segment's first pass. Turn this off on the next run to resume directly from that checkpoint at pass two. |
| disable_2nd_noise | BOOLEAN | false | Disable noise in second-pass for dual-sampling |
| upscale_by | FLOAT | 1.2501–8 | — |
| upscale_model | COMBO | None | 1 options: None |
| enabled_tiling | COMBO | Enable shared high-resolution H3 spatial tiling. | |
| model_loader_2ndopt | FAST_MODEL_LOADER | Optional second-pass model. Encoding and VAE components remain from the first-pass loader. | |
| sampleropt | SAMPLER | — | |
| sampler_2ndopt | SAMPLER | Optional second-pass sampler. | |
| sigmasopt | SIGMAS | — | |
| sigmas_2ndopt | SIGMAS | Optional second-pass sigmas. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| PROJECT_NAME | STRING | — |
| LOCKED_AUDIO | AUDIO | — |