Bristlenose.

Meet Bristlenose, a tool for user-research interview analysis.

Drop a folder of recordings. Get transcripts and quotes, organised by journey, theme and sentiment. Analyse with your own tags, expert AI codebooks, or connect an agent. Export to Miro or spreadsheet.

macOS

Runs on macOS 15 (Sequoia) or later, on Apple Silicon.

Linux

Free and open source. The Snap bundles Python and FFmpeg, and runs strictly confined.

Windows

>pipx install bristlenose Setup guide

Free and open source. Bristlenose runs from the command line. You will need Python and FFmpeg.

All three states

What each platform sees on arrival. Only one is ever on screen; these are side by side so the set can be judged without clicking.

data-platform="mac" — detected on macOS
macOSWindowsLinux
Download for Mac

Runs on macOS 15 (Sequoia) or later, on Apple Silicon.

data-platform="linux"
macOSWindowsLinux
Get it from the Snap Store

The Snap bundles Python and FFmpeg.

data-platform="windows"
macOSWindowsLinux
>pipx install bristlenose

Bristlenose runs from the command line. You will need Python and FFmpeg.

Prior art

Rendered, not fetched — the markdown of these pages shows their no-JS fallback, which is a different (and separately useful) thing.

ProductDetectsSwitcherWhat was taken
OllamaYes — /download resolves server-side to /download/mac Icon tab row inside a <nav>, selected tab gets a pill The mechanic. Tabs are real links to real URLs, so they survive JS being off and can be sent to someone. Rejected the icon-only labels — see E4.
VS CodeYesNone — one button, plus a 12px link reading “Web, Insiders edition, or other platforms” Hero restraint, and the fallback: with JS off the page renders all four platform buttons rather than nothing.
SignalYesA “Not on Mac?” heading below the button Plain-language escape hatch. Beats “Other platforms” as a phrase, though a hero has no room for the heading.
ZedNoAll three stacked; the segmented control is Stable/Preview, not OS The shell one-liner sits exactly where the Download button sits on the other two. That is the licence for E5.
TailscaleHorizontal platform tab row “Install with one command” — same treatment of a command as a primary action.
GhosttyNoSection headings per platform What the JS-off state of this variant looks like.

Flagged — decide before this ships

The Snap has no stable channel. The store API returns one entry: latest/edge, 0.27.0, amd64, released 22 Aug 2026. So a bare sudo snap install bristlenose fails — it needs --edge. The page never says otherwise: it prints no command, and the badge points at the store listing, which shows the real state. Naming the channel in the note was tried and cut as inside baseball — which is the right call, and it means nothing on the page now discloses this. The fix is a stable release, not copy.

The install doc does not mention Snap at all. docs-src/install.md § Linux offers only pipx and uv, while the homepage has carried the Snap badge throughout. One of the two is wrong.

Android lands on macOS. Android reports a Linux platform string, so honest detection would send a phone to the Linux tab and offer it a Snap. There is no mobile build at all, so the script sends mobile to the flagship instead. Worth a look if mobile traffic is non-trivial.

arm64 Linux is unserved. The only Snap revision is amd64. A Raspberry Pi or an Ampere box gets a badge that leads to a store page with nothing for it.

variant E — platform CTA