1 Song No song yet
The timeline pinned to the bottom of the window shows the song. Drag its amber handles to set the clip (hold Shift for fine moves, Ctrl + scroll to zoom in), or type exact times below.
Sound
No audio file? Play the official song on Spotify or YouTube and press Tap tempo on the beat a few times, so the cuts follow its tempo. Then record without sound in step 5 and add the song from Instagram's music library, starting it on a downbeat.
2 Photos
Drag a photo, or use its arrows, to change the order. The montage plays them in this order and loops back to the first.
These are sample photos of Tehran from Flickr, shared under CC BY 2.0. Add your own photos and they go away. If you post a reel with any of them in it, credit the photographers in the caption:
3 Lyrics
The first run downloads the listening model (about 80 MB, from Hugging Face) and keeps it in this browser for next time; your song never leaves the browser. Lines it was unsure about get a ? on the list and a dashed outline on the timeline. Moving one clears the mark. The engine is OpenAI's Whisper (base, MIT licence) running on ONNX Runtime Web and transformers.js.
No lyrics text? Find the vocal parts and type into the boxes yourself
Tap along plays the song and you hit Space as each line starts; one last tap ends the final line. Or drag the line blocks in the timeline below.
- ← → previous / next line
- Enter start here · Shift+Enter end here
- [ ] nudge start · Shift+[ ] nudge end
- In a time box: ↑ ↓ ±0.05 s, with Shift ±0.5 s, with Alt ±0.01 s
- Delete remove line · Ctrl+Z undo
One line per row. Wrap a word in *stars* to make it hit in the accent colour. Lines that stay in the same place keep their timing. Pasted LRC ([01:12.40] …) or SRT keeps its own timing.
How the lyrics look
4 Style
Each filter keeps its own settings. Colour changes take a moment to reach every photo; the one on screen goes first.
5 Export
Recording runs in real time with the sound on, at 1080×1920 and 30 fps. Keep this tab in front until it finishes; a hidden tab freezes the picture. Chrome and Safari save MP4, which Instagram takes directly. Firefox saves WebM.