ConvertDualHGRApple II HGR + HGR2 · selectable 75/25 or 50/50 duty cycle

WASM optimizer · defaultWebGL page animation

Combined output — 75% HGR + 25% HGR2

Static composite
Static bitmap decoded from both exported HGR pages. Enable animation to compare actual page flipping against the averaged preview.
Demo source is being prepared.

Conversion results

RGB error (RMSE)
—
YUV objective / px
—
Convert time
—
Processing
—
Output pages
2 × 8 KB

Pixel inspector

Move the pointer over the combined image to inspect decoded colors from both pages.
X/Y: — Source: — HGR / HGR2: — Composite: — Bytes: —

Source image / live camera

280 × 192

HGR

75% duty / $2000

HGR2

25% duty / $4000

Interpretation

The core optimizer runs in WebAssembly by default (with a JavaScript alternative) and chooses two legal HGR byte streams jointly for the selected duty cycle. Each pixel's displayed color is decoded from its own byte phase bit and neighboring pixel bits, including transitions between bytes. The static preview and PNG use the weighted mix duty × HGR_RGB + (1 − duty) × HGR2_RGB by default, reconstructed from the actual exported HGR bytes.

WebGL displays a repeating 3:1 sequence at 75/25 or 1:1 at 50/50, with two pairs of GPU textures so newly converted camera frames replace both pages on a single animation callback. This is a display-rate preview, not a raster/Vaporlock hardware emulator. A browser or display below 120 Hz cannot present 120 unique frames per second; the preview adapts to the measured refresh rate and reports its achieved rate. The static PNG export always uses the selected duty ratio.

Standalone HTML; all scripts are embedded. Camera access requires browser permission and a secure context (HTTPS or localhost; local file access varies by browser). Camera frames and local images never leave your browser.