Skip to content

Repository files navigation

protokollet

Read this in English.

Version: 1.7.1 Författare: Jan Soja Skapad: 2026-03-26

protokollet är ett litet Windows-program som bor i systemfältet. Du klickar på Start när mötet börjar och Stop när det slutar — det spelar in både din mikrofon och övriga deltagare, transkriberar samtalet och sparar prydliga mötesanteckningar (sammanfattning, beslut och åtgärdspunkter) som en textfil du kan läsa i valfri editor.

Det är byggt för svenska möten: transkriberingen görs av KB-Whisper, Kungliga bibliotekets taligenkänningsmodell tränad på över 50 000 timmar svenskt tal — gjord för hur svenska faktiskt låter, dialekter inräknade. Andra språk fungerar också. Ingen GPU eller speciell hårdvara behövs.

Om integritet: Ditt ljud skickas till tjänsten berget.ai för transkribering och sammanfattning. Inget laddas upp någon annanstans, och inspelningarna stannar på din dator. Med standardinställningen (keep_audio: false) raderas ljudfilerna när transkriberingen är klar; avbryts eller misslyckas transkriberingen behålls ljudet så att inspelningen kan räddas. Använd bara programmet för möten du får spela in — kolla vilka regler som gäller och berätta för deltagarna.


Kom igång

Steg 1–3 gör du bara en gång. Sedan är inspelning bara steg 4.

1. Installera Python (engångsgrej)

Ladda ner och installera Python 3.10 eller nyare från python.org/downloads.

⚠️ På installationsprogrammets första skärm: bocka i rutan "Add python.exe to PATH" innan du klickar på Install. Den lilla kryssrutan är det som får resten av installationen att fungera automatiskt.

2. Ladda ner protokollet

På GitHub-sidan: klicka på den gröna Code-knappen → Download ZIP. Högerklicka sedan på den nedladdade filen → Extrahera alla till en mapp du kommer ihåg (t.ex. Dokument\protokollet).

(Kan du Git går git clone lika bra — samma resultat.)

3. Kör installationen

Dubbelklicka på setup.bat i mappen. Ett fönster öppnas och guidar dig genom allt:

  • kontrollerar att Python är installerat
  • installerar komponenterna programmet behöver
  • ber dig klistra in din API-nyckel från berget.ai

En gratis API-nyckel får du genom att registrera dig på berget.ai. Kopiera nyckeln, klistra in den i installationsfönstret när du blir tillfrågad och tryck Enter.

När det står "Setup complete!" är du klar.

4. Spela in ett möte

  1. Dubbelklicka på Recorder.bat. En rund ikon dyker upp i systemfältet (nere till höger på skärmen, vid klockan).
  2. Högerklicka på ikonen → Start Recording när mötet börjar.
  3. Högerklicka på ikonen → Stop Recording när det slutar.
  4. Efter en kort transkribering visas en avisering och dina anteckningar sparas i Dokument\Recordings (din användarmapp) som en .md-fil — till exempel 2026-04-01_14-31_budgetplanering-q3.md.

Skärmbilder

Högerklicksmenyn i systemfältet

Menyn i systemfältet. Högerklicka och tryck på "Start Recording"

Inspelningspanelen under inspelning

Inspelningspanelen: pulserande REC-ring, förfluten tid och ljudnivåer i realtid för mic och övriga deltagare.

Ikonen i systemfältet under inspelning och transkribering

Ikonen blir röd under inspelning och blå under transkribering.


