Enhance: upscale a video
A two-step workflow: pick the source and output size, then shape the pipeline with guided cards. This page walks through both steps, chapters and previews, the Activity screen, and every parameter the stage settings expose.
Step 1 · Source & output size
Drag a video in (MP4, MOV, AVI), browse, or paste a path. The Source card fills with the clip's specs, and the Output size card asks the one question that shapes everything else: Fixed 4× (the models' native scale), a Target from the resolution ladder (720p → 8K, or exact custom dimensions), or Same resolution (clean up without upscaling). Options that would be slow on your machine carry an amber warning dot — the app probes your hardware and warns above 1080p on lighter machines, above 4K on heavy ones.
Interlaced sources are detected on load. The specs gain a Scan row (for example Interlaced (tt)) and a note below the card explains that a deinterlace pass runs automatically during decode, so every model works on clean progressive frames. There is nothing to configure; the output keeps the source frame rate.
To trim or crop first, click Edit video: the crop / clip / rotate / flip tools open right over the preview and write a new source file.
For long videos (over a minute by default) the app suggests Chapters: scene detection splits the source into segments you can include or exclude, and each chapter runs as its own resumable job. When every chapter finishes, the app stitches the pieces back together. Stitching runs in the main process, so you can switch screens or keep working while it completes; the status line under the settings reads Chapters: N/M complete…, then stitching, then Stitched with the output path. The result is the final output (with the original audio when all chapters were included) plus one full-length file per intermediate stage, named <output>_<suffix> just as a normal run leaves them, so Refine can re-blend from any stage. The per-chapter pieces are deleted afterwards. A failed chapter can be resubmitted alone instead of restarting the whole video.
Step 2 · Settings
One page of guided cards, with the resulting pipeline summarized in the sidebar. Enhancement picks the engine of the pass: Diffusion (Regenerate-Q generative detail, with a Refocus pre-pass by default) or Express (Refocus only, fastest); at same resolution it can also be turned off entirely to run interpolation or denoise alone. Frame interpolation is one click (Off / ×2 / ×3 / ×4). Refocus controls the pre-pass and how a non-4× target is reached (downscale the output, or downscale the input first). Grain & noise restores the source's real grain into the output and can add a denoise stage. Blend mixes the source back in to keep generated detail grounded. Output sets format, container, quality, and destination.
The sidebar is also an editor: drag stages to reorder them, remove one with ✕, or add stages from the insert control — the cards and the sidebar always stay in sync. Grain restore and blend run as a single Postprocessing pass after the model stages. Click any stage for its advanced settings (engine selection, compute units, tile overlap, and everything in the reference below); the Output card's All encoding options opens the full encoder and clipping modal.
Before committing to a long run, click Create preview: the exact pipeline runs on a dozen frames (pick the count and start frame) and the result opens in a player — the cheap way to catch a configuration problem before an overnight job. The gear in the top bar opens Workflow settings (resolution ladder, default output size, default enhancement / grain / blend values, chapter thresholds), and saved pipelines restore a whole configuration in one click.
Click Start job (or Start N chapter jobs) and the app switches to the Activity screen. Multi-stage jobs keep their intermediate files (suffixes like _stage1) alongside the final output. They appear in the project afterwards, and the Refine workspace can load them — including re-blending stage outputs at a different strength later.
Watch it run
Activity shows the engine connection, the job queue with per-stage progress (Decoder → Preprocessor → Inferencer → Postprocessor → Encoder), and live system usage. Click any gauge for an expanded view. Stop Engine and Start Engine are here too.
Parameter reference
Every setting the stage cards expose, by category. Values marked combo accept custom strings (raw FFmpeg names) beyond the listed options. Rows are filtered to the platform selected in the sidebar.
Model & engine
| Setting | Values | Default | What it does · when to change it |
|---|---|---|---|
| Engine | Auto · manual pick | Auto | Which compiled engine runs the stage. Auto picks the best installed engine for your video's shape. Override it only to force a specific tile size you built. |
| Diffusion model | Regenerate-Q · Standard | Regenerate-Q | Which generative upscaler the diffusion stage uses. Regenerate-Q is the default: it streams and uses moderate memory. Standard (beta) produces the most detail but needs much more compute and memory. |
| Compute units | ALL · CPU_ONLY · CPU_AND_GPU · CPU_AND_NE | per model | Which Apple Silicon units run inference. ALL runs dual GPU and Neural Engine inferencers where supported, which is fastest. Pick CPU_AND_GPU or CPU_AND_NE to keep one unit free for other work. |
| Minimum tile overlap W / H | px (4×-upscaled) | 0 | Extra overlap between Regenerate tiles, in output pixels. Raise it (for example 64 to 128) if you can see tile seams in the output. 0 uses only the engine's natural overlap. |
| Frames per processing unit | int | engine | Frames the Refocus engine batches per unit. Change only when tuning memory use against throughput. |
Regenerate / Regenerate-Q
| Setting | Values | Default | What it does · when to change it |
|---|---|---|---|
| Dtype | float16 · bfloat16 · float32 | Auto | Compute precision for the diffusion stage. float16 is the fast default. bfloat16 and float32 trade speed for numerical headroom if you see color banding or artifacts. |
| VAE encoder / Transformer / VAE decoder units | ALL · CPU_AND_GPU · CPU_AND_NE | CPU_AND_GPU | Per-component compute units. ALL loads dual GPU and Neural Engine copies. With concurrency on, the app routes encode/decode to the Neural Engine and the transformer to the GPU. |
| Concurrent | on · off | on | Regenerate-Q: run the encoder/decoder (Neural Engine) concurrently with the transformer (GPU). Usually faster. Turn off only when diagnosing artifacts. |
| Concurrent max inflight | int | 12 | Cap on processing units in flight across the encode, transform, and decode pipeline. Lower it if memory pressure climbs on long clips. |
| Disk-backed state | on · off | on | Regenerate-Q stores per-tile recurrent state in memory-mapped files so long, tiled jobs do not exhaust RAM. Keep this on. |
| Offload to disk / Resume | on · off | off | Regenerate (Standard): write decoded tiles to disk as the job runs, so a crashed or interrupted job can resume from its checkpoint instead of starting over. The app's crash recovery relies on this. |
| SR noise step | int | 399 | Scheduler noise step for Regenerate. Controls how aggressively detail is re-generated. The default matches the trained model; small decreases stay closer to the input. |
Frame interpolation & denoise
| Setting | Values | Default | What it does · when to change it |
|---|---|---|---|
| Interpolation factor | 2, 3, 4… | 2 | Frame-rate multiplier: each input pair yields k−1 new frames, so 2 doubles the frame rate. Higher factors amplify any motion errors; 2 works best for most footage. |
| Denoise strength (σ) | 0–255 | 30 | Noise level the denoiser assumes. Higher removes more noise but also fine texture. 30 matches the trained model. Raise it for heavy low-light grain, lower it for lightly noisy sources. |
| Compute units | ALL · CPU_AND_GPU · CPU_AND_NE | ALL | ALL runs dual GPU and Neural Engine inferencers for both VFI and Denoise, which is fastest. The other options run a single inferencer on that unit pair. |
| Frames per processing unit | int | 40 | VFI decode-window size. Change only when tuning memory on very high-resolution inputs. |
Postprocessing (grain & blend)
| Setting | Values | Default | What it does · when to change it |
|---|---|---|---|
| Grain restore strength | 0–200% | 50% | Isolates the actual grain from your source with an edge-preserving separation, scales it to the output, and merges it back after all other processing. 100% restores the source's full grain; values above 100% overdrive it for a heavier look. Multi-stage chains restore from the original source, not an intermediate render. |
| Blend strength | 0–100% | 25% with diffusion | Blends the source back into the enhanced output, dialing generated detail toward the original. A light blend (15–30%) keeps faces and textures grounded on real footage. Defaults to 0% when no diffusion stage runs. |
| Blend source | Original · Refocus stage | Which stream blends in. With both models in the pipeline, the Refocus stage's output is available as a sharper alternative to the original. With frame interpolation upstream, the interpolated stream is used so frame counts match. |
Output encoding
| Setting | Values | Default | What it does · when to change it |
|---|---|---|---|
| Codec | combo (any FFmpeg encoder) | hardware HEVC | The video encoder. The list covers the common options (H.264/H.265 software and hardware, VP9, AV1, ProRes) and accepts any FFmpeg encoder name. ProRes requires the MOV container. H.264 tops out at 4096 px per side — above 4K the app steers you to H.265 or another codec. The Standard (LGPL) bundle does not include x264/x265; the app uses Apple VideoToolbox hardware encoders instead. |
| Container | mp4 · mov · mkv · avi · webm | mp4 | Output file format. Use MOV for ProRes, MP4 for broad compatibility. |
| Quality (CRF) | 0–51 | 16 | Constant-rate-factor: lower is higher quality and larger files. 16 (the workflow default) is near-lossless; 18–22 balances size and quality; 23+ is compact. |
| Preset | ultrafast … veryslow | medium | Software-encoder speed/quality trade-off. Slower presets compress better at the same CRF. Hardware encoders mostly ignore it. |
| Pixel format | yuv420p · 10-bit · rgb24 … | source | Chroma layout and bit depth of the output. yuv420p plays everywhere; the 10-bit formats preserve gradients on HDR and log footage. |
| Copy audio | on · off | on | Copies the input's audio into the output without re-encoding, trimmed to any clip range. Ignored for image sequences. |
| Color tags | space · primaries · TRC · range | source | Advanced: override the color metadata written to the file (for example bt709, bt2020, PQ/HLG). Set these only when your pipeline needs explicit tags. |
| Image sequence | png · jpeg · tiff | png | Write one image per frame instead of a video, with bit depth (8/16), alpha, JPEG quality and subsampling, and a filename pattern like frame_%05d.png. Used for VFX round-trips. |
Scaling, clipping & finishing
| Setting | Values | Default | What it does · when to change it |
|---|---|---|---|
| Upscale factor | 2 · 4 | 4 | Overall output scale. The models are 4× natives. The Effective output readout in the stage card shows the resulting resolution as you change it. |
| Input downscale | factor or W×H | Shrink the source before inference. Useful to clean very noisy high-resolution sources, or to hit an exact engine tile. Combined with a 4× model, a 0.5 input downscale yields a net 2× output. | |
| Output downscale | factor or W×H | Shrink the upscaled result after inference, for example render 4× for quality and deliver 1080p. | |
| Clip start / end frame | frame numbers | Process only part of the input. Useful for test slices before running a long job. Audio is trimmed to match. | |
| Overlap per inference batch | frames | model-specific | Temporal overlap between batches (Regenerate defaults to 8, VFI to 1). More overlap improves temporal consistency at batch boundaries at some speed cost. |
| Tile feather | on · off | on | Linearly blends overlapping tile regions at assembly instead of hard-cropping. Softens visible tile seams at no inference cost. Keep this on. |
| Sharpen input / output | factor + radius | off | Optional unsharp passes before or after inference (for example factor 0.5, radius 50). A light input sharpen can help very soft sources; use output sharpening for taste adjustments. |