IGTranscript

What comes back when a Reel is mostly music?

Not lyrics, and not a description of the song. You get one of two things, and which one depends on the music rather than on the length of the Reel. If the model heard a music bed behind no voice, it returns a short annotation in brackets — (smooth music) was the one measured on this machine — and this page strips that annotation before counting, finds 0 words left, and displays “No speech found” instead of a transcript. If the model heard nothing worth annotating, it returns [BLANK_AUDIO] or an empty string and the same heading appears. In both cases what it literally heard is printed as a tail on the same line, so the annotation is not lost: “it heard (smooth music) and nothing else.” Recognising song lyrics is a different task, and 0 of the 22,349 bytes of app.js mention lyrics, songs or instrumental passages at all.

InVideo WW

The rest of this page is the evidence: the 20-character regular expression that decides which text survives and why an asterisk does not, the five measured music beds and what each one cost in words, the 88 token ids the model is not allowed to emit and why that list cannot delete a song title, what a 20-second clip costs in windows and bytes when it holds 0 words, and the one sentence the three sites that outrank this one have about music across 226,553 characters of their own copy.

Which annotations survive the page, and which pass straight through

The decision is made in one place. Before any word is counted, render() runs replace(/\[[^\]]*\]|\([^)]*\)/g, ' ') over the model’s full text and then tests whether anything is left. Two shapes are removed and 0 others: anything inside square brackets, and anything inside round brackets. It is a 20-character pattern, it is applied to the whole string at once rather than line by line, and it is not anchored — so an annotation in the middle of a sentence disappears exactly like one on its own line.

The one thing the pattern cannot do is distinguish an annotation from your text. It does not know that a bracket holds a sound cue; it knows that a bracket is open and later closed, and it removes what is between. A round bracket inside an otherwise normal sentence — a date, an aside, the expansion of an acronym — goes the same way, because the expression never asks what is inside before deleting it.

Four model outputs entering the same regular expression. [Music] and (smooth music) are struck out by the pattern; *music* and a bare title pass through unchanged. A vertical divider separates what the page deletes from what it keeps, and an annotation line shows the four bracket characters the pattern looks for. One pattern, four outcomes Square brackets and round brackets are deleted. Nothing else is. what the model returned what the page keeps deleted kept [Music] 0 words · No speech found (smooth music) 0 words · the annotation is 2 *music* 1 word · written to the export a bare title, no brackets kept, counted, exported The four characters the pattern looks for: [ ] ( ) An asterisk is not one of them, so *music* is counted as a word.
The whole rule in one picture. The pattern is 20 characters long, \[[^\]]*\]|\([^)]*\), and it matches two things: text inside square brackets and text inside round brackets. The top two rows are deleted and the result is 0 words, which is what puts “No speech found” on screen — 9 characters in the first case, 16 in the second. The bottom two rows are not deleted and are counted: *music* comes to 1 word, and a bare title with no bracket at either end survives in full and is written to the .srt and .vtt. The divider is the point of the figure — the expression never asks what a bracket contains before removing it, so a legitimate bracketed aside in your own audio is deleted by the same rule.

Five music beds, measured, and what each one cost

Raising a music bed over speech is not the same as replacing speech with music, and the numbers from the two situations look nothing alike. In the measured runs on this machine, five versions of one 20-second clip were built by layering a music bed at four levels over the same voice, plus one room simulation. The reference was the model’s own clean output, not a human transcript, which is what the recorded counts below compare against.

Why the model’s token list cannot delete a song title

There is a second filter in the pipeline, and it works on ids rather than on text: the model’s own generation_config.json carries a suppress_tokens list that it is not allowed to emit. On the default checkpoint that list holds 88 ids, and every one of them is below 50363 — the highest is 50362, and the lowest is 1. The list is sorted ascending, and 23 of the 88 sit below 100, which is where the multilingual model keeps its punctuation and word-fragment tokens.

What a 20-second Reel costs when it has no words in it

Music Reels are usually short, which is the good news: a 20-second clip is one window, not two. The window is fixed by chunk_length_s: 30 at line 282, so anything up to 30 seconds is a single pass; the stride is a sixth of that, 5 seconds, and the jump is 30−2×5 = 20 seconds, which means a clip of 20 seconds or less is one window and 60 seconds is three.

The arithmetic runs the other way at the top of the range, where a long Reel stops being cheap. A 10-minute file is 30 windows and 115,200,000 bytes of float32 pushed through the model, against 38,400,000 bytes held at 16 kHz mono; 20 minutes is 60 windows and 230,400,000 bytes of window against 76,800,000 bytes of audio. On the five short beds nothing of that mattered — the answer took 3.1 s to 4.7 s and the panel’s number was “No speech found”. A song is the cheap case in bytes and the expensive case in usefulness.

What the three sites that outrank this one say about music

Across the 33 pages the three sites publish, 226,553 characters of body text once the heading lists and the scraper’s metadata are stripped, the word “music” appears 18 times. 0 of the 18 is about a Reel whose audio is a song. The words “lyric”, “instrumental”, “background music”, “music only”, “no speech” and “silence” appear 0 times each.

Seeing the annotation before the page throws it away