Så fungerar det

  1. Start — Högerklicka på ikonen i systemfältet och välj "Start Recording".

  2. Inspelning — Två separata ljudströmmar fångas:

    • Mikrofonen (din röst)
    • Systemets loopback (övriga deltagare, via WASAPI)
  3. Stopp — Klicka på "Stop Recording" när mötet är slut.

  4. Transkribering — Varje ström skickas till berget.ai:s API (kb-whisper-large) för transkribering. Mikrofonljudet märks med ditt namn (konfigurerbart), loopback märks "Others".

  5. LLM-sammanfattning — Råtranskriptet bearbetas av Mistral till strukturerade mötesanteckningar.

  6. Resultat — två filer i inspelningsmappen:

    • transkript.md — den råa transkriberingen med talaretiketter, sparad så fort transkriberingen är klar (före sammanfattningssteget, så den kan aldrig gå förlorad)
    • protokollet, namngivet efter mötet (t.ex. 2026-04-01_14-31_budgetplanering-q3.md) — det är filen du delar, utan att hela ordagranna samtalet följer med:
    # budgetplanering q3 — 2026-04-01 14:31
    
    ## Sammanfattning
    Kort sammanfattning av mötet...
    
    ## Beslut
    - Viktiga beslut som fattades
    
    ## Åtgärdspunkter
    - Åtgärder med ansvariga
    
    ## Mötesanteckningar
    Renskriven prosaversion av samtalet...
    
    ---
    
    *Rå transkribering: [transkript.md](transkript.md)*

Systemfältet

Ikonfärg Betydelse
Grå Redo
Röd Spelar in
Blå Transkriberar
Orange Väntar på anslutning (transkribering i kö)

Högerklicka på ikonen för:

  • Start Recording / Stop Recording — manuell kontroll
  • Cancel Transcription — avbryt en pågående transkribering
  • Open Recordings — öppnar mappen med inspelningar
  • Settings... — öppnar config.json i din standardeditor
  • Quit — avslutar programmet snyggt

Under inspelning visas en liten alltid-överst-panel dockad ovanför systemfältets hörn med en pulserande REC-indikator, förfluten tid och ljudnivåer i realtid för din mikrofon och övriga deltagare — dra den vart du vill. En Windows-avisering visas när transkriberingen är klar.

Konfiguration

Redigera config.json (skapas automatiskt vid första körningen):

Nyckel Standard Beskrivning
whisper_model "KBLab/kb-whisper-large" Whisper-modell på berget.ai
llm_model "mistralai/Mistral-Small-3.2-24B-Instruct-2506" LLM för sammanfattning
my_name "Me" Ditt namn i transkriptet
language "sv" Transkriberingsspråk
keep_audio false Behåll WAV-filer efter transkribering
min_seconds 30 Släng inspelningar kortare än så här
output_dir "~/Recordings" Var inspelningarna sparas
api_base_url "https://api.berget.ai/v1" API-adress
prompt (facktermer) Ordlista som förbättrar träffsäkerheten

Facktermer

Fältet prompt i config.json hjälper modellen att känna igen ämnesspecifika termer. Anpassa det till din arbetsvardag:

"prompt": "Power BI, SQL Server, SSIS, SSRS, SSAS, Azure DevOps, DAX, T-SQL, ETL..."

Lägg till eller ta bort termer efter behov. Whispers prompt-fält rymmer max 224 tokens — standardlistan använder 213. Ingen omstart behövs — konfigurationen läses på nytt vid varje inspelning.


Felsökning

Inget händer när jag dubbelklickar på setup.bat, eller så står det att Python inte hittades. Python är inte installerat, eller så bockades inte "Add python.exe to PATH" i under installationen. Installera om Python från python.org, se till att bocka i rutan, och kör setup.bat igen.

Jag startade programmet men ingen ikon syns i systemfältet. Om du inte har angett någon API-nyckel ännu visas en ruta som ber dig köra setup.bat. Ikonen kan också vara dold — klicka på den lilla uppåtpilen (^) i systemfältet för att visa dolda ikoner.

Transkriberingen misslyckas eller ikonen förblir blå. Kontrollera internetanslutningen och att din berget.ai-nyckel är giltig och har saldo. Välj Cancel Transcription i menyn och försök igen. Tekniska detaljer skrivs till recorder.log i programmappen.

