Playback keys
Media Player mode only for the transport keys — live capture has no position to seek or pause. The chrome keys (↑ / F1 / Esc) and N work in video processor mode as well. Every binding is an ordinary key inside the Unplugged window: nothing is captured while another app has focus, so Unplugged never interferes with anything else running on the machine.
| Key | Action |
|---|---|
| Space / Enter | pause / resume |
| ← / → | back / forward 10 s; Shift = 60 s. While paused, one frame per press |
| PgUp / PgDn | previous / next chapter |
| Home / End | start / end of the title |
| 0 – 9 | jump to 0 % – 90 % of the title |
| ↑ or F1 | show / hide the full chrome |
| + / − or ↓ | volume up / down |
| M | mute |
| N | NLS on / off (same as the transport-bar button) |
| S | stop back to the library |
| Ctrl+S | save the current frame as PNG (paused only) |
| Esc | close settings → stop back to the library → recover the chrome, one layer per press |
| Alt+F4 | asks before closing |
How to get started
Quick config
- Press F1 to open the live status and settings panels (or Up while something is playing); Esc closes them again.
- Convert to SDR — On.
- SDR display nits, Static nits (max) and Display black (nits) — set to your display's calibrated, measured values.
- The user trims — Exposure, Shadow detail, Contrast — live on the HDR tab.
- Leave the Zion tab settings on Auto where applicable.
- Calibration LUT files load from Output → Display calibration.
- Frame captures come from Output → Save frame as PNG (asks where), or Ctrl+S while the picture is paused, which writes straight to
Pictures\Unplugged\<date>\frame_NNNN.png— one folder per day, numbered so captures never overwrite each other. The shortcut does nothing while playing: pause first so the frame is the one you are looking at.
Why that order — three stages, in sequence:
- Calibration settings first. The tone curve maps HDR into your display's measured range. A wrong white, black or peak means every downstream decision is made for a display you don't own. These numbers are set once per display and never used for taste. If you have a measured calibration LUT, load it at this stage.
- Zion grade second. With Mode: Auto and the Band controller On, the grade's scene model and closed loop do their work — and they correct what calibration measured, so they only make sense after stage 1.
- Trims last. Exposure, Shadow detail and Contrast are the final taste layer, and the only controls to touch day-to-day. Trim before calibrating and you tune against a moving baseline — every stage-1 or stage-2 change rewrites what "right" looks like.
How the panel works
- Open the settings panel and pick a tab on the left icon rail: ▶ Playback · ⬡ Source · ◑ HDR · ✦ Zion · ▣ Output · ≡ System.
- Each tab is split into sections. Sections are an accordion: click a header to open it; only one section is open at a time. A tab with a single section (Source, System) is always open.
- Toggles flip ON/OFF with one click. Option rows (
‹ value ›) cycle through their choices — click the right side to advance. Sliders are dragged on the bar; hover the bar and use the mouse wheel for one step of that row (1 on whole-number rows; the row's own increment on decimals — 0.01 on most, 0.05 on NLS Curve, 0.001 on Display black) — this is how you land on a measured value like 174 nits. With the panel focused, ←/→ move the row focus; ↑ stays the chrome toggle everywhere, including here. - Everything applies live to the running picture and is saved immediately — including Convert to SDR and the debug passthroughs, which reselect the converter/shader in place rather than rebuilding the pipeline.
- Your settings are plain text at
%LOCALAPPDATA%\Unplugged\s3_shell.ini. Every row writes itself there on first start, so you can back it up, or hand-edit a value a slider can't reach (likehdr.maxNitsabove 1000). - The Preset chip in the title strip keeps whole setups side by side — see Presets below.
Presets
A preset is a saved snapshot of the rows that describe the picture — tone curve and trims, the Zion grade, Output scalers, Geometry and non-linear stretch — plus the System switches that are not UI-only. It does not contain the Playback or Source tabs (see below). It is how you keep, say, a Projector setup and a Daylight TV setup side by side instead of re-tuning when the room or the display changes.
First start: the app creates five presets — Preset 1 … Preset 5 — and makes Preset 1 active. On an upgrade they are seeded from your existing settings, so nothing changes on screen; on a fresh install they start from the compiled defaults. Rename them as you like.
The active preset's name is shown in the title strip as Preset Name ▾. Click it to open the preset card.
| In the card | What it does |
|---|---|
| The list | Default first, then your presets alphabetically. Click a preset to switch to it — it applies immediately, and the card stays open so you can click through several to compare them on the same frame. |
| New | Asks for a name (pre-filled Preset 1, Preset 2…) and creates a preset that starts as a copy of the one you are using — tune once, name it, and it is yours from then on. |
| Rename | Same settings, new name. |
| Delete | Asks first. Deleting the preset you are on drops you back to Default. |
| Close (×) / click outside | Closes the card. Nothing is lost: custom presets save themselves (below). |
There is no Apply button: presets save themselves, so clicking one is the whole action, and switching while the card stays open is how you compare two setups against the same paused frame.
Default is read-only — and custom presets save themselves
Defaultis locked. Trying to change any picture row while it is active is refused — the control does not move — and a warning appears in the centre of the screen, "Default is read-only — Default is the locked baseline: picture changes are refused while it is active. Switch to a preset, or create one, to change anything.", which stays until you press OK (Enter or Esc also dismiss it). The N key behaves the same way. That is deliberate:Defaultis the compiled baseline, so what you see there is always repeatable. To start working, switch to a preset or create one with New — a new preset starts as a copy of the current values, so nothing is lost.- Exception — Playback and Source. The Playback and Source tabs are never locked and never part of a preset. Choosing the audio mode, an input device, rescanning ports or running first-time setup is a property of the machine and the session, not of a look — so it stays available on
Default, and a preset never drags the input along with it. - Exception — the display rows. SDR display nits, Static nits (max), Display black (nits), Convert to SDR and Output gamut describe the screen you calibrated, not a look, so they are never part of a preset. They can be changed at any time — on
Defaultor on any preset — the change applies to every preset, and it neither marks the preset dirty nor shows the popup. - Any preset of your own is live. There is no Save button: as soon as you change a row, the preset file is rewritten (about a third of a second later, so a slider drag lands once). The
*next to the name only means a write is still pending. - Your presets live at
%LOCALAPPDATA%\Unplugged\presets\<name>.ini— one plain text file each, alongside the bases3_shell.ini.
What a preset does not contain
Five rows describe the display you calibrated, not your taste, so they stay with the machine and switching presets never changes them — and, as above, they are always editable, even on Default:
SDR display nits · Static nits (max) · Display black (nits) · Convert to SDR · Output gamut
Also not part of a preset: the Playback and Source tabs (audio mode, input device, setup), the two UI-only rows on the System tab (context banner, auto-next), and the playback position. Those belong to the app and the session, not to a look. The other System switches (automatic update check, tray icon) are ordinary rows and do travel with a preset.
One behaviour worth knowing: the preset you last used is re-applied when the next picture comes up (the first play or capture after launch), after the base settings file has loaded. So a preset's value wins over a hand-edit you made in s3_shell.ini — change the row while that preset is active (it saves itself) or switch to Default first.
Playback (media files)
The Playback tab is dimmed and unreachable during live capture — its controls address the file-playing pipeline, which capture never builds.
Audio
| Setting | Choices | Default | What it does |
|---|---|---|---|
| Track | every audio stream in the file | first track | Picks the language/format. Names come from the file itself: "Deutsch TrueHD Atmos 7.1". |
| HD audio | Bitstream / PCM | Bitstream | Bitstream: the compressed audio (Dolby, DTS, TrueHD, Atmos) is passed untouched to your receiver, which decodes it and shows its logo. PCM: the PC decodes it first — use this if the receiver can't decode the format, or to hear everything through TV speakers. Bitstream is the shipped default: an AVR decodes its own formats better than a PC downmix. |
| Delay | −500…+500 ms | 0 | Intended for lip-sync correction. In this version the slider saves but nothing reacts to it yet — it has no effect. |
Subtitles
| Setting | Choices | Default | What it does |
|---|---|---|---|
| Track | Off / every subtitle stream | Off | Picks the subtitle track. Names keep the format in brackets — (SRT) etc. — because only text subtitles can be styled; bitmap ones (PGS, VobSub) are images and always look how the disc made them. |
Source (live capture)
One row per physical DeckLink input, plus three actions.
| Row | Shows | What it does |
|---|---|---|
| Port row | name + badge | Click to switch the player to that HDMI input. The active port gets ●. Badges: 🔒 HDR PQ = an HDR signal is locked and being carried, 🔒 Dolby Vision = a Dolby Vision source (the card cannot flag DV, so this is read from its signature — BT.2020 colours with an SDR range flag, and confirmed by the picture being a PQ base layer without static mastering metadata), 🔒 HDR HLG = HLG, ○ no signal = nothing is plugged in or the source is off, — unknown = signal present but not identified yet. |
| ⟳ Rescan inputs | — | Re-asks the card what is plugged in. Use after connecting a new device. |
| ✎ Rename inputs… | — | Names your ports ("Console", "Bluray") — the name is yours only; the underlying input is unchanged. |
| ▶ First-time setup… (restarts app) | — | Restarts the app into the setup wizard. Stops any playback. |
HDR tab
Everything here shapes how an HDR signal arrives on your display, plus a few post-processing tools. SDR display nits and the Display Target numbers are set once — they describe your display, not your taste — and day to day most people only touch Tone curve, Exposure and the taste sliders.
Tone Mapping
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Convert to SDR | On / Off | On | On: HDR video is tone-mapped into the normal (SDR) range this app renders. Off: the HDR signal is passed on for your TV itself to map — only sensible with an HDR-capable TV in HDR mode. When Off, everything else in this tab and the Zion tab stops mattering, because this app is no longer doing the picture. |
| SDR display nits | 25…400 | 80 | The measured SDR white luminance of your display — a calibration number like Static nits (max) below, never a taste knob. Enter your measured value (a TV in a bright room typically 100–200; a projector in the dark 40–80) and leave it there. What a wrong number does: declared below your measurement, the picture runs bright and the highlights pay — the shoulder clips sooner and sky detail goes first; declared above it, films render dark with headroom unused. Brightness without lying about your panel is what Exposure is for. |
| Tone curve | Unplugged / GT7 Adapt | Unplugged | How HDR's brightness range is squeezed into your display's. Unplugged — the house curve, and the safe choice for everything Dolby Vision: DV carries its own per-scene mastering and this curve respects it. GT7 Adapt — the house curve for HDR10/HLG, which blends the title's declared peak with what each scene measures. The taste trims below work on both; switching curve changes the Curve Settings dials shown. |
| Exposure | −5…+5 | 0 | A brightness dial that works before the tone curve, in thirds of a stop: ±1 = ±⅓ stop, ±3 = ±1 stop. Because it's pre-curve, the shoulder absorbs it — brightness without spending your highlights. The safest lever when a specific film looks dark or washed. |
| Shadow detail | −5…+5 | 0 | How much texture survives in the dark end. Positive spreads dark values apart — you see fabric weave, night-scene layout, object edges — while true black stays black (it is detail, not a brightness lift). Negative compresses blacks together, for a denser, more "filmic" shadow that hides crushed masters. Never greys the image. |
| Contrast | −5…+5 | 0 | A symmetric S-curve around mid grey: black, mid grey and white stay exactly where they are, everything between moves away from (positive) or toward (negative) them. Positive = more "pop"; negative = flatter, softer. If you want one dial to taste day-to-day, this is the safe one. |
| Output gamut | BT.709 (standard) / BT.2020 (wide) | BT.709 (standard) | The colour space delivered. 709 is what SDR (and effectively every TV's SDR mode) expects. BT.2020 keeps wide colour only for a display actually in HDR/wide-gamut mode — on a normal SDR pipeline it makes colours wrong. Leave on 709 unless you know exactly why you changed it. |
| Gamut capacity (709) | 0.20…1.00 | 1.00 | Active only with Output gamut = 709. Colours can look garish not when they exceed the gamut but when they sit exactly on its edge — the maximum for their lightness. This lands each colour at a fraction of its own distance to the edge: 1.00 = off; 0.55 is how much breathing room measured reference software leaves a deep-blue sky. Pale colours have long distances and stay untouched at any setting, so this can never "desaturate the whole film" — only edge-crowded blues/reds relax. |
| Highlight desat | 0…1 | 0 | A companion to the row above for the Unplugged curve: at higher brightness levels, pull saturation toward the level's own neutral point (hue preserved). Measured against reference renderers, 0.50 matches; 0 is off. Note: it runs inside the grade, so it needs Enable ML grade (Zion tab) on. |
Exposure, Shadow detail and Contrast are taste trims — they work the same on both tone curves. The Curve Settings section is the opposite: every row in it belongs to the GT7 Adapt curve, so the rail shows the section only while that curve is selected. On Unplugged the trims above are the whole adjustment surface, and no Curve Settings section appears at all.
Curve Settings (appears only for GT7 Adapt)
| Setting | Range | Default | What it does |
|---|---|---|---|
| Title peak (nits) | 100…4000 | 1000 | The content peak the curve squeezes from. Leave at 1000 unless you know the disc's MaxCLL. |
| Auto exposure | On / Off | Off | Solves the working peak from each scene's measured average instead of guessing (updates at scene cuts, never mid-shot). Use when a title looks consistently a third of a stop off. |
| Exposure target | 0.20…0.70 | 0.42 | With Auto exposure On: where the scene average should land (0 = black, 1 = white). |
| GT7 blend (ch<->UCS) | 0…1 | 0.6 | How much highlights keep their source colour: 0 = curve re-derives it, 1 = source colour returned intact. |
| GT7 chroma fade from | 0.3…2.0 | 0.98 | The level where that colour blend starts. Default leaves it a highlights-only move. |
| GT7 adapt to scene peak | 0…1 | 0.25 | How far the peak moves from Title peak toward the measured scene peak. Raise for sources without usable metadata (HDMI consoles, streaming apps). |
| GT7 desaturation | 0…1 | 0 | Colour pulled out of highlights only, in proportion to how hard they were compressed. Mid-tones and skin are untouched. |
| GT7 shoulder reach | 0.02…0.90 | 0.25 | Highlight headroom: lower = longer shoulder, more brightness band survives before detail merges to white; higher punches mid-highs but clips sooner. The first dial to turn down if explosions clip. |
| GT7 debug view | Off + 4 greyscale modes | Off | Diagnostic overlays of the curve's internals. Leave Off for watching. |
Display Target
These describe your TV/projector, not the content. Set once per display.
| Setting | Range | Default | What it does |
|---|---|---|---|
| Windows HDR | Do not change / On (fullscreen) / On / On/off (fullscreen) / On/off | Do not change | Whether this app toggles Windows' own HDR mode for the display when playing. Leave Do not change if you set HDR/SDR mode in Windows yourself; the others switch it for you at playback start (the "on/off" pair restores your previous state afterwards). |
| Static nits (max) | 10…1000 | 1000 | Your display's measured peak white in SDR mode. This is the destination the tone curve maps to — get it wrong and everything is wrong. Measured 174 on a projector? Type nothing: drag near it, then mouse-wheel over the bar, 1 nit per click. A display brighter than 1000 nits: edit hdr.maxNits in the INI directly (the engine accepts up to 10000). |
| Display black (nits) | 0…2 | 0 | Your display's measured black level. At 0 the curve assumes a perfect black and spends shadow detail on range you can't actually see. A projector measuring 0.3: enter 0.3 — the destination range starts there and the shadow band is redistributed into what the panel shows. For OLED (true black), 0 is right. |
| Subtitle/OSD brightness | 0…100 | 0 | How bright subtitle and on-screen text renders against the finished picture. 0 = normal. Raise if text gets lost in bright content — it lifts the text layer only, never the film. |
Post-FX
These run after tone mapping and grading, on the final image — they behave identically on SDR, HDR10 and Dolby Vision sources.
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Adaptive sharpen | On / Off | Off | Edge-adaptive detail: measures each edge against its local neighbourhood and limits itself, so it adds detail without white halos. Soft SD/HD sources benefit; clean 4K rarely needs it. |
| Sharpen strength | 0.3…1.5 | 1.0 | How much of that adaptive detail to add. 0.3 is a whisper, 1.0 strong and still safe, ~1.2+ starts showing its hand on film grain. |
| Deband | On / Off | On | Removes the stepped bands that appear in slow gradients (sky fades, dark walls) — the banding the 10→8-bit conversion creates — by flattening each band edge then covering the work with fine grain. On by default; only turn it off if you would rather keep the grain exactly as encoded. |
| Deband threshold | 0…256 | 32 | How small a gradient step gets treated; pushing it high starts eating real picture detail. |
| Deband range | 1…64 | 16 | How wide an area is blended per band. |
| Deband iterations | 1…4 | 1 | Processing passes; 2 is usually the honest maximum. |
| Deband grain | 0…128 | 24 | The noise that hides the blending — 0 exposes it as mush; matching real film grain (~20–30) is the target. |
Zion tab — the grade
The Zion pipeline models your display and content and corrects both. One switch owns the whole tab, and there's a one-click undo for a session gone wrong.
| Setting | Default | What it does |
|---|---|---|
| Enable ML grade | On | The master switch for everything on this tab. Off = the render is pure tone curve + post-FX; every section below becomes decorative. Turning it on while Mode is Off also sets Mode to Auto — the switch is the master, and it says so in the row above it. |
| ⟲ Reset grade to defaults | — | Asks, then restores every row on this tab to its factory value. The quickest way out of a grade you can't diagnose. |
Tone Curve
| Setting | Range | Default | What it does |
|---|---|---|---|
| Band controller | On/Off | On | The closed loop. Instead of applying shadow/gamma/highlight corrections blindly, it solves all three together every frame so the delivered picture lands on fixed house levels (deep shadow, mid, and highlight anchors). While it's On, it owns the legacy Shadow slider and the manual Gamma top-up — those stand down because applying them on top would double the move. Off returns you to the older, open-loop path (the sliders below act directly again). |
| Mode | Auto / Manual / Off | Auto | Auto: the scene model judges shadow toe, gamma and highlight per scene and applies the corrections itself. Manual: the model's per-scene gamma freezes and the sliders become the sole authority — this is the starting point for manual tuning. Off: the tone-curve leg of the grade does nothing; micro-contrast and the rest still run. |
| Shadow | 0…0.40 | 0 | A legacy multiplicative toe on the dark end. Effective in Manual mode with the Band controller Off (otherwise the controller's own solution overrides it — see its row). Positive opens blacks progressively; past ~0.15 you will start seeing it everywhere, because a toe lift is global, not local. |
| Shadow dehaze | 0…1 | 0 | Auto-mode correction: the model sometimes lifts shadows for safety, which greys dark scenes (a "haze"). This scales down that lift — 1 fully removes the model's shadow boost. It only acts on what the model did, so it cannot grey or crush a scene on its own. If dark Auto-mode scenes look foggy, this is the dial. |
| Gamma | 0.5…1.5 | 1.0 | Manual-mode mid-range brightness. Below 1 lighter, above 1 darker, applied around fixed black/white anchors. Ignored in Auto (the model writes it). Not a "brightness" knob for whole titles — that's Exposure or SDR nits. |
| Gamma top-up | −0.50…+0.50 | 0 | A signed offset on top of the model's own Auto answer — a taste trim that survives scene changes. Positive brightens mids everywhere the model said "normal"; highlights stay put. With the Band controller On, the controller owns this band too (see its row), so test it with the controller Off. |
| Mid-tone target | 0…0.95 | 0 | The grade's delivery-referenced brightness dial: where (0=black, 1=white) you want the scene average to end up on your screen. The renderer computes what the curve is about to deliver and solves the gamma that lands it — so unlike every earlier brightness route, moving SDR display nits afterwards doesn't drag your brightness off this target. 0 = off; 0.42-ish matches a conventional bright-scene average. This is the dial that lets you make the house look brighter without costing you clouds. |
| Highlight | −0.3…+0.4 | 0 | Gain applied to the bright band above the curve's working range — the level of specular detail, sunlit walls, whites. Positive pushes them up (airier), negative pulls them back. Manual-mode centric. |
| Highlight shoulder | −0.2…+0.2 | 0 | Auto-mode correction, the mirror of Shadow dehaze: a signed offset on the model's highlight roll-off. Negative softens the shoulder's grip (bright areas keep separation, more "film"); positive tightens it (punchier but merges faster toward clip). |
Chroma
Colour saturation shaping — how vivid a colour gets, with a brake for skin. (Note: the "Mode" row on this section currently saves but nothing acts on it; the Default behaviour is what always runs.)
| Setting | Range | Default | What it does |
|---|---|---|---|
| Normal | 1.0…1.3 | 1.08 | Chroma gain for ordinary-saturation colours: skin, foliage, interiors. The small default boost is the house vividness; 1.0 is pass-through. |
| Fire | 1.0…1.3 | 1.15 | Chroma gain for the hottest band — flames, neon, emissives — where extra saturation reads as heat rather than error. |
| Knee | 0.1…0.9 | 0.45 | Where "ordinary" stops and "fire" begins, as a saturation level. Lower classifies more of the image into the hot band. |
| Skin | 0.5…1.0 | 0.95 | The skin brake: what fraction of the boost faces are allowed. 1.0 = faces get the full push, 0.5 = half. Guards against actors going lobster-orange. |
Micro Contrast
Local clarity — texture inside objects, not edge sharpening. Runs on its own enable switch even if the tone-curve Mode is Off.
| Setting | Range | Default | What it does |
|---|---|---|---|
| Enable | On/Off | On | Switches the micro-contrast engine. |
| Strength | 0…0.5 | 0.15 | How much local contrast to recover. The effect is texture-gated: flat gradients are left alone, real structure gets pushed. Past ~0.3 surfaces mastering noise and grain noise as "detail". |
| Zone lo | 0…0.6 | 0.15 | The brightness floor where the engine works at all. Everything below (night scenes' true blacks) is skipped — low-luma is where local contrast invents dirt. Raise it if dark scenes get mottled. |
| Ratio cap | 1.0…2.0 | 1.4 | The halo limiter: the maximum contrast ratio one pixel's neighbourhood may be pushed to. Lower = gentler, no rims; higher = stronger effect, but >1.7 on hard edges is where halos come from. |
| Skin protect | 0…1 | 0.65 | Faces get only this fraction of the effect — the difference between "pores" and "stubble texture on a model". |
Debug
Diagnostics for finding out why the picture is what it is. Leave every row here Off for normal viewing.
| Setting | What it does |
|---|---|
| HDR passthrough | Bypasses this app's entire picture pipeline and hands the raw signal to the display — the "is it the renderer or the TV" test. Applies immediately (it swaps the shader the render loop binds, with no pipeline rebuild). On a non-HDR display you'll see flat/green-grey nonsense; that's expected, not broken. Mutually exclusive with the next row by design. |
| Tone curve passthrough | Skips the Zion ML grade and nothing else: the picture is what the tone curve alone delivers — HDR converted to SDR by the selected curve, no per-scene model, no grade. It applies live. This is the A/B for the grade: if the picture is right here and wrong with the grade on, the grade is the suspect; if it is already wrong here, the tone curve or the display side is. Also auto-switches HDR passthrough off. |
| Frame log | Writes a verbose per-frame telemetry line to the engine log (%USERPROFILE%\.unplugged\logs\engine.log) — what each stage computed, frame by frame. The thing to turn on when asking "why did the picture change there". |
| MC heat | Replaces the picture with a greyscale map of where the micro-contrast engine is working, so a visible seam can be matched to a mask edge. |
Black Bars
| Setting | Default | What it does |
|---|---|---|
| Repaint bars | Off | Overwrites the letterbox mattes with true black every frame. For sources whose "black" bars carry lifted noise or crawl; clean masters don't need it and it's extra GPU work. |
| Highlight bars | Off | Tints the detected bar regions so you can see what the app thinks is black bar — the way to verify detection before trusting Repaint. |
Sky Seg
Experimental, off by default: the ML segmentor (ONNX/YOLO) carves the frame into sky regions so their highlight treatment can differ from the rest. If you did not go looking for this, leave it off.
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Enable | On / Off | Off | Switches the sky segmentor on. Off leaves the picture untouched. |
| Strength | 0…1 | 0.6 | How much the sky region's special treatment is applied there. |
| Mask overlay | On / Off | Off | Diagnostic: paints the detected sky mask so you can see what it locked onto. |
Person Skin
Experimental, off by default: segments people so faces can be protected while the rest of the frame is graded.
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Enable | On / Off | Off | Switches the person segmentor on. |
| Strength | 0…1 | 1.0 | How fully the detected region is treated as skin. |
| Mask overlay | On / Off | Off | Diagnostic: paints the detected people mask. |
| Tone preserve | 0…1 | 0 | How much of a face's original tone survives the grade — raise it to pull skin back toward the source while the rest of the frame stays graded. |
Output tab
Video Processing
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Super Resolution | On/Off | Off | The renderer's upscaler for small sources: SD/HD material on a 4K panel gets a genuine reconstruction pass instead of plain interpolation. Turning it On also enables the two plumbing switches it needs (behind the scenes, no action from you). Know its limits: it doesn't engage for 10-bit or HDR sources, needs RTX-class NVIDIA or Intel graphics, and a 4K source on a 4K display has nothing to upscale. Windows' and the NVIDIA panel's own settings are outside this app's reach. |
| Chroma upsampling | CatmullRom / KrigBilateral | KrigBilateral | How colour from 4:2:0 video (almost all of it) is expanded to full resolution. CatmullRom is the cheaper, always-safe filter; KrigBilateral reconstructs chroma edges from the luma (best on fine colour detail like red subtitle text) at noticeably more GPU cost. |
| Upscaling | Lanczos3 / Jinc2 | Jinc2 | The enlargement filter for smaller-than-display sources. Jinc2 is the sharper reconstruction (the default, best for SD/HD onto 4K); Lanczos3 is a touch calmer, with less ringing on hard edges and grain. On noisy material, sharper is not better. |
| Downscaling | Lanczos / BicubicSharp | Lanczos | Shrinking a source to fit. Lanczos keeps detail on fine patterns; BicubicSharp is a touch softer and calmer on grain. Matters most for 4K→1080p panels. |
Geometry
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Fit mode | Source / Fixed aspect / Fill screen | Source | How the picture is fitted to the window. Source respects the video's own aspect; Fixed aspect uses the Fixed aspect value; Fill screen stretches to the window and can remove black bars. |
| Fixed aspect | 1.00 – 3.00 | 1.78 | The display aspect used in Fixed aspect mode. 1.78 = 16:9, 2.39 = scope. For a 2.35 screen use the screen's measured ratio. |
| Zoom | 50 – 200 % | 100 % | Scales the fitted picture. Above 100 % crops the overflow; use with Pan. 100 % is the neutral fit. |
| Pan X | -100 – 100 % | 0 % | Moves a zoomed picture horizontally across its overflow. Has no effect while the picture fits inside the window. |
| Pan Y | -100 – 100 % | 0 % | Moves a zoomed picture vertically across its overflow. Has no effect while the picture fits inside the window. |
Non-linear stretch
A separate section in the rail, below Geometry. Everything here applies live, including on a paused frame — the geometry moves with the sliders and with N. That is deliberate: it is the only practical way to judge the sweet spot.
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Enable NLS | On/Off | Off | Non-linear stretch: expands the active picture toward the screen edges while keeping the central band close to its original geometry. Intended for scope screens, projectors and anamorphic setups. Off by default; switching it on with the stock settings fills a letterboxed scope title immediately — the rows below are for tuning that result, not for making it happen. |
| Bars removed | 0 – 100 % | 100 % | How much of the letterbox the picture grows into. 0 shows it at its own aspect (bars untouched, no distortion); 100 fills the screen. The correction the fill costs scales with it — taking half the bars costs half the distortion — so this is the "how many of the black bars do I get rid of" dial. Whatever is left can be zoomed away, which spends side picture instead of shape. |
| Axis | Horizontal / Vertical / Split | Horizontal | Which axis carries the aspect correction. Horizontal keeps the height untouched (sy = 1.000), so heads and legs never stretch — this is the default. Vertical pays the correction on height and visibly elongates faces; it exists for anamorphic setups only. Split shares the correction between both axes; it always introduces a vertical component (Split 25 measured +26 % vertical on a 2.39 title and was rejected in the field test on 2026-11-04), so it is an opt-in, not a default. |
| Strength | 0 – 100 % | 100 % | How much of the correction the warp actually applies. At 0 the fill still happens but nothing is corrected — the picture is stretched uniformly, which is the worst-case look you are tuning away from; at 100 the whole correction is redistributed. Use it to find the point where the shape starts to hurt. |
| Centre protection | 0 – 90 % | 45 % | The fraction of the picture kept at correct geometry, measured from the middle out. Everything inside it is a uniform zoom — no distortion at all — and the whole correction is squeezed into the rim beyond it. Low values (35–45) spread the distortion gradually, which is gentler on the very edge but starts to bend faces around 72 % of the way out. High values (80–90) keep the middle, including faces near the sides, perfectly clean and dump everything into a narrow rim: extreme at the edge, but it is the part you would crop anyway. A stretching axis cannot be protected as far as a squeezing one (the map would run out of range), so the effective cap is lower when Axis puts the correction on the vertical side. |
| Curve | 1.0 – 2.9 | 1.2 | Distribution of the stretch across the outer band. Higher values push more distortion toward the edges — the upper half of the range is what makes a very high Centre protection read as "clean middle, squeezed rim". |
| Split | 0 – 100 % | 50 % | Horizontal's share of the correction when Axis = Split. 100 % is the horizontal-only pass; 0 % is vertical-only; 50 % is even. Only active when Axis = Split and greyed otherwise. Use with care: any Split value puts correction on height, and heads/legs visibly elongate even when the measured centre proportions are unchanged. Horizontal is the default for that reason. |
| Max distortion | 100 – 200 % | 140 % | Per-axis limit on the aspect correction, in both directions (e.g. 110 % = at most 10 % on each axis). Whatever the warp refuses to take is covered by cropping the axis that has slack — the sides for a picture still too wide, the top/bottom for one still too narrow — so this is the dial between "distort a little and crop a little" and "distort more and crop less". At 100 % it is the Crop baseline (no warp at all); above it, the warp takes the correction up to the cap and the remainder is cropped. Fill mode = Stretch ignores it, because Stretch never crops. The INFO panel's GEOM CROP row shows how much the cap pushed into the crop. |
| Post NLS X-Crop | 0 – 45 % | 0 % | Percentage of the screen width cut after the NLS pass (10 % removes 5 % from each side), with the remainder stretched to fill. It crops the whole frame including the black bars first: use it to consume bars left by a partial Bars removed; only once the crop passes the bar width does it start cutting picture. |
| Post NLS Y-Crop | 0 – 45 % | 0 % | Same for the screen height. This is the "remove the remaining letterbox" dial: with Bars removed below 100, raise Y-Crop until the top/bottom bars disappear, then stop; raising it further cuts into the picture (the first thing to go is heads). On a scope screen the same logic applies to X-Crop and pillarbox bars. |
| Fill mode | Auto / Stretch / Crop / Off | Auto | How the picture is fitted. Stretch warps the outer band (keeps everything, distorts the sides; fine while small) and never crops, so it never caps. Crop is the zero-distortion baseline: it grows with Bars removed and covers with geometry, so at 0 % it is the plain fit rect and at 100 % it fills by cropping. Auto does the same but spends Max distortion on warping before cropping. Off letterboxes at the picture's own aspect. |
| Lock band | On/Off | Off | Keeps the black band found at the start of a title for the whole title. Bars are a property of the title, but some titles switch aspect mid-film (IMAX sequences); with this On the picture keeps one shape instead of changing size. Off lets the detector re-find the band after it holds for a few seconds. |
Nothing asks for your screen size. The app is full-screen, so the window it covers is the screen: every aspect decision (fill, crop, NLS) reads that surface. Press Info to see it as the DISPLAY row — resolution and aspect, e.g. 3840 × 2160 · 1.78:1. Physical size (a 185" screen, a projector, an anamorphic lens) does not enter the maths; only the aspect of that surface does. With the rail up, the picture is the same screen-aspect composition scaled into the visible area, so settings can be judged without waiting for the chrome to hide.
While tuning, the Info panel's Warp H / V, Geom crop and Post-NLS X/Y-Crop rows show what the current settings are actually costing, so "why does it look like that" has a number next to it.
Output (statistics & frame capture)
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Show statistics | On/Off | Off | The renderer's on-screen performance overlay — frame render intervals, dropped frames, GPU figures. What to turn on when asking "is it smooth". |
| Save frame as PNG | button | — | Captures the exact frame the renderer drew (not a screen grab: no overlays, no desktop compositing, no colour shift from screen capture) and lets you file it as lossless PNG. The right tool for showing someone a picture question. |
Display Calibration
| Setting | Choices / range | Default | What it does |
|---|---|---|---|
| Calibration LUT | file picker | unset | Loads a display-calibration .cube (e.g. from DisplayCAL) applied as the final pass — it shapes what your panel actually emits, separate from tone mapping which shapes the signal. Clearing (mode → Off) frees the texture. |
| LUT mode | Off / Gamma only / Greyscale / Full 3D | Full 3D | How much of the loaded cube to honour. Gamma only: the neutral lightness curve (for a display whose colour balance is already set). Greyscale: per-channel tone and balance, no channel mixing. Full 3D: everything, including the gamut remap — the complete calibration, with the caveat that 3D cubes gently fade deep saturated colours. |
System tab
App
| Setting | Choices | Default | What it does |
|---|---|---|---|
| Check for updates automatically | On / Off | On | Asks GitHub for the latest release once a day, in the background. When something newer exists, a card appears at start with the release notes and a link to the download page. Off stops the automatic check; Check for updates now still works. |
| Check for updates now | button | — | Runs the check immediately and always reports: a newer version opens its card, otherwise a short "you are on the latest version" message. Also useful after installing on a machine that has been offline. |
| Report a problem | button | — | The support action for a picture or playback problem. Not wired in this build — it only writes a line to the log. |
| Show context banner for settings | On / Off | On | Draws the short explanation banner above the rows while you move around the panel. Off gives more rows on screen once you know the controls. |
| Play next item automatically | On / Off | On | When a title ends, offers the next episode/film in the library after a five-second countdown; Esc (or the card's Cancel) stops it. Off returns to the library at the end of the title. |
| Show IMDb ratings | On / Off | On | Draws the IMDb rating chip on posters and in detail rows. Ratings come from OMDb and can be incomplete or N/A for new or obscure titles — the badge says IMDb N/A when OMDb has no rating yet; it does not mean the title is unrated on IMDb. Off hides all rating chips for a cleaner poster wall. |
| ⟲ Reset renderer settings | button | — | Deletes what the renderer stored in the registry (it keeps state of its own, and a previous machine's leftovers can ride along in a copy of the app). Your rail settings are re-applied immediately — this undoes registry state, not your configuration. |
| ▶ First-time setup… (restarts app) | button | — | Restarts into the setup wizard (stops playback). |
Updates. The check reads the project's public GitHub release, compares it with the version shown in the title strip, and does nothing else: there is no silent download and the app never installs anything behind your back. When a newer version exists, a card opens when the app starts, shows the release notes and offers Open download page (your browser) or Later — Enter opens the page, Esc is Later. Choosing Later remembers that version and stops the automatic prompt until the next one; Check for updates now always asks. Offline, blocked or no releases yet: the check fails silently unless you asked for it. The only thing sent is an ordinary HTTPS request to GitHub — no identifiers, no telemetry.
Recipes — start here
"Everything looks dim." Check SDR display nits holds your display's measured white — a number above the measurement is exactly what renders every film dark, and the fix is the honest number, not a darker one. Still dim at the measured value → Exposure (+1 = one-third stop; pre-curve, the shoulder absorbs it). A specific film still off on GT7 Adapt → Auto exposure On.
"Bright scenes hurt / whites glare." Pull Exposure down; GT7 Adapt users whose explosions lose detail → GT7 shoulder reach down (0.25→0.15). Don't reach for SDR display nits — that row carries your display's measured white and stays there.
"Skies are neon / garish blues." Gamut capacity (709) down to ~0.6; GT7 curves: GT7 desaturation 0.3–0.6. Unplugged curve with grade On: Highlight desat ~0.5.
"Blacks are grey / no depth." Check Display black (nits) matches a measured value (a 0.3-black projector told "0 perfect" wastes shadow range). Auto mode: Shadow dehaze up (it strips the model's safety lift). Too much texture in shadows → Shadow detail down.
"The image feels flat." Contrast +1…+2, or Micro Contrast Strength 0.15→0.25. Both at once is usually one too many.
"Faces look waxy/oily." Every texture enhancer is a suspect: Micro contrast (Strength down, Skin protect up), Adaptive sharpen (off or strength down), Shadow detail down.
"Stepped bands in dark gradients." Deband On, defaults are tuned; only raise Threshold if bands persist, and check Grain isn't at 0.
"DVD/Blu-ray on my 4K TV looks soft." Super Resolution On (RTX GPU, SDR content). Upscaling to Jinc2 for a crisper baseline — or leave Lanczos3 and let SR do the work.
New projector/TV? Measure it (or use published numbers): SDR display nits from your white patch, Static nits (max) with the wheel, Display black (nits) from the black patch, load a calibration LUT if you have one — then leave everything else at defaults for a week before tuning taste controls.
Current limitations
- Playback → Delay (audio lip-sync) saves but does nothing yet.
- Zion → Chroma → Mode saves but does nothing yet; the Default behaviour always runs.
- System → Report a problem saves a log line only; no report is sent.
- Super Resolution is not available for HDR or 10-bit sources; it is a SDR-path feature.
- With strong non-linear stretch, fine text can look slightly soft — both axes are being resampled when Axis = Split. Lower Strength or Centre protection if it bothers you.
- Disc images (ISO) and BDMV folder playback are not supported; rip to a file.
- Subtitle styling (font, size, colour) is not in this panel; only track selection is.
This guide ships with Unplugged 2.1.0. View the Markdown source on GitHub.