Skip to content

Light Decoder

Point the camera at a blinking lamp and let the brightness be measured. Good for slow signals, which is what a hand on a torch produces anyway.

Beta Reads a blinking light through the camera. It works for slow, hand-made signals; at high speed the frame rate runs out.

 

Morse code

 

Text

 

Speed -
Brightness

The picture stays on your device. It is measured frame by frame and never stored, never sent.

The picture never leaves your device. Each frame is measured and thrown away - nothing is recorded and nothing is uploaded. Aim so that the light fills the marked square, keep the phone as still as you can, and give it ten seconds.

The frame rate is the limit

This is the one number that decides whether the tool can work at all. A phone camera delivers around 30 frames per second, so one frame every 33 milliseconds. A dot at 20 words per minute lasts 60 milliseconds - two frames. At that point a single dropped frame turns a dot into nothing or a dash into a dot.

Below about 10 words per minute there are six or more frames per dot and the reading is solid. That is not a real restriction: a hand on a torch produces 5 to 8 words per minute, and signal lamps at sea were worked at similar speeds for exactly the same reason - the eye needs the time as much as the camera does.

If you need to read fast machine-made light, the answer is not a better decoder but a faster camera. Some phones offer 60 or 120 frames per second in their own camera app; a browser rarely gets access to those modes.

How the measurement works

Every frame is scaled down and the average brightness inside the marked square is taken, weighted the way the eye weighs colors: green counts more than red, red more than blue. That gives one number per frame, and those numbers form a curve exactly like the one the audio decoder draws from a tone.

The rest is the same path: a threshold between the dark and the bright part of the recording, the runs above and below it become marks and gaps, and their lengths become dots, dashes and spaces.

One detail matters more here than with sound. Camera frames do not arrive at even intervals, so each measurement carries its own timestamp, and a change of state is placed halfway between the two frames it happened between. Assuming it happened exactly at one of them would double the timing error - and at three frames per dot, that error decides the reading.

Aiming it well

  • Fill the square with the light, and little else. The measuring area can be resized. A lamp that covers a tenth of the frame barely moves the average over the whole picture; inside a tight square it swings from dark to bright.
  • Hold the phone still, or brace it against something. Every wobble moves the lamp in and out of the square and shows up as a brightness change.
  • Avoid a bright background. The measurement is relative: it needs the difference between the lamp on and the lamp off. Against a bright sky there is barely any.
  • Watch the brightness curve. Clear steps mean the decoder has something to work with. A trace that wanders slowly is camera exposure adjusting itself, not a signal.

That last point is worth knowing: phone cameras keep adjusting exposure on their own. A lamp that stays on for a long dash gets dimmed by the camera while it burns. That is a real limit of reading light through a browser, and it is why this tool is marked as a beta.

Frequently asked questions

  • Is anything recorded?

    No. Each frame is measured for its brightness and immediately discarded. Nothing is written to storage and nothing is sent anywhere.

  • How fast can the light blink?

    Up to roughly 10 words per minute reliably, which is faster than most people signal by hand. Beyond that the camera runs out of frames per dot.

  • Can I read a light from a video I already have?

    Not yet - the tool reads the live camera. Reading an existing video file is planned.

  • It reads nonsense when nothing is blinking. Why?

    It should not: without a clear difference between dark and bright, the tool deliberately reports nothing rather than turning noise into letters. If it does read something, the measuring square is probably catching movement rather than a lamp.