Spåret "Others" innehåller musik eller ljud från andra program. Loopback fångar allt systemljud. Stäng av ljudet i andra program (webbläsare, musik) under möten.


Vanliga frågor

Behöver jag en kraftfull dator? Nej. All tung bearbetning sker på berget.ai:s servrar. Vilken modern Windows-dator som helst fungerar.

Varför inte bara använda transkriberingen som är inbyggd i Teams eller Zoom? Tre ärliga skillnader. Modellen: KB-Whisper är byggd av KBLab på Kungliga biblioteket och tränad på över 50 000 timmar svenskt tal — i KBLab:s utvärderingar ungefär halveras felfrekvensen på svenska jämfört med OpenAI:s whisper-large-v3. Oberoendet: inspelningen sker lokalt (mikrofon + systemljud) och fungerar därför med vilket mötesverktyg som helst — Teams, Zoom, Google Meet, en telefon på högtalare eller ett rum fullt av människor — utan admininställningar eller extra licenser. Och resultatet är ett färdigt protokoll med beslut och åtgärdspunkter, bearbetat på svensk infrastruktur (berget.ai) — inte en undertextström.

Kostar det pengar? Programmet är gratis. berget.ai tar en liten slant per minut ljud (se API-kostnad under Tekniska detaljer — ungefär 0,09 EUR för ett 30-minutersmöte). Du behöver ett konto hos berget.ai.

Var sparas mina inspelningar? I mappen Recordings i din användarmapp som standard. Välj Open Recordings i menyn för att hoppa direkt dit.

Kan det spela in utan att jag klickar på Start? Nej — inspelning är alltid manuell, det är en medveten design. Du bestämmer när det spelas in.

Lämnar mitt ljud datorn? Bara ljudet skickas till berget.ai för transkribering. Se noteringen om integritet högst upp.

Vad händer om jag är offline när mötet slutar? En avisering berättar att inspelningen är sparad och att transkriberingen startar automatiskt så fort du är online igen (kollas var 15:e sekund) — ikonen i systemfältet är orange under väntan. Det överlever omstarter: stänger du programmet eller datorn innan dess plockas inspelningen upp och transkriberas nästa gång programmet startar. Cancel Transcription avbryter väntan — en avbruten inspelning transkriberas aldrig automatiskt, men ljudet behålls så att du kan köra retranscribe.py manuellt.


Tekniska detaljer

  • Ingen manuell ffmpeg-installation — ljudkonverteringen använder ffmpeg-binären som följer med paketet imageio-ffmpeg och installeras automatiskt under setup.
  • Talaridentifiering bygger på två separata strömmar (mikrofon respektive loopback) i stället för en diariseringsmodell. Det skiljer dig från "Others" men identifierar inte enskilda deltagare på distans.
  • WASAPI-loopback fångar allt systemljud, inte bara mötesappen. Om andra program spelar ljud under samtalet hamnar det i "Others"-strömmen.
  • Offlinedetektering — när du stoppar en inspelning avgör en snabb TCP-koll mot API-värden om transkriberingen startar direkt eller väntar. Under väntan kollas anslutningen var 15:e sekund och transkriberingen återupptas automatiskt. Nya inspelningar kan inte startas förrän väntan är klar eller avbruten.
  • Väntemarkör — en .pending-fil i inspelningsmappen markerar att arbete återstår (transkribering och/eller sammanfattning). Den tas bort när protokollet sparats eller vid avbrytning, och behålls vid fel eller avstängning — nästa programstart gör om exakt det steg som saknas: finns transkript.md redan görs bara sammanfattningen om (inget ljud behövs, inget betalas igen). retranscribe.py rensar den också.
  • Transkribering i bitar — ljudfiler delas i 2-minutersbitar, konverteras till mp3 och skickas en i taget med automatiska omförsök. Det undviker API-timeouts vid långa inspelningar.
  • Inspelningspanel — ett ramlöst alltid-överst tkinter-fönster (rundade hörn via genomskinlig färgnyckel) med pulserande REC-prick, tidräknare och nivåstaplar i realtid för mikrofon och loopback; dockat i arbetsytans nedre högra hörn, flyttbart.
  • API-kostnad — transkribering kostar ca 0,00005 EUR/sekund (ca 0,09–0,18 EUR för ett 30-minutersmöte beroende på debiteringsmodell; både mikrofon- och systemljudsspåret transkriberas var för sig). LLM-sammanfattningen kostar bråkdelar av ett öre per möte.
  • Inspelningar kortare än min_seconds slängs automatiskt.
  • Om transkriberingen avbryts eller misslyckas behålls råljudet (mic.wav, loopback.wav) i inspelningsmappen — även när keep_audio är false — så att du kan slutföra senare med python retranscribe.py "<inspelningsmapp>".
  • Två API-nycklar stöds: BERGET_API_KEY för whisper, BERGET_API_KEY2 för LLM:en (faller tillbaka på BERGET_API_KEY om den inte är satt).

