Nodes/IAMCCS-nodes/R42/R43 · Universal or Viggle Animation
ComfyUI Node

R42/R43 · Universal or Viggle Animation

Switch Animation Branches at the Finish Line

By IAMCCS·Created 12 months ago·Updated about 14 hours ago· 113
R42/R43 · Universal or Viggle Animation
  • cine_linx
  • standard_frames
  • standard_audio
  • viggle_frames
  • viggle_audio
  • editor_cine_linx
  • video_path
  • frames
  • audio
  • current_segment
  • total_segments
  • fps
  • resolved_render_id
  • report
modestandard_universal
standard_path
standard_current_segment
standard_total_segments
standard_fps
standard_render_id

Most "or" nodes in ComfyUI are switches you throw after everything has already run. This one throws the switch before, and that's the entire reason it exists.

You have two ways to finish a shot: the standard universal H3 route, or a Viggle character-animation route where a driving video moves a reference character. Both are big. Both are slow. In a normal graph you'd wire both, and pay for both, every time. Here, mode decides which branch's inputs ComfyUI is even allowed to evaluate - check_lazy_status requests either the seven standard_* inputs or the two viggle_* ones, and the unselected branch never executes.

The two modes

standard_universal passes the universal branch through: standard_path, standard_frames, standard_audio, standard_current_segment, standard_total_segments, standard_fps, standard_render_id. It validates: no IMAGE frames, no output; a missing or empty AUDIO waveform, no output. Then it returns your cine_linx untouched, along with the frames, audio, counters, fps, render id and a report line.

viggle_animation takes the Viggle branch's generated frames and audio, and rewrites the project plan to match. The adapted cine_linx gets task_mode: viggle_animation, fps fixed at 24, a single chunk labelled "Viggle animation" sized to the frame count, and a render id of viggle_animation - because a Viggle render isn't a segment of a segmented roll, it's one animated shot. video_path comes back empty in this mode on purpose: the asset is in memory, not a file yet.

Note what it does not do: it doesn't import Viggle's implementation. It's a bridge over media the pack already carries, so the R42/R43 generation branches stay exactly as they were and Viggle remains an optional dependency you can simply not have installed until you want it.

Outputs

editor_cine_linx (the project bus, adapted or passed through), video_path, frames, audio, current_segment, total_segments, fps, resolved_render_id, report. Wire the linx and the media forward; the counters and fps are there so a downstream editor node works identically no matter which mode produced the shot.

The quiet piece of engineering

There's a monkeypatch in this module that you'd never find by reading the node list: VHS exposes a lazy AUDIO output on every loaded video, and iterating it raises if the container has no audio stream - which kills the graph before any downstream node can substitute silence. The bridge patches exactly that one FFmpeg "no stream" condition into a silent fallback (flagged internally, 32 kHz), while leaving real decode failures and corrupt files to raise normally.

If you've ever had a video-only driving clip blow up a character-animation workflow for no apparent reason, that's the bug, and this is the fix. The patch is scoped narrowly for a reason: swallowing genuine audio errors would be much worse than the crash.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git

Manager → IAMCCS Nodes, restart, hard-refresh, one copy in the repo. Then: VideoHelperSuite is effectively required here, since the audio patch targets it, and your Viggle route needs whatever local Viggle-Animate-H3 setup you're running - the pack deliberately doesn't ship or vendor it. If Viggle isn't installed, leave the node on standard_universal and nothing changes.

Honest expectations

Viggle-style character animation has been a known trick since 2024 - a driving performance plus a character image, mixed with ComfyUI for cleanup. The failure mode has never been the mechanism; it's identity. The knowledge base's line on this is blunt: cross-clip character consistency is unsolved without careful engineering, and any animation route that rewrites a character per frame will drift. The reference_image you feed ViggleCineMedia is doing most of the work. Judge the output on the face, not the motion.

One practical note: the R42/R43 revision labels in these names are the author's internal branch revisions, kept in the class names so saved workflows load with the behaviour they were built against. Don't rename them in a hope of tidying a graph.

CategoryIAMCCS/MiniMax H3/Viggle

Inputs (11)

NameTypeDefaultDescription
cine_linxIAMCCS_SUPERNODE_LINX
modeCOMBOstandard_universal2 options: standard_universal, viggle_animation
standard_pathoptSTRING
standard_framesoptIMAGE
standard_audiooptAUDIO
standard_current_segmentoptINT
standard_total_segmentsoptINT
standard_fpsoptINT
standard_render_idoptSTRING
viggle_framesoptIMAGE
viggle_audiooptAUDIO

Outputs (9)

NameTypeDescription
editor_cine_linxIAMCCS_SUPERNODE_LINX
video_pathSTRING
framesIMAGE
audioAUDIO
current_segmentINT
total_segmentsINT
fpsINT
resolved_render_idSTRING
reportSTRING