SkillAgentSearch skills...

Puretype

The most advanced OLED-aware text rendering for Windows.

Install / Use

/learn @Master-Antonio/Puretype

README

<p align="center"> <img src="PuretypeUI/Assets/puretype_logo.png" alt="PureType" width="96"/> </p> <h1 align="center">PureType</h1> <p align="center"> <strong>OLED-aware subpixel text rendering for Windows</strong><br/> <em>Sharper, cleaner text on LG WOLED &amp; Samsung QD-OLED displays.</em> </p> <p align="center"> <a href="#installation">Installation</a> · <a href="#graphical-interface">UI Guide</a> · <a href="#manual-configuration">Manual INI</a> · <a href="#building-from-source">Build</a> · <a href="https://paypal.me/masterantonio">Donate</a> </p>

Why PureType?

ClearType was designed in 2000 for RGB-stripe LCD panels. Modern OLED displays — LG WOLED, 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.


Supported panels

| 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

Installation

  1. Download the latest release and extract to a permanent directory (e.g. C:\PureType\).
  2. Run puretype.exe. The application starts minimized in the system tray.
  3. Double-click the tray icon to open the graphical configuration UI.
  4. Select your OLED panel type and choose a Quick Preset (Balanced, Sharp, or Clean).
  5. 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.

Release folder structure

C:\PureType\
├── puretype.exe                  ← Tray launcher (run this)
├── PureType.dll                  ← Core rendering engine
├── PuretypeUI.exe                ← Graphical configuration UI
├── PuretypeUI.dll                ← .NET runtime assembly
├── PuretypeUI.runtimeconfig.json ← .NET runtime config
├── puretype.ini                  ← All settings (editable)
├── puretype.ico                  ← Tray icon
└── font/                         ← Bundled Inter variable font
    ├── Inter-VariableFont_opsz,wght.ttf
    └── Inter-Italic-VariableFont_opsz,wght.ttf

Graphical Interface

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.

Tabs

| 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. |

Quick Presets

Presets are panel-aware — values differ between WOLED and QD-OLED:

| Preset | Description | |--------------|--------------------------------------------------------------------------------------------------| | Balanced | Scientifically correct defaults. filterStrength=1.0, stemStrength=0.45, lumaContrast=1.20. | | Sharp | Prioritizes stem crispness. Stronger darkening + higher contrast. | | Clean | Prioritizes colour purity. Stronger filtering, lighter stems. |

When slider values no longer match any preset, a Custom indicator appears automatically.


Manual Configuration

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
  • Right-clicking the tray icon → Disable then Enable PureType.

Full annotated puretype.ini

; ============================================================
;  puretype.ini — PureType OLED subpixel renderer settings
; ============================================================

[general]

; ── Panel Type ──────────────────────────────────────────────
; Choose the subpixel layout of your OLED monitor.
; Values: rwbg | rgwb | qd_oled_gen1 | qd_oled_gen3 | qd_oled_gen4
panelType = qd_oled_gen3

; ── Gamma Mode ──────────────────────────────────────────────
; srgb  — Standard IEC 61966-2-1 sRGB curve (ideal for LCD)
; oled  — Softer gamma (~2.0) below 18% luminance, prevents
;         dark text from being crushed on OLED shadow response
gammaMode = oled

; ── Subpixel Filter ─────────────────────────────────────────
; Main filter intensity. 1.0 = full panel-aware correction.
; Range: 0.0 (passthrough) – 5.0    UI range: 0.0 – 2.0
filterStrength = 1.00

; ── Gamma Correction ────────────────────────────────────────
; Base gamma multiplier applied on top of gammaMode.
; Range: 0.5 – 3.0    UI range: 0.5 – 2.5
gamma = 1.0

; ── OLED Gamma Output ──────────────────────────────────────
; Post-processing gamma for OLED panels.
; Higher values brighten dark-on-light text.
; Range: 1.0 – 2.0
oledGammaOutput = 1.00

; ── Subpixel Hinting ───────────────────────────────────────
; Uses FreeType FT_LOAD_FORCE_AUTOHINT for crisper stems
; at small pixel sizes. Recommended for OLED.
; Values: true | false
enableSubpixelHinting = true

; ── Fractional Positioning ─────────────────────────────────
; Sub-pixel X placement of glyphs.
; false = recommended for GDI apps (avoids mask blur).
; DWrite path uses native FreeType phase tracking regardless.
; Values: true | false
enableFractionalPositioning = false

; ── LOD Thresholds ─────────────────────────────────────────
; Glyph-size thresholds (px) for level-of-detail filtering.
; Small: 6.0 – 96.0    Large: small+1 – 160.0
lodThresholdSmall = 10.0
lodThresholdLarge = 22.0

; ── High-DPI Fade Thresholds ───────────────────────────────
; At high PPI, subpixel filtering becomes unnecessary.
; Between Low and High, strength ramps down gradually.
; Above High, filtering is fully bypassed.
; Low: 96 – 384    High: low+1 – 600
highDpiThresholdLow = 144.0
highDpiThresholdHigh = 216.0

; ── WOLED Crosstalk Reduction ──────────────────────────────
; (WOLED panels only — rwbg / rgwb)
; Attenuates the white subpixel to reduce grey haze on dark
; backgrounds caused by the TCON max() merge.
; Range: 0.0 (off) – 1.0    UI range: 0.0 – 0.5
woledCrossTalkReduction = 0.08

; ── Luma Contrast ──────────────────────────────────────────
; S-curve boost: exp ≈ 1.0 + (value - 1.0) × 0.5
; 1.20 = optimal 5-7% mid-tone boost (Legge & Foley 1980).
; Range: 1.0 – 3.0    UI range: 0.5 – 2.0
lumaContrastStrength = 1.20

; ── Stem Darkening ─────────────────────────────────────────
; Darkens thin vertical strokes using font-weight-aware logic.
; Less darkening for Bold, more for Light.
; Values: true | false
stemDarkeningEnabled = true
; Range: 0.0 – 2.0    UI range: 0.0 – 1.0
stemDarkeningStrength = 0.45

; ── Inter Variable Font Axes ───────────────────────────────
; Used by the System Font tab when Inter is installed.
;
View on GitHub
GitHub Stars27
CategoryDevelopment
Updated20h ago
Forks0

Languages

C++

Security Score

95/100

Audited on Apr 1, 2026

No findings