Ändringslogg

v1.7.1 (2026-06-17)

  • Fix: sammanfattningen av långa möten timade ut. LLM-anropet hade en 120-sekunders gräns medan ett ~43 000 tecken långt transkript tar ~170s att sammanfatta — appen hängde i flera minuter (tre försök) och misslyckades sedan. Tidsgränsen är nu 300s med ett enda omförsök; transkriptet finns kvar och nästa start gör om sammanfattningen om den ändå skulle misslyckas

v1.7.0 (2026-06-11)

  • Nytt: varje möte ger nu två filer — transkript.md (den råa transkriberingen med talaretiketter, sparad före sammanfattningssteget) och protokollet, som länkar till transkriptet i stället för att bädda in det. Dela protokollet utan att hela ordagranna samtalet följer med
  • Fix: en misslyckad sammanfattning skriver inte längre en notis som felaktigt påstod att retranscribe.py kunde försöka igen (ljudet var redan raderat) — transkriptet sparas först, mappen förblir markerad, och nästa programstart gör bara om sammanfattningssteget
  • Fix: två inspelningar startade inom samma minut delar inte längre mapp (sekunder läggs till i mappnamnet vid kollision)

v1.6.1 (2026-06-11)

  • Fix: Cancel Transcription kunde verka hänga i upp till 10 minuter när transkriberingstjänsten slutade svara mitt i ett anrop. API-anrop får nu en timeout på 60 sekunder och alla omförsök sköts av programmets egen avbrytbara omförsökslogik
  • Fix: en mapp som redan innehåller ett protokoll transkriberas aldrig om vid uppstart, även om väntemarkören blivit kvar

v1.6.0 (2026-06-11)

  • Nytt: ljudnivåfönstret är nu en inspelningspanel — ramlös och mörk, dockad ovanför systemfältets hörn, med pulserande REC-prick, förfluten inspelningstid och tunna nivåstaplar för mikrofon och deltagare. Flyttbar som tidigare

v1.5.2 (2026-06-11)

  • Nytt: ett eget orange ikonläge visar när programmet väntar på internetanslutning (gick tidigare inte att skilja från transkribering), och verktygstipset visar hur många inspelningar som står i kö vid en återupptagning. Cancel Transcription fungerar även i det orangea läget

v1.5.1 (2026-06-11)

  • Nytt: ofärdiga transkriberingar överlever nu omstarter. Inspelningar som väntar på transkribering markeras på disk (.pending) och återupptas automatiskt nästa gång programmet startar — till exempel om du fäller ihop datorn medan du är offline. Avbrytning tar bort markeringen (en avbruten inspelning transkriberas aldrig automatiskt); retranscribe.py rensar den efter manuell återställning
  • Aviseringarna vid offline och fel ber dig inte längre hålla programmet igång eller köra retranscribe.py — återställningen är automatisk

