Skip to content

idrsdev/phyrin

Repository files navigation

Phyrin — Audio Transcription & Analysis Platform

Upload audio, get a transcript with speaker labels, AI summary, quotes, chapters, and action items.

Self-host or fork. MIT licensed.

Features

  • Transcription — upload any audio or video file, get a full transcript in under a minute
  • Speaker detection — automatically identifies and labels who said what
  • AI report — summary, key takeaways, topics, entities, and at-a-glance stats
  • Article generation — AI-written article from your transcript
  • Notable quotes — verbatim quotes with speaker attribution, timestamps, and context
  • Chapters — timestamped sections with timeline, progress tracking, and YouTube-format export
  • Action items — extracted tasks with checkboxes
  • Ask AI — chat with your files. Ask questions about a single recording or search across all your transcripts
  • Search — full-text search across all transcripts and filenames
  • Share — generate a public link to any transcript with full report
  • Export — download as TXT, SRT, VTT, or Article (.md)
  • User accounts — email/password or Google OAuth, email verification, password reset

How It Works

Upload audio → AI transcribes & identifies speakers → AI generates report, quotes & chapters → View on dashboard

Processing happens in the background. You get notified when your transcript is ready.

What You Need

At minimum, you need accounts with three services to get Phyrin running:

Service What it does Free tier
Deepgram Transcription AI $200 credit
OpenAI Report generation (summary, quotes, chapters) Pay-as-you-go
Cloudflare R2 Audio file storage 10 GB free

Database — Any PostgreSQL database works. Neon (free tier), Supabase, or a local Postgres via Docker.

Redis — Required for background job processing. Runs as a local Docker container — no external service needed. The included deploy workflow handles this automatically.

EmailsResend is optional (3,000 emails/month free). The app works without it.

Hosting — you need a server to deploy on. A $4–6/month VPS is enough to start.

Setup

Each package has its own .env.example with the variables it needs. See packages/api/.env.example, packages/worker/.env.example, and packages/web/.env.example.

Setup is about 30 minutes if you're comfortable with a terminal.

1. Install dependencies

pnpm install

2. Configure your environment

Copy the .env.example in each package and fill in your values:

cp packages/api/.env.example packages/api/.env
cp packages/worker/.env.example packages/worker/.env
cp packages/web/.env.example packages/web/.env

3. Set up the database

cd packages/api
pnpm db:migrate

4. Start Redis

docker run -d --name phyrin-redis -p 6379:6379 redis:alpine

5. Run

pnpm dev:api      # API on :4000
pnpm dev:web      # Frontend on :3000
pnpm dev:worker   # Background worker

Open http://localhost:3000 and create an account.

Deployment

A GitHub Actions workflow is included that builds and deploys to a DigitalOcean droplet. It works as-is for DigitalOcean, or with minimal changes for any other VPS.

On your server, create the config file:

mkdir -p /opt/phyrin
nano /opt/phyrin/.env    # Paste your env vars here

In your GitHub repo, add these secrets (Settings → Secrets):

Secret Value
DROPLET_HOST Your server IP
DROPLET_USER SSH user
DROPLET_SSH_KEY Private SSH key
DROPLET_SSH_PASSPHRASE SSH key passphrase (if any)

Then go to Actions → Deploy → Run workflow. That's it.

Customization

Transcription model — set DEEPGRAM_MODEL in your .env (defaults to Nova 2). Change language with DEEPGRAM_LANGUAGE.

Summary model — set OPENAI_MODEL in your .env (defaults to GPT-4o-mini).

Logging — set LOG_DESTINATION to route logs to Datadog, Grafana Loki, CloudWatch, Axiom, BetterStack, or a local file.

Billing — set VITE_BILLING_ENABLED=true (web) and the matching API var to run a commercial deployment with Stripe. Leave unset (default) for personal/internal use — no Stripe required, larger upload limit.


Technical Reference

This section is for developers customizing the codebase.

Tech Stack

Layer Tech
API Hono, Node.js, JWT (jose), Zod validation
Frontend Vite, React, Tailwind CSS, shadcn/ui, Framer Motion
Background jobs BullMQ, Redis
Database PostgreSQL via Drizzle ORM, pgvector for semantic search
Storage Cloudflare R2 (S3-compatible)
Transcription Deepgram
Summaries OpenAI
Email Resend
Deploy Docker, GitHub Actions, GitHub Container Registry

Project Structure

packages/
  api/       Hono API server — auth, files, admin routes
  web/       React frontend — dashboard, transcript viewer, landing page
  worker/    Background worker — transcription, summaries, scheduled cleanup
  shared/    Shared types, database schema, constants

Architecture

┌──────────┐     ┌──────────┐     ┌───────────┐     ┌──────────┐
│  React   │────▶│ Hono API │────▶│  BullMQ   │────▶│ Deepgram │
│ Frontend │◀────│  Server  │     │  Worker   │────▶│  OpenAI  │
└──────────┘     └────┬─────┘     └─────┬─────┘     └──────────┘
                      │                 │
                 ┌────┴─────┐     ┌─────┴─────┐
                 │ Postgres │     │    R2     │
                 │  (Neon)  │     │ (Storage) │
                 └──────────┘     └───────────┘

Commands

pnpm build                   # Build all packages
pnpm typecheck               # Typecheck all packages
pnpm typecheck:api           # Typecheck API only
pnpm typecheck:web           # Typecheck frontend only
pnpm typecheck:shared        # Typecheck shared only

Operating Phyrin

Rebranding, one-off scripts, and migration notes for self-hosters: see docs/OPERATIONS.md.

Support

Reach out at contact@phyrin.app.

License

MIT. Use it for anything, including commercial work. Attribution appreciated but not required.

About

Self-hostable audio transcription & analysis platform — transcripts with speaker labels, AI summaries, quotes, and chapters.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages