arkennemasis fal · MiniMax H3 Max Styles VHS · $0.08/s
Tape damage you can dial, from subtle to unwatchable
- image
- video
- video_path
- seed
- info
Analogue-looking footage, with the damage as a setting
Most VHS-look attempts are a post-process: generate something clean, then smear a grain and a chroma-shift over it. This endpoint generates the tape look as part of the generation - 768p video and audio with VHS styling applied automatically, and a damage_level dropdown that decides how far gone the tape is.
That dropdown is the reason it's worth a dedicated node. light gives subtle analog noise, medium (the default) gives visible damage, and heavy adds strong tracking errors and distortion. You pick the era and the wear in one go instead of guessing at a grain node and hoping.
Where it's genuinely useful: music videos, "found footage" horror, anything set in a decade with a camcorder in it, and that perpetual request for a clip that looks like it was recorded off broadcast. What it's not is a clean-up tool - there's no de-VHS direction here.
$0.08 per second at 768p, audio included. Five seconds $0.40, fifteen $1.20.
Inputs that matter
- prompt - scene, action, camera and sound. The style and the tape damage are applied for you.
- damage_level -
light,medium(default),heavy. Start atlightand step up: heavy is a look, but it eats a lot of the picture, and it's harder to judge whether the underlying generation was any good. - image - optional first frame. The tooltip's tip is specific to this style: use a 4:3 image for the classic VHS frame. That's the aspect the format actually was, and it does more for believability than any amount of added noise.
- duration - seconds, default 5 (5–15 supported).
- aspect_ratio -
21:9,16:9(default),4:3,1:1,3:4,9:16; ignored when an image is supplied. - seed -
-1by default, and worth setting, because with this much texture applied you'll want to reproduce a specific take.
Plus the pack's guards on every fal node: max_cost_usd (default $20, evaluated before upload so a run over your cap costs nothing), reuse_identical_run (identical inputs come back from disk instead of fal), extra_json, max_concurrent (default 1 paid fal call at a time across the graph).
Outputs
video (VIDEO - into SaveVideo, PreviewVideo, or Video Assemble), video_path, seed and info with the request id, the estimated cost, the saved files and fal's raw response.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install -r comfyui-arkennemasis/requirements.txt
Restart ComfyUI, then it's under arkennemasis/fal/Video/MiniMax with the other style nodes. Key line in the .env beside run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Heavy damage hides a bad generation. If the motion was weak, heavy makes it hard to tell - for you and for anyone giving feedback. Judge the clip at light first.
16:9 default fights the aesthetic. The default aspect ratio is widescreen because the endpoint's default is; VHS wasn't. Choose 4:3, or feed a 4:3 frame, if the point is the format.
Per-second pricing makes experimentation linear. Every attempt at a 15-second clip is triple a 5-second one. Do the look test short.
There's no undo. This endpoint only goes one way - tape-styled generation. If you wanted the same shot clean as well, run the plain H3 Max text-to-video node alongside it and keep both.
Stacks don't compose the way you'd hope. Adding a film-grain or chromatic-aberration node after generation can be nice, but the endpoint has already done the era's colour response; over-processing this look goes to "broken video file" fast.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the scene, action, camera and sound. VHS style and tape damage are applied automatically. | |
| damage_level | COMBO | medium | Tape wear: light adds subtle analog noise, medium adds visible damage, and heavy adds strong tracking errors and distortion. |
| duration | INT | 55–15 | Requested video duration in seconds. |
| aspect_ratio | COMBO | 16:9 | Video aspect ratio for text-only generation. Ignored when image_url is provided. |
| seed | INT | -1-1–2147483647 | Random seed. Omit to choose one automatically. -1 leaves it to the model. |
| imageopt | IMAGE | Optional first-frame image. Use a 4:3 image for the classic VHS frame; the image's aspect ratio determines the output canvas. | |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap. |
| reuse_identical_runopt | BOOLEAN | true | If these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings. |
| extra_jsonopt | STRING | Advanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally. | |
| max_concurrentopt | INT | 11–32 | How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| seed | INT | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |