arkennemasis fal · Topaz Upscale Video Precision · $0.01-0.06/s
Ten cents per ten seconds to not repaint your footage
- video
- video
- video_path
- info
Every generative upscaler in this ecosystem has the same failure mode: it invents. Detail that wasn't there, faces that are almost right, texture where the source had mush. Sometimes that's great - you're rescuing a render you can't re-render. When the source is real footage, it's a problem. Topaz's precision models are the other approach: non-generative enhancement, up to 4x, staying faithful to what was actually filmed.
That's the whole pitch, and the price is small enough to make it a default: $0.10 per 10 seconds at 720p, $0.20 at 1080p, $0.60 at 4K for the standard precision models. A one-minute clip upscaled to 1080p costs about eighty cents. For comparison, Topaz is the paid tool the open-source crowd benchmarks against constantly, and this node is that tool as a per-use call instead of a subscription.
Picking a model
The model dropdown is where the actual decision lives, and the tooltip is a decent map: Proteus fits most real-world footage, Proteus Natural is a softer variant (2x only), Iris recovers faces, Dione deinterlaces legacy or interlaced sources, Artemis denoises and sharpens degraded footage, Gaia refines high-quality footage and CG, Gaia 2 upscales animation at 2x, Rhea goes after maximum fine detail with an internal 4x pass, and Theia gives you manual detail/fidelity control.
For archive work - VHS rips, old camcorder footage, anything with combing - Dione is the one people forget exists. For animation, Gaia 2. For a modern render, Proteus and leave it.
The settings
upscale_factor runs 1 to 4 and doubles width and height at 2.0. target_fps is -1 by default, which keeps the source rate; set it to something else and frame interpolation turns on, which is billed as more output and is a bigger deal than it sounds - interpolated frames are generated, so that's where a faithful upscale starts adding invented content.
Then a row of five knobs that all default to -1, meaning "leave it to the model": compression (artifact removal), noise (noise reduction), halo (halo reduction), grain (film grain, 0–0.1), and recover_detail (higher keeps more of the original). You mostly don't touch these. If an upscale comes back looking plastic, drop noise a notch; if it's smearing fine texture, raise recover_detail.
H264_output defaults to off, which means H265. Turn it on if the video is going somewhere that won't play H265 - this is the most common "the file is fine but my editor/phone/browser hates it" moment in this pack.
Outputs: video (VIDEO, wire it to a save or the pack's assembly nodes), video_path, and info with the request id, cost estimate, saved files and fal's full answer. Results land in output/fal/.
Pack plumbing: max_cost_usd (default $20), reuse_identical_run, extra_json, max_concurrent (1 = one paid fal call at a time across the run).
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx
Manager → arkennemasis. Then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env next to run_nvidia_gpu.bat, then restart. The node appears under arkennemasis/fal/Video/Topaz.
Worth knowing
- Cost scales with output resolution, duration and frame rate, not input size - so a 4x upscale of a 240p clip to 4K is priced like any other 4K job. Set
max_cost_usdlow while you're experimenting. - Frame interpolation is a content change, not a sharpening pass. It's the setting most likely to make "precision" not apply.
reuse_identical_runis on by default. Changingmodelorupscale_factorchanges the inputs and triggers a real run; changing something downstream doesn't, and you'll get the old file back.- If you have a local GPU and the source is already decent, the open alternatives (SeedVR2, NVIDIA's RTX 2-pass) are worth a look before you pay per clip - Topaz wins on convenience and on legacy-footage presets, not on being the only option.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | URL of the video to upscale | |
| model | COMBO | Proteus | Precision (non-generative) enhancement model. Proteus fits most real-world footage; Proteus Natural is a softer variant; Iris recovers faces; Dione deinterlaces legacy/interlaced sources; Artemis denoises and sharpens degraded footage; Gaia refines high-quality footage and CG (Gaia 2 upscales animation at 2x); Rhea maximizes fine detail via an internal 4x pass; Theia gives manual detail/fidelity control. |
| upscale_factor | FLOAT | 2.001–4 | Factor to upscale the video by (e.g. 2.0 doubles width and height) |
| target_fps | INT | -1-1–60 | Target FPS for the output. Frame interpolation is enabled only when this differs from the source FPS. -1 leaves it to the model. |
| compression | FLOAT | -1.00-1–1 | Compression artifact removal level (0.0-1.0). Default varies by model. -1 leaves it to the model. |
| noise | FLOAT | -1.00-1–1 | Noise reduction level (0.0-1.0). Default varies by model. -1 leaves it to the model. |
| halo | FLOAT | -1.00-1–1 | Halo reduction level (0.0-1.0). Default varies by model. -1 leaves it to the model. |
| grain | FLOAT | -1.00-1–0.1 | Film grain amount (0.0-0.1). Default varies by model. -1 leaves it to the model. |
| recover_detail | FLOAT | -1.00-1–1 | Recover original detail level (0.0-1.0). Higher values preserve more original detail. -1 leaves it to the model. |
| H264_output | BOOLEAN | false | Whether to use H264 codec for output video. Default is H265. |
| 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 (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |