Appearance
Why Core and Studio exist
Bright edges spread differently from dark ones, color boundaries soften differently from brightness boundaries, and fine screen texture changes character with output resolution.
Beamline has two stylized CRT treatments built around those interactions. Core keeps a cleaner, scanline-led picture. Studio adds shadow/slot-style material structure and separate luma/chroma transport. Both use the same brightness-dependent optical foundation.
Four parts of the treatment
The treatment combines four parts:
- Image structure: what image is available to sample, and what grid, if any, is justified for treatment?
- Signal treatment: how should brightness and color information spread and recombine? Studio uses separated Y/I/Q channels here.
- Display structure: how do beam intensity, scanline density and shadow/slot-style masks shape the picture? These patterns have to survive sampling onto the actual output pixels.
- Presentation: is the treated picture flat, curved, or surrounded by a housing illuminated by that picture?
The optical stage produces beam and mask structure before Y/I/Q transport, so the signal filter receives that texture along with the game's colors.
Core and Studio paths
Core and Studio share reconstruction, two nonlinear response stages, the beam model and tone response. Brightness changes the beam's shape and contribution. Both also include spatial bloom, exact-black handling and output-scale filtering.
Core omits the material masks and the entire three-stage Y/I/Q transport. Its optical image goes straight to the shared tone response. Studio's optical image includes masks, then passes through Y/I/Q encoding, differential horizontal filtering and RGB decode before tone. Its filters therefore interact with masks as well as image edges.
Both offer Flat, Curved and Curved + Bezel presentations. Their glow is spatial: neither CRT treatment accumulates previous frames for phosphor persistence.
The Binding of Isaac


From RGB to Y/I/Q and back
An RGB blur treats color components as neighboring numbers to average. CRT Studio instead separates a luma-like brightness channel, Y, from two signed chrominance channels, I and Q. That makes brightness detail and color detail independently filterable.
Y is a weighted combination of RGB values. I and Q describe color differences and can be negative, so clamping them into an ordinary unsigned color texture would destroy information.
Signed floating-point storage preserves the Y/I/Q intermediates.
The transport uses a symmetric 17-tap filter: a center sample and eight pairs of neighbors. I and Q share weights with broader positive tails. Y has a different response, including small negative outer weights.
Applying the same linear filter to every channel would make the color-space conversion pointless for blur. Different filters let color transitions spread while brightness detail follows its own response. Luma reconstruction and RGB recombination then form the output.
Filtering at the presentation scale
Tap spacing follows the width of the treated content, rather than a detected logical-pixel pitch. Resizing therefore changes the physical distance between taps continuously. The transport samples the underlying signed channels with linear interpolation; the decoder also interpolates its fractional horizontal sample positions explicitly.
Masks and signal filters use different scale rules: mask density follows the treatment grid, while filter support follows the presentation extent.
At the decoder, neighboring Y samples contribute to a local luma reconstruction before I and Q are combined back into RGB. This restores some brightness definition to the filtered signal.
The final tone stage shapes chroma around a luma estimate and applies the output conversion.
Why Studio has no chroma carrier
Studio transports Y/I/Q directly. Removing the chroma carrier removed its diagonal color interference while retaining differential color spread and the optical structure feeding it.