An SpO2 simulator where the trace fails for the right reason
patientmonitorsimulator's plethysmograph quality is driven by perfusion pressure, not by the oxygen saturation number, because those are two separate clinical failures that a training tool should teach separately.

Two waves, and the notch falls out of the gap between them
Real pleth traces don't just rise and fall in a single smooth arc. patientmonitorsimulator builds the waveform from a forward systolic wave plus a reflected diastolic wave, and the small secondary bump you see on a real trace, the dicrotic notch, emerges naturally from the timing gap between those two waves rather than being drawn on afterward as decoration. It's the same underlying construction used for the arterial pressure trace, because the two waveforms come from the same physiology.
A clean saturation number can still come with an unreadable trace
Saturation and perfusion are not the same failure, and treating them as one is the most common shortcut a simplified simulator takes. A deeply hypoxic patient with strong peripheral blood flow can still give a clean, easy-to-read pleth trace. A patient in shock with a perfectly normal saturation reading can give a trace that's almost unreadable, because the problem is peripheral perfusion, not oxygenation. patientmonitorsimulator keeps those as independent controls, so a trainee has to actually look at the waveform quality rather than only the number.
Poor perfusion is its own failure mode, not a lower number
A dedicated poor-perfusion control lowers the trace amplitude and adds noise, and also drops the displayed SpO2 reading to a fixed, falsely low value, independent of whatever the real commanded saturation is set to. That's what a cold finger or a badly taped probe actually does on a real monitor: it reports a wrong number, not a lower version of the true one. Turning the control back off restores the real reading immediately, because the underlying commanded value never changed.
Cardiac arrest means no signal, not a leftover number
In any pulseless rhythm, the SpO2 number and the pleth trace both go blank rather than continuing to show a plausible-looking reading. A pulse oximeter has nothing to measure without a pulse, and a training monitor that keeps displaying 98% next to a flat trace teaches the wrong lesson at exactly the moment it matters most.