OLED-aware subpixel text rendering for Windows
Sharper, cleaner text on LG WOLED & Samsung QD-OLED displays.
Installation · UI Guide · Manual INI · Donate
⚠️ Notice regarding the Repository: PureType has transitioned to a closed-source development model. This public repository now serves strictly as the official hub for downloading Releases, reading documentation, and tracking community Issues.
ClearType was designed in 2000 for RGB-stripe LCD panels. Modern OLED displays, LG WOLED and Samsung QD-OLED, have completely different subpixel layouts:
- WOLED panels add a fourth white subpixel that ClearType does not model.
- QD-OLED panels arrange subpixels in a triangular pattern with a half-pixel vertical offset between rows.
Both layouts produce incorrect colour fringing and a luminance haze when rendered with standard ClearType. PureType intercepts GDI and DirectWrite text rendering calls and remaps per-channel coverage to the physical subpixel geometry of your panel.
Subpixel center positions are derived from panel microscopy — macro photographs with individual subpixels lit individually — rather than geometric assumptions.
Discord: https://discord.gg/c2U8QbHzv9
| Panel type | Examples | panelType value |
|---|---|---|
| LG WOLED RWBG | LG 27GR95QE, 45GR95QE, C-series OLED TVs used as monitors | rwbg |
| LG WOLED RGWB | LG 32" OLED models (PG32UCDP, 32GS95UE…) | rgwb |
| Samsung QD-OLED Gen 1-2 | Dell AW3423DW / AW3423DWF, Odyssey G8 OLED 34" gen1, Odyssey Neo G9 OLED | qd_oled_gen1 |
| Samsung QD-OLED Gen 3 | Odyssey G8 OLED 27" QHD, Dell AW2725DF, 32" 4K models | qd_oled_gen3 |
| Samsung QD-OLED Gen 4 | MSI MPG 272URX, 27" 4K UHD models 2024-2025 | qd_oled_gen4 |
Not sure which generation?
- Oval / teardrop shaped subpixels, R clearly larger than B → Gen 1-2
- Rectangular subpixels, R slightly wider than B → Gen 3
- Rectangular subpixels, R ≈ B equal size → Gen 4
- Download the latest release
.zipfrom the Releases tab and extract it to a permanent directory (e.g.C:\PureType\). - Run
puretype.exe. The application starts minimized in the system tray. - Double-click the tray icon to open the graphical configuration UI.
- Select your OLED panel type and choose a Quick Preset (Balanced, Sharp, or Clean).
- Click Save & Apply. Done — changes are applied instantly.
Note: PureType automatically disables Windows ClearType when it activates and restores it on exit. No system-wide settings need to be changed manually.
PureType includes a modern WPF-based UI (PuretypeUI.exe, .NET 9) with sidebar navigation and a live before/after preview. You can configure everything without editing puretype.ini manually.
| Tab | What it does |
|---|---|
| Overview | Live rendered preview (standard AA vs. PureType), quick preset chips (Balanced / Sharp / Clean), active configuration summary. |
| Rendering | Panel type, filter strength, WOLED crosstalk reduction, gamma mode & correction, OLED gamma output, luma contrast, subpixel hinting, fractional positioning, stem darkening. |
| Display | LOD glyph-size thresholds, high-DPI fade-out thresholds. |
| System Font | Install/restore the bundled Inter variable font as the system UI font. Adjust weight, optical size, and letter spacing axes with live preview. |
| Profiles | Create per-monitor or per-application override profiles. |
| Settings | Start with Windows, debug logging, glyph highlight overlay, process blacklist. |
| Info | Version, author, GitHub and donate links, license. |
All settings live in puretype.ini (same directory as the DLL). The UI reads and writes this file, but advanced users can edit it directly with any text editor. Changes take effect after clicking Save & Apply in the UI, or by right-clicking the tray icon → Disable then Enable PureType.
Profiles let you override any setting for a specific monitor or application. The app resolves values with this priority:
App profile → Monitor profile → Global ([general])
To configure profiles easily, use the Profiles tab in the UI.
PureType hooks ExtTextOutW (GDI) and DirectWrite draw calls. For each text draw call:
- The screen region is captured before rendering.
- The renderer draws normally — layout, metrics, and clipping remain untouched.
- The region is captured after rendering.
- Per-channel subpixel coverage is extracted from the before/after delta.
- Coverage values are remapped to the physical subpixel positions of the target OLED panel.
- The corrected pixels are written back using per-pixel alpha — background pixels are never touched.
| Framework / Renderer | Status |
|---|---|
| Win32 / MFC / WinForms | ✅ |
| Qt5 / Qt6 (EqualizerAPO, Peace, VoiceMeeter…) | ✅ |
| WPF with GDI fallback | ✅ |
| CJK IME (Microsoft IME, ATOK…) | ✅ |
| Notepad / Notepad++ | ✅ |
| Legacy 32-bit apps | ✅ |
| DirectWrite + Direct2D | ✅ |
| System ClearType off | ✅ |
| Composited / layered windows (desktop icon labels) | ✅ |
| UWP / AppContainer processes | ✅ (ACL permissions granted automatically) |
You can customize the injection blacklist from Settings → Process Blacklist or via the puretype.ini file.
Use the GitHub issue templates in this repository:
- Bug report — wrong colours, invisible text, ghost characters, crashes
- Feature request — new options, new rendering behaviour
- Panel compatibility — new panel type or subpixel measurement data
When reporting a bug:
- Attach your
puretype.ini - Enable debug logging: set
[debug] enabled = true - Reproduce the issue
- Attach the generated
PURETYPE.log
Copyright (c) 2026-2027 Antonio (Toriga). All rights reserved.
PureType is proprietary software for personal use. You may not reverse engineer, decompile, modify, or distribute this software commercially without permission. See the LICENSE file for full details.
Support the project: paypal.me/masterantonio
Patreon: https://www.patreon.com/Puretype
Author: Toriga
