# Graphics and effects

> How MacLauncher's Metal graphics layer applies shaders, upscaling, neural models and frame generation to games on macOS, and how a chain of effects fits together.

Web page: https://procrastinine.github.io/maclauncher/graphics/

Every game you play through MacLauncher passes through the same graphics layer on its way to your Mac's screen. The layer runs on [Metal](https://developer.apple.com/metal/), takes each finished image from the runtime that drew it, and lets you process that image before it reaches the window. You can upscale it, sharpen it, clean it up with a neural network, give it the look of a CRT screen, insert generated frames between real ones, or combine several of these.

The same layer serves native Mac apps, [Godot](https://github.com/godotengine/godot) and [RPG Maker](https://www.rpgmakerweb.com/) games, visual novels, Android and iOS games, browser games, videos and Windows games running in [CrossOver](https://www.codeweavers.com/crossover/). Anything MacLauncher can launch can have effects applied to it, and on macOS 15.2 or later so can [the window of any other app, or a whole display](https://procrastinine.github.io/maclauncher/graphics/window-graphics.md).

The graphics layer works on Intel and Apple Silicon Macs, though some effects need more: MLX models and Metal 4 features need Apple Silicon and a newer macOS, and the libplacebo and ISF shader providers follow the requirements of the selected graphics package. MetalFX support depends on your GPU, which MacLauncher checks directly. An effect your Mac can't run is switched off without affecting the others. [Macs and macOS versions](https://procrastinine.github.io/maclauncher/macs-and-macos.md#graphics-features-by-macos-version) lists which features need which macOS version, and the [requirements reference](https://procrastinine.github.io/maclauncher/reference/runtimes/SYSTEM_REQUIREMENTS.md#graphics) has the complete tables.

*Image comparison, Original pixels and CRT + Colour: Sonic and Tails in Chemical Plant Zone, Sonic the Hedgehog 2.* Sonic the Hedgehog 2 draws its world at 320×240. Here it is scaled 4× with nearest neighbor, and the same frame through the built-in CRT effect and a touch of Colour. Drag the divider to compare.

## The chain

Effects live in an ordered list called the chain, which holds up to 32 rows. The image enters at the top, each row does one thing to it, and the image that leaves the last row is fitted to the window. A chain can be a single sharpening pass or something longer, for example:

1. Downsample the game's image to 720p, so the expensive steps have fewer pixels to process.
2. Run a neural model on that smaller image.
3. Upscale the result to the window with [MetalFX](https://developer.apple.com/documentation/metalfx).
4. Add frame generation to raise the frame rate shown on screen.
5. Apply a CRT shader to the final image.

You choose the order, and the order changes the result. A CRT effect looks different before and after an upscaler, and sharpening before a neural model looks different from sharpening after it. [Building a chain](https://procrastinine.github.io/maclauncher/graphics/composing-effects.md) explains how rows interact.

## Simple and Advanced

The inspector's **Graphics** section shows the chain in two views. **Simple** has one dropdown for each group of methods: **Image filters**, **Resize** (Downsample and Upscale) and **Temporal** (temporal upscaling and frame generation). You pick a method in a group, and Simple chooses the working sizes for it.

**Advanced** shows every row in order. **Add effect…** adds an image filter, a downsample, an upscale, a temporal upscaler or a frame generator. Each row can be dragged to a new position, resized, adjusted and switched on or off.

Both views edit the same chain, so switching between them loses nothing.

To try both views, open the [interactive demo](https://procrastinine.github.io/maclauncher/demo/), select a game and scroll its inspector to **Graphics**. Picking an effect there brings up the article about it.

## The Graphics heading

Clicking the **Graphics** heading opens and closes the section. While the section is closed, the heading summarizes the active effects. Its checkbox turns the whole chain off and on without changing any of it, so a chain can be set aside and restored later.

The **⋯** menu beside the heading applies a saved preset, saves the current chain with **Save as preset…**, opens **Manage presets…**, or empties the chain with **Clear effects**. Presets let you reuse a chain on other games. After you apply a preset or clear the chain, **Undo** brings back the previous chain until your next edit.

## Changes apply live

Edits apply while the game runs, in a window or fullscreen, whenever the game's graphics adapter supports live changes; otherwise the inspector says they take effect at the next launch. Shaders compile and models load in the background while the game keeps drawing. A few settings depend on a renderer integration that is set up when the game starts, and their controls say so.

**Output → Compare** shows the untouched source, a split view, or the difference between the source and the processed image, which makes it easy to see what an effect changes. **Output → Performance overlay** draws frame rates, GPU time and latency over the game, which shows what an effect costs; [Performance and presentation](https://procrastinine.github.io/maclauncher/graphics/composing-effects.md#performance-and-presentation) describes it together with the frame-rate cap and display settings.

## Two kinds of input

Most effects need only the finished picture. Color filters, spatial upscalers, neural upscalers, CRT shaders and some frame generators work on any game, because every game produces a picture.

Some effects need more. Temporal upscalers such as MetalFX Temporal, [FSR](https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK) 2 to 4 and [XeSS](https://github.com/intel/xess), scene-based frame generators, and depth effects such as ambient occlusion and depth of field also use data from the game's renderer: its depth buffer (how far away each pixel is), its motion vectors (how each pixel moved since the previous frame) or its camera data. Only some runtimes pass that data to MacLauncher, so these effects run in some games and not others. When a game doesn't supply what an effect needs, the menus list the effect under **Needs scene inputs**.

## Where to go next

- [Upscaling](https://procrastinine.github.io/maclauncher/graphics/upscaling.md): Nearest, bilinear, MetalFX, FSR, Lossless Scaling and shader upscalers, plus temporal upscaling.
- [Neural upscaling and restoration](https://procrastinine.github.io/maclauncher/graphics/neural-restoration.md): Real-ESRGAN, Real-CUGAN, RTX VSR, DLSS neural rendering and NAFNet.
- [Frame generation](https://procrastinine.github.io/maclauncher/graphics/frame-generation.md): Lossless Scaling, RIFE, MLX interpolation, VideoToolbox, Vision optical flow, MetalFX, FSR 3 and XeSS.
- [CRT and retro](https://procrastinine.github.io/maclauncher/graphics/crt-and-retro.md): CRT Royale, Lottes, Easymode and other CRT shaders, plus motion clarity.
- [Color, light and sharpening](https://procrastinine.github.io/maclauncher/graphics/color-and-light.md): Colour, CAS, local contrast, bloom, lens effects, depth fog and LUTs.
- [Building a chain](https://procrastinine.github.io/maclauncher/graphics/composing-effects.md): How effects combine, processing sizes, presets and the performance overlay.
- [Shader collections and imports](https://procrastinine.github.io/maclauncher/graphics/shaders.md): ReShade, RetroArch Slang, mpv, MagpieFX and ISF shaders.
- [Any window or display](https://procrastinine.github.io/maclauncher/graphics/window-graphics.md): The same chain on another app's window, in place or scaled to fill the screen, or on a whole display.

The repository's [graphics guide](https://procrastinine.github.io/maclauncher/reference/graphics/README.md) describes every control in full, starting with [how the chain works](https://procrastinine.github.io/maclauncher/reference/graphics/README.md#how-the-chain-works). The [algorithm reference](https://procrastinine.github.io/maclauncher/reference/graphics/PROVIDERS.md) lists each algorithm with its exact inputs and requirements.

> **About the sample images:**
> The before-and-after images in this section were made by running still images through MacLauncher's own **Export video…** pipeline, the same graphics chain games use, and saving a frame of the result. The example games and their copyright notices are listed on the [credits page](https://procrastinine.github.io/maclauncher/about/credits.md).
