Downloads · 30 days
0
Smite79/MiniMax-H3-Tape-FX
MiniMax-H3-Tape-FX is a machine learning model from Smite79. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
One node. Three dead formats. Infinite damage.
Downloads · 30 days
0
Access
Public
Updated Aug 23, 2026
Repo size
22.7 MB
Likes
5
Public
Click a slice to open those files.
.png12.2 MB · 54%
From the Hugging Face model README
One node. Three dead formats. Infinite damage.
MiniMax-H3-Tape-FX is a single mega-node for ComfyUI that degrades your images and video batches with authentic analog-tape playback artifacts: VHS, BetaMax and LaserDisc — including the worn out tape look, tracking errors, dropout, creases, ghosting, head-switch noise, vertical roll and a period-correct VCR on-screen display.

Left to right: original, VHS (worn out, with OSD), BetaMax (lightly worn), LaserDisc (worn out).
mint through destroyed, every slider always availablePLAY ▶ / blinking REC ●, tape counter and date stamp, drawn with a built-in 5x7 pixel font (no font files needed)| VHS — worn out | VHS — destroyed |
|---|---|
![]() | ![]() |
| BetaMax — lightly worn | LaserDisc — worn out |
|---|---|
![]() | ![]() |
Worn-section simulation (animated) — the tape plays fine, then hits the damaged patch at ~0:01, then recovers:

cd custom_nodes/MiniMax-H3-Tape-FX folder there:
git clone https://github.com/your-name/MiniMax-H3-Tape-FX
MiniMax-H3-Tape-FX).IMAGE through it — a Load Image, your sampler output, or an AnimateDiff / video batch.osd_fps to your frame rate so the counter and REC blink stay in sync.An example workflow (Load Image → MiniMax-H3-Tape-FX → Save Image) is in examples/minimax_h3_tape_fx_workflow.json — drop it onto the ComfyUI canvas.
| VHS | BetaMax | LaserDisc | |
|---|---|---|---|
| Sharpness | soft (~240 lines) | sharper (~270 lines) | sharpest analog (~420 lines) |
| Chroma bleed | heavy | moderate | light |
| Tape noise / flicker | high | medium | low |
| Dropout style | long white streaks | shorter streaks | "laser rot" speckles |
| Head-switch bar | yes | yes | no (no tape transport) |
| Tape creases | yes | yes, milder | never (optical media) |
| Tracking errors | frequent | steadier (Beta tracked better) | mild timebase jitter |
| Ghosting | moderate | light | strong crosstalk echo |
| Black level | lifted grays | slightly lifted | near-black |
Even a mint VHS stays soft and bleeds a little — that's the format's bandwidth, not damage. LaserDisc never creases and has no head-switch bar, but old discs rot: sparkle dropout and crosstalk ghosts instead.
Presets are a global damage multiplier applied on top of the damage sliders (mint 0.08x, lightly_worn 0.4x, worn_out 1.0x, destroyed 1.9x, custom 1.0x). The look sliders (softness, bleed, scanlines) are never scaled by presets — a mint VHS is still a soft VHS.
Tapes damage in places, not uniformly. Set wear_start / wear_end (frame range, 4-frame ramps) and wear_boost, and damage spikes inside that range: more tracking chaos, heavier dropout, extra noise — then the tape plays on as before. Leave wear_end <= wear_start to disable.
| Option | What it does |
|---|---|
osd_mode | play (▶ PLAY), rec (blinking ● REC), or none — top-left |
osd_counter | Tape counter h:mm:ss top-right; osd_counter_start sets the starting value in seconds |
osd_custom_text | Your stamp bottom-right — e.g. DEC 24 1996, SP, CHR-LOCK |
osd_color | white (classic VCR), teal (camcorder), amber (date stamp) |
osd_scale | Pixel size of the OSD font — raise it for 2K/4K images |
osd_fps | Frame rate used by the counter and the REC blink |
The OSD uses a built-in 5x7 pixel font supporting A-Z 0-9 : . - / ( ) ' plus the ▶ and ● symbols (lowercase is converted to uppercase; unsupported characters become spaces).
| Parameter | Type | Description |
|---|---|---|
format | combo | vhs / betamax / laserdisc |
preset | combo | Global damage level (see above) |
| Parameter | Default | Description |
|---|---|---|
tracking | 0.35 | Tracking error bands: horizontal tearing waves that crawl over the image |
dropout | 0.30 | Signal dropout: white streaks (tape) or rot speckles (LaserDisc) |
creases | 0.25 | Tape creases: diagonal bright kink lines that persist for a while |
ghosting | 0.30 | Frame ghosting / crosstalk: previous frame bleeds through |
head_switch | 0.45 | Head-switching noise bar at the bottom (VHS/BetaMax) |
vertical_roll | 0.15 | Vertical hold failures; low values give gentle vertical jitter |
tape_noise | 0.35 | Analog grain: luma + chroma noise |
flicker | 0.25 | Slow brightness instability |
| Parameter | Default | Description |
|---|---|---|
luma_softness | 0.50 | Video bandwidth — how soft the picture is (scaled by format) |
color_bleed | 0.50 | Composite chroma smear and oversaturation |
scanlines | 0.35 | Interlaced line structure (every other line darker) |
| Parameter | Default | Description |
|---|---|---|
wear_start / wear_end | 0 / 0 | Frame range of the bad patch (disable: end <= start) |
wear_boost | 0.60 | How much worse it gets inside the patch |
See the table above.
| Parameter | Description |
|---|---|
seed | All randomness derives from it — same seed, same damage, CPU or GPU |
osd_scale to keep the OSD proportional.MiniMax-H3-Tape-FX/
├── __init__.py # ComfyUI entry point
├── minimax_h3_tape_fx.py # The node (pure torch + numpy)
├── examples/
│ ├── minimax_h3_tape_fx_workflow.json
│ └── demo/ # All images in this README
└── LICENSE # MIT
MIT — see LICENSE.