The annotation is not shown in the transcript box when the model found no speech, but it is not destroyed either: 1 regex deletes it and 1 branch of the message puts it back. Both branches of the panel build the same message, and one of them inserts what the model actually wrote.

Three lengths against the same 30-second window with a 5-second stride and a 20-second jump. A 15-second clip is one window, a 60-second clip is three windows that overlap their neighbours, and a 90-second clip is four. The overlap is drawn in grey in both directions. A bed with no words still pays per window window 30 s · stride 5 s · jump 20 s · 10 s shared between neighbours 15 s one window, 0 words 60 s w1 w2 w3 90 s shared grey bands: audio the model reads twice, 0 words from either pass every window costs 1,920,000 bytes of float32, whatever it holds a 440-second source: 22 windows, 677,160 ms pushed through, 74,669 ms of it overlapping
Where the bytes go on a clip that has no speech in it. Every window costs 1,920,000 bytes of float32 whatever it contains, and the windows overlap: 5 seconds at each end, so a 60-second clip is 3 windows of 1,920,000 bytes rather than 2. A 440-second source needs 22 windows on this schedule, and at 30,780 ms per window that is 677,160 ms of audio pushed through to produce 0 words — 74,669 ms more than the clip itself. The shaded bands are the audio the model reads twice. None of it is wasted in the sense of being wrong; it is simply spent on a file whose answer is “No speech found”.

Does a Reel with only music give me the lyrics?

No. The page runs a speech-recognition model, not a lyrics transcriber: the words lyric, song, instrumental and soundtrack appear 0 times in the 22,349 bytes of app.js, and the only music shape the code names is an annotation like [Music] or (smooth music). A Reel whose audio is a song and nothing else produces no transcript here — the panel shows “No speech found” and tells you what it heard instead, which is the annotation.

Is that annotation the song title?

No, and it is not a description of the song either. The 99 language tokens in the model’s config are the only per-language switch it has; there is no “song” token and no second task slot to reach one. (smooth music) is a phrase the model emits to say “there is music here and no words I can write down”; it carries no key, tempo, artist or title. Because the page deletes it before counting, you will only see it as the tail of the no-speech message, where it is printed inside the sentence rather than in the transcript box.

Will a song title written without brackets show up as a transcript?

Yes, if the model writes one. The strip pattern only removes text inside square or round brackets, so a bare title is counted as words and written into the .txt, .srt and .vtt exports like anything else — as is *music*, which the comment at line 410 leaves alone on purpose. Neither is a recognition feature; both are lines the model happened to produce that the page has no reason to delete.

Why does a voice under loud music still give me a transcript?

Because a voice is still in the signal, and 4 of the 5 measured music beds returned a transcript for exactly that reason. Measured on this machine, a 20-second clip with a music bed 12 dB above the voice returned 15 words against 37 in the clean run — badly damaged, but not empty, and the panel headed it “Transcript” rather than “No speech found”. The empty case is when there is no voice at all, not when the music is loud.

Does turning timestamps on change anything for a music-only Reel?

No. The timestamp switch writes one line per segment, and a segment is built from the text the model returned; when the strip leaves 0 words the panel takes the no-speech branch in both switch positions, so the heading, the message and the empty transcript box are identical.

Last checked: 3 November 2026. The source counts were read from the deployed files on this machine: app.js is 22,349 bytes, with “music” 8 times (all inside the annotation comment and its message, lines 397–410 and 435), “lyric”, “song”, “instrumental”, “noise”, “threshold” and “vad” 0 times each, chunk_length_s: 30 at line 282 and task: 'transcribe' at line 280. The strip pattern, the two annotation comments and the measured “(smooth music)” result are quoted from lines 397–416. The window arithmetic — 5 seconds of stride, 20 seconds of jump, 1,920,000 bytes a window, 15,360,000 for eight windows, 1.489 of the audio, 640,000 for the 16-bit file, 60 windows and 115,200,000 bytes for 20 minutes, 22 windows and 677,160 ms of overlap on a 440-second source — was computed in Python on this machine from chunk_length_s, RATE = 16000 and the 4-byte float32 sample the Web Audio spec specifies, and every figure was printed before it was written down. The token ids, the 88 suppressed ids and the two forced decoder positions were read from the model’s own generation_config.json downloaded from huggingface.co. The five music-bed runs (37, 34, 35, 35 and 15 words, 3.1–4.7 s, RT60 0.6 s room at 45 words) are quoted from the 20-second fixture run recorded on this machine, where the reference was the model’s own clean output rather than a human transcript. The competitor figures cover 33 pages and 226,553 characters of body text held in this site’s benchmark directory, measured after the heading lists were stripped; the quoted sentences are copied exactly and attributed to the site that publishes them. What is not measured here: whether a real Instagram song comes back as a round-bracket or a square-bracket annotation for a given track, and whether a well-known melody ever returns its title in plain text — this page has not run a copyrighted song through the model and does not claim either outcome.

If the question is what you can do with words you do have, what to do with an Instagram transcript covers the three exits. If the words came out wrong rather than missing, why a video will not transcribe walks through the five causes in order. For a Reel in two languages, a Reel that mixes English and Spanish explains why one language is chosen for the whole file, and for the exact case that returns nothing at all the no-captions page sets out the two files that fail before the model is reached.