Pine Private Interview & Notes Environment

Qualitative research, fully offline.

PINE transcribes your interviews, separates the speakers, and lets you code the transcript — all of it on your own machine. After setup it runs with the network off. It's open source, so you can check that yourself.

Windows 10/11 · macOS 12.3+ · Python 3.11–3.13

handover-study_P2.m4a 17:00 / 48:31 2 speakers Transcribed
00:0012:0824:1636:2348:31
16:08 Mod

Walk me through the last time you handed a case over to someone else.

16:17 Mary

I print it out. All of it, and then I mark it up by hand — the notes field only takes two lines, so there is nowhere else for any of it to go.

16:32 Mary

And I keep a second spreadsheet for the things the system won't let me record. Everybody on the team has one.

16:47 Mod

Does anyone else ever see that spreadsheet?

16:50 Mary

My lead, if she asks for it. Which makes the spreadsheet the real record and the system the paperwork, doesn't it.

Pain point Workaround Insight Confusion 3 codes · 1 comment

Why it exists

Privacy.

The transcript is made on your machine: no additional services, no leak risk, nothing shared while you work. Your participants’ words never become training data.

Rigor.

A model could group the quotes in seconds, and it could be confidently wrong — coding them yourself is how you know which it is. When there is no time for that, the export takes the transcript wherever you send it, prompt and all.


The loop

Three steps of work, one of waiting.

Create a project, fill in the brief, drop the recordings in. Transcription and diarization run in parallel with an ETA calibrated on your own runs, so you can leave and come back.

Step 01

Upload

Drop in a recording, or a Zoom folder with a separate track for every participant.

Step 02

Wait (a few minutes)

Whisper large-v3 on your GPU, speakers separated by pyannote alongside it. Queue the whole study before you leave; it works through the recordings one by one.

Step 03

Analyze

Highlight any quote, give it a colour, add a comment. Rename speakers, fix the transcript, import a codebook from another project, group codes into themes.

Step 04

Export

Hand the transcript to a colleague or an LLM with your codes and comments intact. Turn on PII removal and names, emails, phone numbers and addresses become tags like [REDACTED].

Privacy & network

Block the internet. PINE won’t notice.

Setup needs the internet: Python packages and about 3.1 GB of models. After that, disconnect the machine and everything still works — because nothing was ever going anywhere.

  • Telemetry is switched off at the source

    backend/run.py disables HuggingFace, pyannote, OpenTelemetry and W&B reporting before the app is even imported.

  • The whole app is a local page

    It opens at pine.localhost:5000 in your own browser. Close the last PINE tab and the backend shuts down with it.

  • PII removal before anything leaves

    An optional GLiNER multilingual pass strips names and identifiers from an export, with a sensitivity slider you control. It runs locally too.

  • Share findings without the audio

    A transfer package is a ZIP of transcripts, annotations and metadata — the analysis, with the participants' voices left behind on your disk.

One exception

The first time you transcribe a language other than English, PINE goes online once to download the language pack for it. After that it sits on your disk like everything else.

Don’t take my word for it

Every line that runs on your machine is in the repository, launchers included. Give the code to an LLM and ask for a security review — for example:

Review github.com/paul815/pine for anything that could send data off the machine: network calls, telemetry, update checks, uploads. List each one, what triggers it and what it sends.

What’s in the box

STT modelA researcher’s tool.

Built for how research actually runs: a brief up front, many conversations in the middle, synthesis at the end.

Transcription

  • Whisper large-v3 on your GPU — CUDA on Windows, Metal on Apple Silicon
  • Language set by hand or detected
  • pyannote diarization, running in parallel rather than after
  • Per-speaker tracks for Zoom folders and multi-channel files
  • Chunking for long files, crash recovery, live progress with an ETA calibrated on your own runs

Analysis

  • Project brief — objective, questions, hypotheses, stakeholders, guide
  • Participant segments with screener questions, and filtering by segment
  • Codes on any quote, with colours, plus researcher comments
  • Themes — every quote per theme on the Codes screen
  • Attachments: PDFs, decks, client feedback

Output

  • Export one recording or the whole project
  • Your choice of format — Markdown or ODT, codes and comments included
  • Toggle comments, codes, project and participant details
  • Two saved LLM prompts, prepended to the export
  • Optional PII removal with a sensitivity slider

Housekeeping

  • Automatic backups on startup and on a schedule
  • Retention rules, optional media, safety snapshot before restore
  • Link mode — keep recordings where they already are
  • Switch transcription models after setup
  • Keyboard shortcuts, display settings, reset

Install

Get PINE running.

Windows Setup_WIN.bat
macOS Setup_MAC.command
First launch: Windows and macOS will ask for permission

The launchers are unsigned scripts, so both systems stop them the first time. That is about a missing paid developer certificate, not about what is inside.

Windows

A ZIP from GitHub marks every file as downloaded from the internet, so you get “publisher could not be verified” — or a hard block if Smart App Control is on. Right-click Setup_WIN.bat → Properties → tick Unblock.

Don’t switch Smart App Control off to get past it: on Windows 11 it can’t be switched back on without resetting the OS. Cloning with git avoids the prompt entirely — files git creates carry no such mark.

macOS

Gatekeeper calls the file “from an unidentified developer”. Right-click Setup_MAC.commandOpen, then Open in the dialog. macOS remembers the choice, and every later start is an ordinary double-click.

No Open button? Double-click the file once, then go to System Settings → Privacy & Security and press Open Anyway.

Setup runs once, in five steps: system check, modules, storage, HuggingFace token, download. The token is free and only needed to accept the pyannote licence — create one at huggingface.co/settings/tokens and accept the conditions on pyannote/speaker-diarization-community-1.

Unpack the release somewhere permanent — the app lives where you put it — and double-click the launcher for your OS. It builds the virtual environment, installs what it needs, starts the app and opens your browser.

Requirements
OSWindows 10/11, or macOS — Metal needs 12.3+, older runs on CPU
Python3.11, 3.12 or 3.13 — the installers find it themselves
Disk12 GB free — models ~3.1 GB, ML packages take the rest
RAM10 GB recommended; setup warns you below that
GPUOptional. NVIDIA + CUDA is the fast path, Apple Silicon uses MLX, no GPU falls back to CPU at roughly 10× slower
AccountA free HuggingFace token, for the diarization model licence