Tool · deployed

Mawjify

A recording and a picture in, a waveform video out

4min 40s

to export a 2-hour recording

25.7×

faster than realtime

3.3ms

mean audio offset (a frame is 33 ms)

Mawj (موج) is Arabic for wave. Mawjify takes an audio recording and turns it into a waveform video: choose any image, lay the moving waveform over it, and export. It is made for long recordings, up to two hours, and it is a first release — the editor is built so more can be added to it, such as templates, video backgrounds and captions.

Your image and your audio are never uploaded to a server, an outside program or any other service. Everything is processed in the browser on your own device; nothing needs an account and no server renders anything.

That is enforced rather than promised. The page ships a Content-Security-Policy that allows no outside connections, so the browser itself would block an upload; the privacy page only describes what the browser already guarantees.

1 Listen
The recording is decoded as a stream, never whole, and reduced in a worker to 200 loudness readings per second. Loudness is scaled against the 95th percentile, so one cough does not flatten the lecture around it.
2 Draw
One pure function draws a frame for any moment in time, and the preview and the export both call it. Frame i is drawn at exactly i divided by the frame rate; time is never accumulated, so a frame cannot drift from its neighbour.
3 Encode
The timeline is cut into ten-second segments, encoded on up to four workers at once, and joined in order into a single MP4 with H.264 video and AAC audio.
4 Save
Where the browser has a save-file picker, the video streams to disk as it is encoded. Elsewhere it is written to the browser’s private storage and then downloaded. A long export is never held in memory as one blob.

The part I would defend is the encoder. The obvious choice is the hardware one, and it is the slow one: 6.4× realtime however many workers it was given, against 12× for a single software encoder and 20× for two to four. So the export runs software H.264 in parallel and keeps hardware as the fallback. The price is files about one and a half times larger, because the software encoder spends its whole bit budget on what is mostly a still picture. I took the speed.

The second is a bug the measurements found. Audio that is not already AAC — MP3, WAV, most voice recordings — is re-encoded, and the encoder starts 2,112 samples late, which put the sound 45 ms behind the picture. That is inaudible in a lecture, which is exactly why it took a click track to see. The fix feeds the audio earlier by that delay and records the shift in the file, and the same click track now measures the offset above, with all 60 of 60 clicks paired.

Voice recordings broke one more assumption: they are often 22.05 kHz mono, which Chrome’s AAC encoder refuses outright. The end-to-end test found it, and audio below 32 kHz is now resampled before it is encoded.

Try itBring a picture and any recording