Dials

Training-free steering for MiniMax H3, made from prompt pairs.

Write two prompts that differ in one quality, such as "stands perfectly still" and "runs across the scene". Dials turns the difference into a ~14 KB file that works like a strength slider in ComfyUI. Negative strength moves every generation toward the first prompt, positive toward the second.

Demo, 1:57. Every video shot was rendered locally with MiniMax H3 and Pika H3 Flex in ComfyUI, and the narration was voiced by MiniMax H3 too. Captions are burned in.

What a dial is

Prompt pairs in, a slider outNo training and no rendering to make one. About a minute: one text-encoder pass per prompt, averaged into one direction.
Added where H3 reads the promptOne vector, added to every prompt token right after H3's token refiner. Strength is the slider.
Stacks with everythingCombine dials with each other, with LoRAs, and with Pika H3 Flex's 6-step LoRA.

How it started

DaveSnow's Natural_detailV2 dataset is 122 beautiful, perfectly still photos. An H3 LoRA trained on stills costs about 20 % of subject motion. His trick of training only every other block behaved like turning the LoRA down to about 0.7: the same trade at a smaller dose.

Every post-hoc edit we tried (block subsets, factor splits, activation projections, timestep schedules) landed back on that same strength curve. Untangling the weights would take far more time, so the question became: is there anything less tangled to play with? The prompt is. In prompt space, an idea like motion is one direction.

Measured

motion dial on base H3motion vs base
−20.05× (near-frozen, cinemagraph-like)
+2about 2.7× (everything zooms)
with DaveSnow's detail LoRA (12 clips, vs base)subject motiondetail
LoRA alone0.81×1.80×
LoRA + motion dial +11.33×1.22×

At +1 you get more motion and more of the LoRA's look than the base model. +0.5 to +1 is the sane range for everyday use; above about 1.5, side effects appear.

Pika H3 Flex, with de-rope

The dials work unchanged on Pika H3 Flex, a 6-step LoRA for H3. De-rope finds stretches that move too fast for the frame rate, slows them, re-renders and maps the clip back to real time.

Four panels: base H3 at 25 steps, and Pika plus de-rope at dread 0, +0.5 and +1
1280×704, 141 frames, seed 42, one RTX PRO 6000 Max-Qtimemotion (px/frame)sharpness
MiniMax H3 base, 25 steps, no de-rope326 s2.25348
Pika + de-rope, motion +0.5, dread 0393 s2.44477
Pika + de-rope, motion +0.5, dread +0.5370 s2.56473
Pika + de-rope, motion +0.5, dread +1369 s2.58445

Motion: camera-removed optical flow. Sharpness: variance of the Laplacian (higher is crisper). One take each. Individual clips: Hugging Face examples.

Villainy pack

Eight evil flavours, each its own direction: sinister, creepy, cold, unhinged, seductive, corrupted, dread and impish. +1 to +2 is the sweet spot.

Library scene: base, dread, creepy and sinister at +2

New: the Dial Rack, time curves and a de-rope switch

Dials now live in a Dial Rack (in ComfyUI-MAINodes): any number of dials on one model, with a map, an interaction matrix and a wheel that show what they do to each other. The rack is order-independent, and it also works on MOSS-Image (Krea 2 with limits).

The Dial Rack with four dials, a 2D map with useful and overcooked rings, and an interaction matrix
One rack, four dials. The map shows each dial's useful and overcooked range; the matrix shows who reinforces or cancels whom, and the bars show who pushes.
The influence wheel: each dial as a layer over fourteen probe axes such as motion, light, colour and mood
The influence wheel reads each dial against 14 probe axes (motion, light, colour, mood, voice and more). Labels are hypotheses, and the readout under the wheel shows how much of each dial the 14 axes don't explain (about half, on average).

Change a dial over the clip, inside one generation

Draw a strength curve with the mouse: click to add a point, drag to move it, double-click to delete, snap to seconds or to the beat. The dial switches on and off during a single generation, with no second pass. Colour and style dials switch within a fraction of a second (0.1 to 0.2 s in our tests); lighting dials ramp over about a second and a half.

The time-curve editor: a keyframe line from 0 to 1 over a 5-second clip with a seconds grid
The curve editor on a 5-second clip: off until 0.8 s, then ramping up to full at 4.3 s, matched to the prompt's timings.

A charge that builds, de-roped

Time curves run through the de-rope pass too. A hold-map link maps the curve through the stretched stage-2 clip, so the ramp lands at the same real moment (without it, it landed 0.3 to 0.5 s early). In this scene the dial ramps up with the charge and peaks with the prompt's second marker. A switch turns the whole de-rope stage off: off took 75 s and gave pass 1 unchanged; on took 330 s.

All four de-roped, 1280×704, seed 42, the same prompt. Top left: no dial. Top right and bottom left: a space-warp dial ramping to +2.5 and +4. Bottom right: a psychedelic dial at +2.5. Pika H3 Flex, detail LoRA and motion +0.5 on every clip.

Alpha. Strengths are starting points measured on Pika H3 Flex's 6-step schedule, mostly one seed each. A dial can leak into other qualities (a "psychedelic" dial also brings rave outfits at +2.5). The Dials guide, lessons and roadmap list what we know.

Get started

  1. Install the nodes (no extra dependencies):
    cd ComfyUI/custom_nodes
    git clone https://github.com/matlowai/ComfyUI-MAINodes
  2. Copy dial files from Hugging Face into ComfyUI/models/loras/dials/.
  3. Load examples/dials/dials_simple_pika_derope.json, pick your model files, write a prompt, drag a slider and queue. De-rope is one switch on the same node.

Needs MiniMax H3 in ComfyUI (Comfy-Org repack). The guide walks through strengths, making your own dials from prompts or pictures, time curves and de-rope. Want only a couple of sliders? The original ComfyUI-Dials (Load / Apply / Make Dial, and its dials_studio_h3.json and dials_pika_h3_flex*.json workflows) still works and reads the same dial files.