v1.5.0 (2026-06-11)

  • Nytt: stoppar du en inspelning utan internet visas direkt en avisering om att transkriberingen väntar, och den startar automatiskt så fort du är online igen (anslutningen kollas var 15:e sekund; Cancel Transcription fungerar under väntan och ljudet behålls alltid)

v1.4.2 (2026-06-11)

  • Fix: en misslyckad transkribering (till exempel utan internet) visar nu en avisering om att ljudet är sparat och hur det räddas med retranscribe.py — tidigare gick programmet tyst tillbaka till viloläge utan besked
  • Fix: kvarlämnade WAV-bitar städas nu bort även när transkriberingen misslyckas halvvägs (tidigare bara vid avbrytning)

v1.4.1 (2026-06-04)

  • Fix: när en lång inspelning sparades kunde det ta flera minuter medan ikonen fortfarande visade rött ("Recording"); ett extra klick på Stop under den tiden avbröt transkriberingen och slängde ljudet. Ikonen visar nu "bearbetar" direkt när Stop trycks, extra klick under sparandet ignoreras, och avbrutna transkriberingar behåller numera ljudet så att det kan räddas med retranscribe.py i stället för att raderas
  • Fix: kvarlämnade WAV-bitar städas nu bort när transkriberingen avbryts

v1.4.0 (2026-06-02)

  • Guidad installation i ett steg via setup.bat: kontrollerar Python, skapar miljön, installerar beroenden och sparar din API-nyckel
  • ffmpeg följer nu med automatiskt (imageio-ffmpeg) — ingen manuell installation
  • Vänlig dialogruta vid första körningen om API-nyckeln saknas (tidigare avslutades programmet tyst utan besked)
  • Konsollfönstren som blinkade till under transkribering visas inte längre
  • La till .env.example, en MIT-LICENSE och en publik README med felsökning och vanliga frågor
  • Loggfiler versionhanteras inte längre

v1.3.0 (2026-06-02)

  • Flytande VU-mätarfönster visar ljudnivåer för mikrofon och loopback i realtid under inspelning
  • Autostart vid Windows-inloggning via genväg i Autostart
  • Transkribering i mp3-bitar med omförsök för stabilare API-anrop (stora filer delas i 2-minutersbitar)
  • Stöd för att avbryta pågående inspelning och transkribering
  • Beskrivande filnamn på transkript utifrån LLM-genererad mötestitel
  • Faller snyggt tillbaka på råtranskript om LLM-sammanfattningen misslyckas
  • Fix: hantera tomma ljudramar utan krasch
  • Fix: VU-mätarens trådning och upprensning vid stopp

v1.2.0 (2026-03-26)

  • LLM-efterbearbetning: strukturerad markdown med sammanfattning, beslut, åtgärdspunkter och renskrivna mötesanteckningar
  • Konfigurerbart talarnamn (my_name i konfigurationen)
  • Stöd för separat API-nyckel för LLM-anropen (BERGET_API_KEY2)
  • Utökad ordlista med facktermer (213/224 Whisper-tokens)
  • Startfilen bytte namn till Recorder.bat

v1.1.0 (2026-03-26)

  • Byte från lokal Whisper till berget.ai:s API (kb-whisper-large)
  • Manuell start/stopp av inspelning via menyn i systemfältet
  • Ordlista med facktermer via prompt i konfigurationen
  • Fix för distorsion i loopback-ljudet (nedmixning till stereo)
  • ffmpeg-beroendet borttaget
  • Tidsstämplar borttagna ur transkriptet

v1.0.0 (2026-03-26)

  • Första utgåvan
  • Inspelning av två strömmar (mikrofon + loopback)
  • Transkript med talaretiketter
  • Programikon i systemfältet med statusfärger
  • Windows-aviseringar när transkriberingen är klar
  • Konfigurerbar via config.json

About

Spelar in svenska möten, transkriberar med KB-Whisper och skriver protokoll med beslut och åtgärder. Öppen källkod, svensk AI-infrastruktur (berget.ai).

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages