Skip to main content
blink

Voice notes on a Blink — playing them, reading them, copying them

When you record a voice note on a Blink, two things are kept: the audio itself and a transcript of what was said. You will find both on the Blink's own page, and again on its edit page, under "Media and files".

The transcript

The transcript is produced automatically after the recording is saved. While that is happening you will see "Transcription pending"; if it could not be produced you will see "Transcription failed" instead, and the audio is still there to listen to.

Copying a transcript (2026-09-10)

Next to the word "Transcript" there is a small copy button. Pressing it puts the whole transcript on your clipboard so you can paste it into an email, a document, or anywhere else. The button shows a tick for a moment so you can see it worked — you do not have to hover over anything or guess.

It is on both the Blink page and the Blink edit page, because those are the two places a transcript is shown.

If it says copying was blocked

Some browsers refuse clipboard access — most often an older iPhone browser, or any browser on a page that is not served over a secure connection. If that happens the page tells you and asks you to select the text and copy it by hand. It will not pretend to have copied something it did not: a copy button that fails quietly is worse than none at all, because you would paste the wrong thing without knowing.

When the audio has been removed

The audio file can be deleted while the transcript is kept — useful when you want the words but not the storage. In that case the player is replaced by the line "Audio file removed — transcript kept below." and the transcript, and its copy button, carry on working normally.

For developers

The control is one shared partial, templates/blink/_transcript_copy_button.html, included by both blink_detail.html and blink_edit.html — they render the same audio-card block and the two have drifted before. Its glyph comes from the icon registry ({% of_icon "copy" %}), so re-pointing "copy" at /adminapp/icons/ changes it everywhere.

The behaviour is static/js/of-copy.js, delegated from document so it covers every audio card on the page and binds once however many times the partial is included. Give any button class="js-of-copy" and data-copy-target="<element id>" to reuse it.

The feature detection is not optional. navigator.clipboard is undefined on a non-secure origin and on older iOS Safari; calling it unguarded throws, the handler dies, and the button does nothing at all with nothing in the console. There is an execCommand fallback behind it, and if both fail the failure is announced rather than swallowed.

🪐 OrbitPilot

Create a free account and I'll remember your conversations — sign up

🧠 Memory status