A guide to CRT photography

It's well-documented that acquiring a CRT display instantly awakens an instinct to show off photos of game title screens and calibration patterns to every Discord friend and server within earshot, at the expense of actually playing games on the display. CRT photography is a tricky art, requiring you to account for factors like flicker, moire, brightness and color accuracy, and room glare to produce optimal results. Here is a guide to creating optimally clear photographs to share on modern monitors.

Background

There's two main ways to take a picture of a CRT. If you're taking a picture of a CRT in a room, you can simply take a photo on a smartphone, and if necessary adjust the exposure/shutter to prevent the image from flickering or showing black bands. Your phone camera is better equipped to handle surroundings both brighter and darker than the CRT screen, whereas my procedure is built for reproducing the brightness of a CRT display in isolation. The resulting .jpg file can be directly shared on chat apps and social media. Other people have written more complex guides on how to photograph CRTs in rooms "well".

The rest of this guide will instead help you take pictures of how an image appears on a CRT, to produce a sharp picture with accurate colors. This requires processing the image quite differently from how cameras normally operate. I save photos as RAW files and process them on a computer, which allows me to pick and apply filters to clean up the CRT image.

Both dedicated cameras and most smartphones can save RAW images, but DSLRs or mirrorless cameras will often have higher dynamic range and pixel resolution than (older) smartphones. High dynamic range means a camera can capture more light and generate less noise so you can make out detail in shadows, without reaching maximum brightness and clipping bright areas of the image.

Most CRTs (catgirl ray tubes) can be divided into computer monitors and standard-definition televisions. For the purposes of taking pictures, a monitor has finer phosphors and a sharper image, making it harder to accurately photograph. HDTVs and presentation monitors generally lie in between these two states. I've written this guide based on a 17" computer monitor; it may not map perfectly to 19" or 21" monitors (which can have finer phosphors in a photograph), and moire may be less of a concern for photographing TVs.

A CRT monitor showing an anime-style line drawing of a catgirl sleeping on a girl by a window
I photographed this CRT using this guide, processing the RAW image in Darktable. (Source)

For reference, here is the finished Darktable style I use for my photos. It will not apply as-is to your camera (in particular you'll have to reset "raw black/white point"), but you can reference the settings I use for complex tasks like denoising and diffuse/sharpen.

Taking photos

Before you start taking pictures, you should configure the camera's settings. First put it into raw photo mode (optionally RAW+JPEG mode, if you plan to view the JPEGs directly).

First you should decide how much of the screen is visible in the photo. Close-ups of the screen will capture the phosphor texture and scanlines in more detail, while including the bezel helps the viewer imagine they're sitting in front of a monitor. Many DSLRs have a sensor wider than 4:3 CRT screens, meaning you'll be capturing more side bezel than top/bottom.

I generally take pictures using a tripod. A tripod will help prevent hand shake during photos, and allows you to position the camera in a consistent position.

Picking shutter speeds

CRTs require special considerations to take their pictures because they flicker. They generate an image by moving an electron beam across phosphors, which only glow for a few milliseconds (or less) after being struck. This flicker causes images to appear banded or strobing on camera viewfinders and photographs depending on how the camera's refresh rate, shutter duration, and the CRT's refresh rate interact.

Sidenote: PWM LED lighting

While CRTs have been replaced by flat-screen monitors, flickering lights have not died. Many VFD-based electronics flicker because they only illuminate some indicators at a time, and LED-based electronic indicators, cheap monitor backlights, and room/car headlights dim their lights by rapidly flashing them on and off (known as PWM) because it's cheaper to implement than current limiting. The flicker becomes visible when you move your eyes, chew food, or move your hand in front of screens, and can cause discomfort in some people or banding/flashing in cameras.

One way to avoid flicker-related artifacts is to match the camera shutter to the CRT refresh rate (eg. 60 Hz). This is more practical with phone cameras or newer (expensive) DSLRs with high-frequency flicker reduction for fine shutter control, since many older DSLR/mirrorless cameras use a 1/64 second shutter when set to 1/60, resulting in black bands on a photo. A single-frame exposure allows you to take pictures of fast-moving console games you cannot pause or screenshot, but produces more image noise because it cannot capture as much light.

Photograph of CRT monitor, showing darkened band covering part of the image on-screen.
If you try to set your shutter to 1/60 second on a dedicated camera, it may actually use 1/64 second. This creates a black bar on 60hz displays. (Source)

Alternatively you can take a long exposure (eg. 1/4 second) of a still screenshot or slow-moving scene, so that there's a minimal difference in brightness between parts of the image exposed n vs. n+1 times. This allows for gathering more light, and is resilient to differences between the camera shutter speed and screen refresh rate (eg. 60, 75, or 85 Hz). However this is not practical for recording videos (which will not be covered in this article).

Sidenote: Camera noise technical details
  • Camera noise comes from multiple sources, including thermal noise and hot pixels on the sensor, photon shot noise, and pattern/read noise.
    • Increasing the CRT contrast (light intensity) or camera aperture increases signal relative to all sources of noise.
    • Increasing the shutter exposure duration increases signal and hot pixels by the same amount, more than shot or read noise.
    • Increasing the ISO boosts the signal along with most sources of noise, but the signal increases more than read noise (except on newer ISO-invariant cameras (explanation) where read noise is always low relative to the signal).
  • On my Canon T2i, increasing ISO from 100 to 200 reduced noise noticeably; this means that my sensor is not ISO-invariant, and much of the noise at ISO 100 was from digitization rather than photon/thermal. Of course I'd get even better results with 1/2 second exposures at ISO 100.
  • If you want to read more, DPReview has an article about the sources of noise in a photograph.

Different cameras and lenses may be differently suited to CRT photography. I initially tried taking photos on my Sony a6000 kit lens, but I found the images to be blurry at the edges (due to coma), even worse than my Pixel 4a smartphone even at a matching aperture. I had to choose whether to stop down the lens (close the aperture) for a sharp image, and make up for less light by exposing the image for longer, or spend hundreds of dollars on a better lens (used lenses can be somewhat cheaper). I chose to switch to an ancient Canon Rebel T2i I dug out of a closet, which has a lower-resolution sensor but better wide-angle kit lens. In hindsight, I could've kept the a6000 kit lens, closed the aperture, and exposed images for 0.5βˆ’1 second perhaps with a higher ISO (which would still be practical and produce acceptable amounts of hot pixel noise).

Newer or higher-end smartphones or dedicated cameras may have better dynamic range or low-light performance. DPReview has an image comparison between dedicated cameras, though I don't see as big of a difference in noise levels as other people tell me exist.

Fighting moire

Normally after setting a camera on a tripod and configuring the exposure, you'd focus the lens and start taking pictures. However, when taking photographs of computer monitors (both LCD and CRT) and possibly CRT TVs, you will get moire patterns (banding and stripes) in the image as the CRT's finely spaced phosphor grid aliases with the camera's sensor grid. Worse yet, because cameras use a Bayer filter and sample a different color for each pixel on the sensor, the interference between the image and sensor causes colored stripes on the captured image, which can look quite distracting.

A close-up of a CRT screen showing colorful moire in a purple sky and cyan sea, and less moire in gray textured mountains
Moire is more visible in certain colors, and gets hidden by dark and textured areas of the image. (Source)

There are various ways to make photographic moire less visible and distracting:

When I photograph CRT monitors, I start by setting the camera into manual focus, then entering live view, zooming into the image preview, and defocusing the camera just enough so the phosphors mostly disappear. (Personally I set the focal plane further away and behind the monitor, instead of closer.) This is a tricky balancing act, as if you defocus enough for the phosphors to fully disappear, the image will have noticeably blurred edges and textures, with light bleeding into dark areas from adjacent phosphors. To check for light bleed, you can enable live view and zoom into text, a mouse cursor, or scanline gaps, then adjust the focus dial. You should verify by photographing real scenes and zooming into the results.

On top of this, I set my camera shutter to a 2-second countdown, and 1 second before the picture, I jiggle the camera on the tripod's center column (by knocking the right side of the camera right/down, or bumping the right side of the tripod head) while holding the column base still. During a photo's 1/4 second exposure, each frame drawn on the CRT enters the shaking camera at a different angle and lands on a slightly different spot on the sensor. This adds additional anti-aliasing to most of the image (though the bottom of the image is less affected), while introducing less light bleed and blur than defocusing the lens further.

A black and white cat standing between a CRT showing a 90s 3D CGI robot and a DSLR camera
Moomoo the cat is telling me to take a break from photography and pet her instead. (Source)

CRT setup

Once you've set up your camera for photography, you need to turn on and prepare your monitor. CRTs are analog vacuum-tube devices which takes time to warm up, during which the image will have dimmer blacks (unless your monitor raises black levels to compensate), altered colors, and may be positioned or sized wrong. Each CRT takes a certain amount of time to warm up; my monitor takes 5-10 minutes, while other displays can take up to hours.

You should wait until a CRT finishes warming up before you calibrate it for geometry (requires service menus on TVs), color, or brightness. If you're planning to take pictures of a CRT, generally it's best to turn it on ahead of time, and while it's warming up either let it sit or play videos or games on it. If you take pictures before a CRT is fully warmed up, they'll come out with different exposure and white balance, which takes time to correct during development.

After a display warms up, you can try tweaking other controls to affect pictures. Increasing contrast (peak brightness) will make the CRT screen brighter, which reduces how long you need to expose photos, but may cause the electron gun to wear out faster (over the course of years). However you may want to reduce contrast on cheaper or worn displays, where on bright scanlines the internal voltages will drop and the screen will expand or contract; here you'll have to find a balance between stable geometry and a bright image.

You don't have to set the CRT white balance to any specific value. You can tweak its color temperature to match your room lighting and other monitors, but should keep it consistent between photos so you can use the same RAW processing settings between pictures.

Once your CRT is warmed up, you can start loading scenes on your CRT from a console, scaler, or PC, and snapping pics.

The first time you take pictures with a given CRT and camera, you need to take some calibration shots. These need to be taken on the same settings as your real photos, preferably with the monitor warmed up. Try to close your curtains and minimize ambient light for these photos, and (for the colorbars photo) make sure the CRT displays black screens as black or nearly so.

Three rows of colored bars (red, green, and blue) on a black background. Their brightness increases in steps from left to right.
Color bars test image, useful to calibrate colors when photographing a CRT monitor. (Generator source)

Once you've taken some pictures with a camera on a tripod and verified their geometry and moire is acceptable, you can mark the positions of the tripod legs on the ground. These will help you setup the tripod and camera again if you move or bump it, though with my cheap tripod I still have to fine-tune the camera position using live view or photographs.

Developing photos

To accurately reproduce colors and shadows, you will have to start with RAW files, which are linear captures of light received by each sensor pixel. Camera-generated JPEG files are unsuited to processing because they have irreversible brightness and color processing, plus lossy compression.

I use darktable to develop RAW photos of CRTs. This is an open-source program with flexible algorithms to view and process RAW images. It can bug out or crash if you perform certain actions, but you won't lose image edits since they get saved as you perform them (though changed program preferences will be lost).

Follow the Darktable installation instructions to get it on your system. If you want to use a different program to process your images, the ideas behind my workflow should transfer to it. Though I've heard that darktable is currently the only scene-referred RAW editor performing most operations in unbounded linear light, rather than a nonlinear display color space with bounded brightness (complicating image processing). (Ansel is a darktable fork which is also scene-referred; I have not tried it.)

Once you've copied your raw photos from your camera's SD card (or phone storage) to a folder on your computer, drag them from your computer into Darktable's UI. This will show the photos in the lighttable (photo gallery) view. If you want to only show images since your last export, you can filter images by date by expanding "collection filters" in the left sidebar, clicking "new rule" near the bottom and picking "capture date", then right-clicking the "min" textbox to pick a date.

Screenshot of lighttable view showing the collection filters date picker
When filtering photos, you can pick a start date based on timestamps of photos you've taken.

In both the image browser and editor's bottom filmstrip, keyboard-driven actions will generally apply to the image you have hovered, rather than the image(s) you have selected. This is a nice party trick, but often becomes a nuisance that makes me operate on the wrong images. This behavior is being discussed on their issue tracker and may be changed or made configurable (any year now).

To scroll panels with the mousewheel, you need to move your mouse to the scrollbar/arrow at the edge or hold Ctrl+Alt. If you want to scroll by default (and hold Ctrl+Alt to move sliders), click the gear in the top-right of the central view to open "darktable preferences", then click on "miscellaneous" and check "mouse wheel scrolls modules side panel by default".

Image editor (darkroom) overview

Double-clicking an image in the gallery will bring you to the darkroom view. Here, the image fills the center of the screen, with a minimap ("navigation") at the top-left corner, history at the left, and a color graph and list of configurable filters ("modules") at the right.

If you want to read more about what any module (UI element or image filter) does, you can click the ? icon on the inset top toolbar and click an element on the screen. For most elements, this will open a browser to a help page for what you clicked.

To return to the image gallery, click lighttable at the top-right of the screen. To switch images from the darkroom, scroll the filmstrip at the bottom of the darktable view, and single-click an image to select it. You can pick the next or previous image by pressing spacebar or backspace.

Screenshot of darktable in darkroom view
Darktable's darkroom view, showing a photo of Skyward Sword gameplay. (Source)

White balance

Before you can develop CRT photos, you have to setup darktable's exposure and white balance so a white screen produces an image near full brightness with no color tint. You'll have to calibrate this before you develop your first photo, and again if you adjust your CRT's brightness, contrast, or white balance settings, or your photos come out with the wrong brightness or color.

The right side of the darkroom view shows a list of image effects ("modules") which can be switched on or off. At the top, find a toolbar with a power button with tooltip "show only active modules". Clicking this will show all modules acting on the image, in the order they're applied (final effect on top).

Before you calibrate exposure, you should adjust the white balance so the screen looks white.

Alternative white balance approaches

Darktable's white balance system is confusing. An alternative approach to what I normally use is to reset the "white balance" module and perform white compensation in the "color calibration" module, set to the default "CAT16 (CIECAM16)" rather than "none (bypass)". This has different properties and tradeoffs I have not fully explored in actual photos beyond colorbars.

An extension to this alternative approach involves purchasing calibration cards printed on paper and exposed to light, then feeding the colors into "color calibration"; I don't have a calibration card, and don't know how it would translate to photography of RGB screens, so I did not attempt this.

To check that your color is correct, look at the color viewer (scopes) module in the top-right of the window. If you hover the graph, you will see a list of modes at the top-left and options at the top-right.

Exposure and lens correction

Next we'll be adjusting exposure so the white screen appears near full brightness. First, at the bottom-right of the main view, there will be an icon to show clipping. Click this icon to enable clipping visualization. Now any over-exposed areas of the image should be marked on-screen.

You may notice that the image's brightness is not perfectly uniform. Search for lens or click the "correct" effect tab, and enable the "lens correction" module. If your camera lens is recognized by darktable, this will correct the image such that the CRT screen should appear rectangular without curved edges, and the edges of the white screen should not appear darker than the center.

Screenshot of darkroom view showing a photo of a white CRT, with lens correction enabled at the right, and the top-right color graph set to horizontal RGB parade with mostly flat lines
When configuring lens correction, setting the color graph to horizontal RGB parade (three graphs side by side) makes brightness fluctuations more apparent.

Now that the image is a consistent brightness, you can precisely calibrate exposure. Make sure the clipping indicator is still enabled, as we'll be using it.

We're done calibrating against a fully white image, and it's time to save our settings to transfer to colored images.

We've made sure white images appear white on-screen, but we still need to make sure the CRT's RGB primary colors appear correctly on LCD monitors. This step should only be performed once, or if you notice color errors in your photos afterwards.

We want to reapply the settings we've already changed on the white image.

Now we'll prepare our image for color calibration:

Darktable opened to darkroom view, showing a photo of RGB color bars in the center, the "color picker" module with saved points at the left, the color graph in "RGB parade" vertical mode at the top right, and color calibration at the bottom right.
During color calibration you'll be comparing on-screen colors to your actual CRT. You can use the color picker to save image points to check their color values, and look at the graph's RGB parade mode to check color components.

Now compare your photo of the colorbars with the actual CRT screen. Depending on your camera, the photo's initial colors may be fairly accurate or incorrect (with or without "enhanced color matrix"). If you're starting from more accurate colors, you'll have less work to do, but it may be difficult to tell if your tweaks improve or harm color accuracy.

If you're already happy with how the colors look (and you get minimal clipping outside the blue colorbar), you can skip the rest of this section. Otherwise we can tune the colors to better match.

I'm assuming you performed color temperature correction in the "white balance" effect, and set "color calibration" β†’ "adaptation" to "none (bypass)"; if you've left "adaptation" at CAT16 and try adjusting the color mixer, you'll get much more unintuitive crosstalk between channel sliders.

Color calibration with "alternative white balance approaches"
  • If you corrected for white balance in "color calibration", you may find adjusting colors easier if you create a second "color calibration" module (right-click the overlapping squares icon to the right of the name). The new effect's "adaptation" should be set to "none (bypass)" by default, but you'll have to set its "gamut compression" to 0 (to avoid altering colors), then perform color mixing adjustments here.

Unfortunately if you're on a standard-gamut sRGB LCD, you will not be able to perfectly replicate the CRT's primary colors (especially blue) on-screen. This is because the LCD primaries do not match the CRT phosphors, and the CRT phosphors often lie outside the color gamut triangle defined by the LCD's primary colors.

If you have a wide-gamut display and darktable supports it on your OS, it's easier to calibrate CRT primary colors in a wider gamut, and clip out-of-range colors to their best sRGB approximation during JPG export. You can also export a wide-gamut image, which will reproduce more accurate colors on a wide-gamut display and ideally clip colors on a sRGB display. The problem is if your image viewer or web browser does not understand gamuts, the image colors will be scaled down to a standard-gamut display and all colors will appear too desaturated.

Experimental: Wide gamut color

On some OSes, darktable supports wide-gamut output to displays. My 2020 M1 MacBook Air actually has a wide-gamut display (tested with wide-gamut.com in Safari), but sadly darktable 4.8.0 only displays images in sRGB on macOS 14.4 due to GTK or Cairo limitations.

On other OSes you may be able to pick a display profile, either detected automatically or installed to ~/.config/darktable/color/out, though I don't have a wide-gamut monitor to test on, and don't know if wide-gamut display works on X11, Wayland, or Windows. In any case you can set the "output color profile" module to Adobe RGB or similar, then export images (as JPEG? something else?) and view them on a wide-gamut-compatible image viewer, OS, and display.

To test how exported images will look in various browsers/apps, Webkit offers test images to check if wide gamuts are supported, clipped, or misinterpreted as sRGB.

  • If your app and monitor supports wide gamuts, the first picture will have brighter shoes on Adobe RGB, and the second picture will have a brighter background on Display P3.
  • If your app misinterprets wide gamuts as sRGB, the second red picture will have a desaturated Webkit logo on Display P3.

You may not be able to get real-world images looking perfectly like the CRT. This may be because your LCD monitor's gamma curve isn't fully accurate, you can't tune parameters well on a narrow-gamut display pipeline, or something else I don't know. Additionally, different LCDs actually have different primary colors and gamma curves!

You can test your new style on images containing bright colors, skies, and skin tones, to verify you reproduce all colors accurately and adjust if needed (update the style and test on color bars again as well as other images).

Reducing image noise

Dark portions of an image are more prone to noise than lighter areas. We will be tuning denoising algorithms to correct these areas of the image while minimizing loss of fine detail.

Dark portions of a photograph are more prone to noise than lighter areas. In addition, CMOS sensors can have leaky pixels which produce points of stray color even with no incoming light. Both issues can be alleviated using denoising algorithms, though dark noise reduction reduces fine image detail (by an acceptable amount if you've exposed the image for long enough).

Raising CRT brightness (black level)

People online will suggest increasing the brightness (black level) of a CRT to make shadows show up better in pictures, since cameras generally don't export to JPG with enough dynamic range to make out detail in deep shadows. When photographing in RAW mode, this will reduce noise in shadows (since there's a larger difference in photon count between light and dark gray than dark gray and black). However, the image will look washed out and gray, unless you enable filmic in Darktable, or fine-tune a tone curve effect, to bring black levels down to true black and reduce gray tints to colors.

  • I've tried raising the CRT brightness for a color bars image, but ended up with inaccurate primary colors even after trying my best to remove gray and calibrate colors. If you take images of actual scenes, they can come out with good enough colors that most viewers will not find objectionable.
    • Raising brightness to reduce dark noise may be worth doing, if you're shooting single-frame exposures of a monitor (rather than long exposures to gather more light at lower ISO).
    • I do not plan to raise brightness and manually darken shadows, when taking multi-frame exposures of still images.

Preventing moire

You may have noticed colorful stripey patterns in some photos you've taken. Darktable has multiple ways to prevent or reduce moire patterns.

Colorful moire is first exposed in darktable's "Demosaic" step, which uses various algorithms to recover a full-color image from a Bayer matrix where each pixel only records one of red, green, or blue channels. Picking different algorithms can produce or avoid colored moire patterns when processing white or colored areas of the CRT image.

You may still have some moire remaining on your image; this happens more often if you prioritize sharpness over moire reduction when initially taking your photo. Even though LMMSE is very effective at eliminating softer colored moire patterns, it cannot fully correct images with too much fine phosphor detail (because when the sensor samples high-frequency textures, they alias to low frequencies which cannot be reliably distinguished from regular image content). Usually the remaining moire is acceptable and not distracting, but there are techniques to combat this further.

Phosphor smoothing

You may have noticed uneven clipping in bright areas, even when the average color of a region is below full monitor brightness. This happens because scanlines or sharply-focused phosphors concentrate colored light into narrow regions of the image, which exceed the monitor's maximum brightness of that color. When this happens, darktable limits the pixel's color to your monitor's peak value, resulting in undesirable color distortion and often moire because different areas of the image clip differently.

You can prevent phosphor clipping by blending bright pixels with neighboring pixels, producing an area of more uniform color. This is effective at both preventing clipping and reducing fine detail that would increase the JPG file size. However it may not be sufficient on photos of CRT TVs with large phosphors, where small redistributions would not fully prevent clipping and heavy blurring would erase visible phosphors. In this case you'll have to blur the highlights as much as you're comfortable with, then pick between clipping, reducing exposure, enabling dynamic range compression like "filmic rgb" and tuning the settings to look good, or exporting a HDR photograph.

I blend bright pixels with neighbors using the "diffuse and sharpen" module. Because configuring this effect and parametric masks is a deeply complex task, I've created two presets for this module. You can download and apply these presets to your photos, then adapt them as needed to suit your CRT and camera.

Now let's apply these presets to your image.

Now let's apply the second preset:

Sharp phosphor patterns can also interfere with "color calibration" by creating negative colors; by default this creates moire, but if you uncheck "clip negative RGB" you get black spots instead. To avoid negative colors, we can move the "weak2" effect below "color calibration":

Now compress history and save your style as "v0d smoothing". Make sure to uncheck orientation, and uncheck "raw black/white point" unless you've adjusted it manually.

Straightening tilted images

It's likely your camera will not be perfectly level with the monitor. The lens may be tilted up or down, the camera may be pointed towards the left or right of the screen, or the camera may not be level relative to the monitor. This can be fixed using the "rotate and perspective" module.

Once you're straightened an image, you'll want to rotate other images at the same tripod position to be level as well. First compress the image history (to workaround the bug causing duplicated modules when creating styles).

Removing gray backgrounds

If you want to include bezels in your photos and make them visible, you will need ambient light in the room which will be scattered by the CRT display. This creates a gray tint to the display, which is visible both in person and photographs. There are tone curves like Filmic which can remove black levels from pictures (and you may prefer them!), but I use more targeted approaches which subtract the gray tint without affecting image colors beyond that.

Darktable has multiple tools which can remove ambient light. Unfortunately darktable doesn't have the best support for subtracting a "gray field" photograph of the CRT's color in room lighting, so we have to use various hacks to achieve this, with varying tradeoffs. One approach to uniformly remove ambient light from a photo is to adjust the "raw black/white point" to subtract a custom threshold for light. This is optimal for linearity and works on colored backgrounds, but does not allow you to vary the correction over the area of the image or exclude the bezels; I still like this approach because these were not as important for my use case.

As a warning, if you are saving "raw black/white point" to a preset or style, on some cameras the default "white point" can vary based on what ISO you take a picture with! This also causes my T2i's images at ISO 100 to appear more than half as bright in darktable as ISO 200, because the ISO 100 "white point" value is lower so darktable interprets sensor values as closer to full brightness.

Screenshot of darkroom view opened to "raw black/white point" module, with "white point" reduced to show black levels and black levels raised to clip shadows, and RGB parade set to vertical view in the top-right, a camera in the reflection
You can raise black levels to subtract out ambient light. Try setting the color graph RGB parade to both horizontal and vertical, to visualize the gradient of light.
Alternative methods to remove backgrounds

As an alternative to black levels, you can darken shadows using the "tone curve" effect with color space set to "RGB...", or the "base curve" effect, both with "preserve colors" set to "none". You'll have to take a picture of color bars both with and without ambient light (or increased monitor brightness), then try to match the colors of the two photos as much as possible. These two modules have minor differences:

The β€œRGB, linked channels” mode works in ProPhoto RGB and applies the L-channel curve to all three channels in the RGB color space... This mode makes the tone curve module behave in much the same way as the base-curve module, except that the latter works in camera RGB space.

The benefit of using curves is that you can mask the effects to the screen while preserving the CRT's surroundings in full brightness. The downside is that it's harder to build straight lines in linear light (regrettably darktable does not have a better way to apply curves-like effects in gamma space). If you're running a CRT at increased brightness (black level) to reduce shadow noise, tone (base?) curve is the best way I know to fix the elevated black levels and altered gamma, but it's difficult to get accurate colors (I'm not sure why, maybe because the gamma correction occurs in the "input color profile β†’ working profile" RGB space rather than the colors of each phosphor).

Ideally I'd build a custom "CRT color management" plugin module for darktable, but I don't know how to implement this. You'd first give it a picture of an unpowered CRT and let it find the background color or gradient. Then when you process a photograph, the plugin would subtract the background color, and (if you're raised monitor brightness) identify the input colors of phosphor primaries, transform the image into that color space and fit a curve to transform a high-brightness image back to the low-brightness counterpart, then return the image to the working colorspace using configurable phosphor primaries (with less crosstalk than "color calibration" in a generic color space). You could then optionally mask this effect to the screen alone.

Exporting images

Once you're happy with how your photos look, you can develop them.

You can switch to another program while darktable is exporting. Once it's finished exporting, the taskbar icon will flash.

Generally after I upload images to an online gallery (I use Google Photos, but disable comments and likes and photo uploading to avoid recording viewers' Google accounts), I move finished folders into a "done" subfolder to make it easier to find new images to share.