AI-projekter
AI-projekt · 2026

Transskription og diktering,
lokalt på en MacBook Air

To Mac-apps, der gør dansk og engelsk tale til tekst med talere, tidsstempler og redigering. Alt kører på maskinen selv: ingen cloud og intet abonnement. Bygget på en uge med Claude Code, med mig som produktejer, testleder og kvalitetsdommer.

  • Claude Code
  • Python
  • Swift
  • MLX
  • Whisper
  • pyannote
Transskription-appen med et projektmøde mellem tre talere. Hvert afsnit har taler og tidsstempel, og ordet der afspilles er fremhævet.Transskription-appen med et projektmøde mellem tre talere. Hvert afsnit har taler og tidsstempel, og ordet der afspilles er fremhævet.
Projektmøde med tre talere. Teksten følger lyden ord for ord, og gult markerer, hvor to talte i munden på hinanden.
7 dage
fra første test til to apps i daglig brug
0 kr./md.
erstatter et cloud-abonnement
100 % lokalt
lyden forlader aldrig Mac'en
106 tests
automatiske tests af kernen
01 Udgangspunkt

Et abonnement jeg ville af med, og en arbejdsgang det ikke passede til

Jeg optager møder, telefonmøder og interviews, altid med deltagernes viden, fordi et præcist referat er guld værd. Til det betalte jeg for en cloud-tjeneste.

Jeg ville have tre ting, den ikke gav mig: bedre dansk, fuld kontrol over optagelserne og et værktøj bygget til den måde, jeg faktisk bruger teksten på. Den ender nemlig næsten altid i en samtale med en sprogmodel, hvor jeg får lavet referater, opgavelister og udkast.

Præcision før hastighed
Et forkert ord i et referat er værre end et par minutters ventetid.
Kun lokalt
Ingen cloud og ingen betalte API'er. Optagelser af andre mennesker skal blive på min maskine.
Almindelig hardware
En MacBook Air M2 med 8 GB hukommelse og ingen blæser. Ikke en arbejdsstation.
02 Resultatet

To apps, der arbejder sammen

App i Dock'en

Transskription

Træk en lydfil ind. Ud kommer tekst med talere, tidsstempler for hvert ord og lyd, der følger med i teksten.

  • Dansk og engelsk
  • Automatisk opdeling i talere
  • Ret tekst og talere, fortryd med ⌘Z
  • Kopiér til LLM med én knap
App i menulinjen

Diktering

Hold venstre ⌥ nede, tal, og slip. Teksten står der, hvor markøren er, i alle programmer.

  • Samme danske model som transskription
  • Tryk ⌥ to gange for lange dikteringer
  • Udklipsholderen bevares
  • Modellen bliver i hukommelsen mellem dikteringer
Transskript af et telefonmøde, hvor Torben spørger, om samtalen må optages, og kunden siger ja
Telefonmøde med en kunde. Optagelsen bliver aftalt, før samtalen går i gang.
Dialogen Ny transskription med titel, navne og fagord, sprog og antal talere
Ny optagelse: sprog, antal talere og navne, som sprogmodellen skal kende stavningen på.

Alle personer, firmaer og samtaler i billederne er opdigtede. Billederne er rigtige skærmbilleder af appen.

03 Arbejdsmetode

AI skrev koden. Jeg sørgede for, at det var den rigtige kode.

Projektet er bygget i tæt samarbejde med Claude Code. Min rolle var den, man har som produktejer og fotograf på en produktion: at vide, hvad der skal laves, og at kunne se, om det er godt nok.

A Spec

Faser med acceptkriterier

Før der blev bygget en eneste knap, skulle tre spørgsmål besvares med tal: Kan den danske model køre på Mac'ens grafikchip? Er den præcis nok på mine egne optagelser? Er den hurtig nok? Først derefter kom brugerfladen.

B Måling

Tal i stedet for indtryk

Hver test logger fejlrate mod den tidligere tjeneste, tid for hver fase og hukommelsesforbrug. Tidsstempler er i lokal tid, så jeg kan sammenligne kørsler på tværs af dage.

C Dommer

Mennesket afgør, hvem der har ret

En fejlrate viser kun, hvor to transskripter er uenige, ikke hvem der har ret. Derfor byggede vi en lytteside, hvor jeg selv afgjorde de største uenigheder, uden at vide hvilken model der stod bag.

04 Beslutninger

Beslutninger truffet på data

Et udvalg af de valg, der formede appen. Flere af dem er et nej til noget, der lød som en god idé.

01

Engelsk

SpørgsmålHvilken model skal transskribere engelsk?

TestTre modeller på en 42 minutter lang engelsk optagelse. Blind lyttetest af de 40 største uenigheder: Parakeet havde ret 24 gange, de to Whisper-varianter 6 gange hver.

BeslutningParakeet til engelsk. Den danske Whisper-model til dansk, fordi den også klarer engelske indslag uden at oversætte dem.

02

Stilhed

SpørgsmålWhisper finder på tekst, når ingen taler.

TestPå én optagelse skrev modellen "Ace." 337 gange i fire minutters stilhed. Tre løsninger testet; to af dem fjernede også rigtig tale.

BeslutningForsigtig talegenkendelse før transskription. Det, der springes over, vises i teksten, så man selv kan lytte og få det med.

03

Ordliste

SpørgsmålKan modellen stave navne rigtigt, hvis den får dem på forhånd?

TestNavnene givet til modellen som prompt, både som liste og som sætning: 20-50 ord forsvandt, der kom opdigtede sætninger, og navnet blev ikke rettet.

BeslutningFravalgt i modellen. Ordlisten sendes i stedet med til sprogmodellen i eksporten, hvor den faktisk hjælper.

04

AI-oprydning

SpørgsmålSkal en sprogmodel rydde op i teksten automatisk?

TestFejl, som en sprogmodel retter til noget plausibelt, bliver usynlige for den, der ikke selv læser hele teksten igennem.

BeslutningFravalgt. Eksporten ændrer ikke teksten, men forklarer sprogmodellen, hvilke fejltyper den skal regne med.

05

Diktering

SpørgsmålHvilken motor giver den hurtigste diktering uden at miste præcision?

TestSyv varianter af to motorer på 12 klip. En 8-bit-udgave af modellen gav identisk tekst med originalen på alle klip, på halv størrelse.

Beslutning8-bit-modellen på Mac'ens grafikchip. Den alternative motor (whisper.cpp) blev afinstalleret igen.

06

Hastighed

SpørgsmålHvorfor tager en kort diktering pludselig 18 sekunder?

TestMålingerne viste, at det ikke var modellen, men at andre programmer havde skubbet den ud af hukommelsen.

BeslutningMindre hukommelsesforbrug (1,8 → 1,0 GB) og en opvarmning, der kører, mens man taler.

05 Detaljer

Bygget til at stole på teksten

Gennemgå usikre ord

Tab hopper fra ord til ord, som modellen var i tvivl om, og afspiller netop det stykke lyd. Ret, tryk ↩, videre.

Gennemgang af et usikkert ord med afspilning og et felt til at rette det
Gennemgang 1 af 3: ordet afspilles, mens man retter.

Ret alle på én gang

Retter man et navn, foreslår appen at rette det samme sted andre steder. Uændrede ord beholder deres tidsstempler.

Et felt til at rette ordet Casper til Kasper med knappen Ret alle 2
"Casper" rettes til "Kasper" begge steder med ét klik.

Det, der springes over, bliver vist

Stykker uden tydelig tale bliver ikke bare fjernet. De står i teksten med Lyt og Transskribér, så intet forsvinder i stilhed.

Interview-transskript med to stiplede felter: 41 sekunder og 1 minut 16 sekunder uden tydelig tale
Interview: opsætning af kamera før og under optagelsen er sprunget over, men synligt.

Kopiér til LLM

Én knap lægger hele transskriptet på udklipsholderen med en forklaring til sprogmodellen: hvilke fejltyper den skal regne med, hvordan talere er fundet, og hvordan navnene staves.

# Telefonmøde: brief fra Nordhavn Bryghus

Om dette transskript: Automatisk dansk transskription, lavet lokalt med Whisper. Den kan indeholde fejlhørte ord, især navne, tal og fagudtryk. Opdelingen i talere er lavet automatisk ud fra stemmerne og kan være forkert enkelte steder. Brugeren har oplyst disse navne og fagord, som kan forekomme: Nordhavn Bryghus, Mette Aagaard.

Varighed: 00:18:40 · Talere: Torben, Mette Aagaard

---

[00:00:02] Torben: Hej Mette, det er Torben. Tak fordi du havde tid.

[00:00:08] Mette Aagaard: Hej! Ja, selvfølgelig.

[00:00:11] Torben: Inden vi går i gang: Er det i orden, at jeg optager samtalen? Den bliver kun transskriberet lokalt på min egen computer, så jeg kan lave et præcist referat bagefter.

[00:00:24] Mette Aagaard: Ja, det er helt fint. Det er da smart.
Uddrag af eksporten for det opdigtede telefonmøde.
06 Diktering

Tal i stedet for at skrive, i alle programmer

Illustration: en mail, hvor et dikteret afsnit lige er indsat, og menulinje-appen viser at den optager
Illustration: mikrofonen i menulinjen bliver rød under optagelse, og teksten lander i mailen.

Dikteringen er en lille app i menulinjen med den samme danske model. Den er bygget til hverdagen: ⌥ bruges også til @ og { på et dansk tastatur, så en optagelse starter kun, når tasten holdes alene. Teksten indsættes, hvor markøren er, og det, man havde på udklipsholderen, lægges tilbage bagefter.

  • Hold ⌥optag, så længe tasten holdes
  • ⌥ ⌥lås optagelsen til lange dikteringer
  • Escfortryd
  • Dansk eller engelsk, valgt i menuen
07 Teknik

Fra lydfil til redigerbar tekst

  1. 01Lydffmpeg, 16 kHz mono
  2. 02Tale fundetSilero VAD springer stilhed over
  3. 03Tale til tekstDansk Whisper på MLX · Parakeet til engelsk
  4. 04Talerepyannote finder, hvem der taler hvornår
  5. 05Flethvert ord får en taler og et tidsstempel
  6. 06Redigér og eksportéreditor, Markdown, tekst og LLM
Modeller
  • Whisper (dansk finetune)
  • NVIDIA Parakeet
  • pyannote community-1
  • Silero VAD
Kode
  • Python
  • MLX
  • FastAPI
  • JavaScript
  • Swift / AppKit
  • WKWebView
Kvalitet
  • pytest (106 tests)
  • Playwright
  • jiwer (WER/CER)
  • blinde lyttetests
Arbejdsform
  • Claude Code
  • spec-drevne faser
  • små commits
08 Status

I brug hver dag

Begge apps er i daglig brug. En halv times optagelse med flere talere tager omkring 13 minutter på en 8 GB MacBook Air uden blæser, og præcisionen er godkendt ved gennemlytning mod den tjeneste, den erstatter.

Det svære var ikke at få AI til at skrive kode. Det var at stille de rigtige spørgsmål, insistere på målinger og sige nej til løsninger, der så gode ud, men ikke holdt, når de blev testet på rigtige optagelser.

AI'en kan måle, hvor to transskripter er uenige. Hvem der har ret, kræver stadig et menneske, der lytter.
Kontakt

Har du en produktion eller en stilling hvor det her passer ind?

Jeg bor ved Aarhus og arbejder gerne hybridt. Skriv en mail, så tager vi en snak.