04 · Enhance

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.

Source loaded: specs on the right, and the output-size decision — Fixed 4×, a target from the ladder, or same resolution.

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.

Settings: guided cards on the left, the derived pipeline — including the Postprocessing pass — on the right.

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.

Activity: queue on the left, system telemetry on the right.
While a Regenerate-Q job runs, the visible app window competes with inference for the GPU. The app can collapse to a compact stats window automatically (Settings → Application → Minimize while upscaling). This makes a large difference on heavy jobs.
The compact stats window: per-stage progress while the GPU stays dedicated to the job. Click the expand icon (or the dock icon) to bring the app back.

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

SettingValuesDefaultWhat it does · when to change it
EngineAuto · manual pickAutoWhich 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 modelRegenerate-Q · StandardRegenerate-QWhich 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 unitsALL · CPU_ONLY · CPU_AND_GPU · CPU_AND_NEper modelWhich 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 / Hpx (4×-upscaled)0Extra 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 unitintengineFrames the Refocus engine batches per unit. Change only when tuning memory use against throughput.

Regenerate / Regenerate-Q

SettingValuesDefaultWhat it does · when to change it
Dtypefloat16 · bfloat16 · float32AutoCompute 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 unitsALL · CPU_AND_GPU · CPU_AND_NECPU_AND_GPUPer-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.
Concurrenton · offonRegenerate-Q: run the encoder/decoder (Neural Engine) concurrently with the transformer (GPU). Usually faster. Turn off only when diagnosing artifacts.
Concurrent max inflightint12Cap on processing units in flight across the encode, transform, and decode pipeline. Lower it if memory pressure climbs on long clips.
Disk-backed stateon · offonRegenerate-Q stores per-tile recurrent state in memory-mapped files so long, tiled jobs do not exhaust RAM. Keep this on.
Offload to disk / Resumeon · offoffRegenerate (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 stepint399Scheduler 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

SettingValuesDefaultWhat it does · when to change it
Interpolation factor2, 3, 4…2Frame-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–25530Noise 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 unitsALL · CPU_AND_GPU · CPU_AND_NEALLALL 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 unitint40VFI decode-window size. Change only when tuning memory on very high-resolution inputs.

Postprocessing (grain & blend)

SettingValuesDefaultWhat it does · when to change it
Grain restore strength0–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 strength0–100%25% with diffusionBlends 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 sourceOriginal · Refocus stageWhich 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

SettingValuesDefaultWhat it does · when to change it
Codeccombo (any FFmpeg encoder)hardware HEVCThe 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.
Containermp4 · mov · mkv · avi · webmmp4Output file format. Use MOV for ProRes, MP4 for broad compatibility.
Quality (CRF)0–5116Constant-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.
Presetultrafast … veryslowmediumSoftware-encoder speed/quality trade-off. Slower presets compress better at the same CRF. Hardware encoders mostly ignore it.
Pixel formatyuv420p · 10-bit · rgb24 …sourceChroma layout and bit depth of the output. yuv420p plays everywhere; the 10-bit formats preserve gradients on HDR and log footage.
Copy audioon · offonCopies the input's audio into the output without re-encoding, trimmed to any clip range. Ignored for image sequences.
Color tagsspace · primaries · TRC · rangesourceAdvanced: override the color metadata written to the file (for example bt709, bt2020, PQ/HLG). Set these only when your pipeline needs explicit tags.
Image sequencepng · jpeg · tiffpngWrite 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

SettingValuesDefaultWhat it does · when to change it
Upscale factor2 · 44Overall output scale. The models are 4× natives. The Effective output readout in the stage card shows the resulting resolution as you change it.
Input downscalefactor or W×HShrink 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 downscalefactor or W×HShrink the upscaled result after inference, for example render 4× for quality and deliver 1080p.
Clip start / end frameframe numbersProcess only part of the input. Useful for test slices before running a long job. Audio is trimmed to match.
Overlap per inference batchframesmodel-specificTemporal overlap between batches (Regenerate defaults to 8, VFI to 1). More overlap improves temporal consistency at batch boundaries at some speed cost.
Tile featheron · offonLinearly blends overlapping tile regions at assembly instead of hard-cropping. Softens visible tile seams at no inference cost. Keep this on.
Sharpen input / outputfactor + radiusoffOptional 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.
The deeper Advanced group (pipeline queues, assembly devices, float32 toggles, debug dumps) is for diagnostics. Leave those at their defaults unless support asks you to change them while investigating an issue.