[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73264":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},73264,"Scriberr","rishikanthc\u002FScriberr","rishikanthc","Self-hosted AI audio transcription","https:\u002F\u002Fscriberr.app",null,"Go",2730,210,20,75,0,14,24,78,42,98.77,"MIT License",false,"main",true,[27,28,29,30],"ai","audio","transcript","transcription","2026-06-12 04:01:08","\u003Cdiv align=\"center\">\n  \u003Cimg src=\"logo.svg\" height=\"90\" style=\"vertical-align: middle;\" \u002F>\n  \u003Cimg src=\"logo-text.svg\" height=\"80\" style=\"vertical-align: middle;\" \u002F>\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\u003C\u002Fbr>\n\u003Cp align=\"center\">\nScriberr is an open-source, and completely offline audio transcription application designed for self-hosters who value privacy and performance.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fscriberr.app\">Website\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fscriberr.app\u002Fdocs\u002F\">Docs\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fscriberr.app\u002Fapi\">API Reference\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Ca href='https:\u002F\u002Fko-fi.com\u002FH2H41KQZA3' target='_blank'>\u003Cimg height='36' style='border:0px;height:36px;' src='https:\u002F\u002Fstorage.ko-fi.com\u002Fcdn\u002Fkofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"screenshots\u002Fhero.png\" alt=\"Scriberr Desktop App\" width=\"800\" \u002F>\n\u003C\u002Fdiv>\n\n## Update on project status\nHi everyone,\nIt’s been a while since the last update, so I wanted to share what’s been going on with Scriberr.\n\nRecently, I was affected by layoffs at eBay (around 800 roles were impacted), and I unfortunately was one of them. The past few weeks have been a bit overwhelming as I’ve been focused on figuring out next steps and actively searching for new opportunities.\n\nBecause of that, I haven’t been able to spend time on Scriberr lately. As much as I’d love to keep pushing it forward, I need to prioritize getting back on my feet first. Development is paused for now, but **definitely not abandoned. I still have a lot of ideas and plans I’m excited to come back to.**\n\nThat said, if anyone in the community is interested in contributing or helping move the project forward during this time, I’d be very open to collaborating. I’d love to see Scriberr continue to evolve even while I’m temporarily away from active development.\n\nI really appreciate all the support, interest, and encouragement this project has received so far. It genuinely means a lot, and I’m looking forward to continuing work on Scriberr once things stabilize on my end.\nThanks again for your patience and support, I truly appreciate it.\n\nIn the meantime, if you happen to know of any opportunities in AI\u002FML engineering or research, I’d be incredibly grateful for any referrals or connections. You can find more about my work and experience here: https:\u002F\u002Frishikanthc.com\n\n## Sponsors\n\n![recall.ai-logo](https:\u002F\u002Fcdn.prod.website-files.com\u002F620d732b1f1f7b244ac89f0e\u002F66b294e51ee15f18dd2b171e_recall-logo.svg) Meeting Transcription API   \nIf you're looking for a transcription API for meetings, consider checking out [Recall.ai](https:\u002F\u002Fwww.recall.ai\u002F?utm_source=github&utm_medium=sponsorship&utm_campaign=rishikanthc-scriberr), an API that works with Zoom, Google Meet, Microsoft Teams, and more.\nRecall.ai diarizes by pulling the speaker data and seperate audio streams from the meeting platforms, which means 100% accurate speaker diarization with actual speaker names.\n\n## Introduction\n\nAt its core, Scriberr allows you to transcribe audio and video locally on your machine, ensuring no data is ever sent to a third-party cloud provider.\nLeveraging state-of-the-art machine learning models (such as **NVIDIA Parakeet**, and **Canary**) or the older more popular **Whisper** models, it delivers high-accuracy text with word-level timing.\n\nScriberr goes beyond simple transcription and provides various advanced capabilities.\nIt combines powerful under-the-hood AI with a polished, fluid user interface that makes managing your recordings feel effortless. Whether you are sorting through voice notes or analyzing long meetings, Scriberr provides a beautiful environment to get work done:\n\n- **Smart Speaker Detection**: Scriberr automatically detects different speakers (Diarization) and labels exactly who said what.\n- **Chat with your Audio**: Connect seamlessly with Ollama or OpenAI API compatible providers. You can generate summaries, ask questions, or have a full conversation with your transcripts right inside the app.\n- **Built for your Workflow**: With extensive APIs and Folder Watcher that automatically processes new files in a folder, Scriberr fits right into your existing automations (like n8n).\n- **Capture & Organize**: Use the built-in audio recorder to capture thoughts on the fly, and the integrated note-taking features to annotate your transcripts as you listen.\n- **Native Experience everywhere**: Scriberr supports PWA (Progressive Web App) installation, giving you a native app experience on your desktop or mobile device.\n- **A Polished UI**: I’ve focused on the little UI niceties that make the app feel responsive and satisfying to use.\n\n[View full list of features →](https:\u002F\u002Fscriberr.app\u002Fdocs\u002Ffeatures)\n\n### Why I built this\n\nThe inspiration for Scriberr was born out of privacy paranoia and not wanting to pay for subscription.\nAbout a year ago, I purchased a [Plaud Note](https:\u002F\u002Fwww.plaud.ai\u002F) for recording voice memos. I loved the device itself; the form factor, microphone quality, and workflow were excellent.\n\nHowever, transcription was done on their cloud servers. As someone who is paranoid about privacy I wasn't comfortable with uploading my recordings to a third party provider.\nMoreover I was hit with subscription costs: $100 a year for 20 hours of transcription per month, or $240 a year for unlimited access. As an avid self-hoster with a background in ML and AI, it felt wrong to pay such a premium for a service I knew I could engineer myself.\n\nI decided to build Scriberr to bridge that gap, creating a powerful, private, and free alternative for everyone.\n\n## Screenshots\n\n\u003Cdetails>\n  \u003Csummary>Click to expand\u003C\u002Fsummary>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Transcript view\" src=\"screenshots\u002Ftranscript-light.png\" width=\"720\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Transcript reader with playback follow‑along and seek‑from‑text.\u003C\u002Fem>\u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Chat with Audio\" src=\"screenshots\u002Fchat.png\" width=\"720\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Chat with your transcripts using local LLMs or OpenAI.\u003C\u002Fem>\u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Notes and Highlights\" src=\"screenshots\u002Fnotes.png\" width=\"720\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Highlight key moments and take notes while listening.\u003C\u002Fem>\u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"AI Summaries\" src=\"screenshots\u002Fai-summary.png\" width=\"720\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Generate comprehensive summaries of your recordings.\u003C\u002Fem>\u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cstrong style=\"font-size: 1.2em;\">Dark Mode\u003C\u002Fstrong>\n  \u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Homepage Dark Mode\" src=\"screenshots\u002Fhomepage-dark.png\" width=\"720\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Homepage in Dark Mode.\u003C\u002Fem>\u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Transcript Dark Mode\" src=\"screenshots\u002Ftranscript-dark.png\" width=\"720\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Transcript view in Dark Mode.\u003C\u002Fem>\u003C\u002Fp>\n\n  ### Mobile\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Mobile Homepage\" src=\"screenshots\u002Fhomepage-mobile.PNG\" width=\"300\" \u002F>\n    \u003Cimg alt=\"Mobile Homepage Dark\" src=\"screenshots\u002Fhomepage-mobile-dark.PNG\" width=\"300\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>PWA mobile app (Light & Dark).\u003C\u002Fem>\u003C\u002Fp>\n\n  \u003Cp align=\"center\">\n    \u003Cimg alt=\"Mobile Transcript\" src=\"screenshots\u002Ftranscript-mobile.PNG\" width=\"300\" \u002F>\n    \u003Cimg alt=\"Mobile Transcript Dark\" src=\"screenshots\u002Ftranscript-mobile-dark.PNG\" width=\"300\" \u002F>\n  \u003C\u002Fp>\n  \u003Cp align=\"center\">\u003Cem>Mobile transcript reading experience.\u003C\u002Fem>\u003C\u002Fp>\n\n\u003C\u002Fdetails>\n\n## Installation\n\nGet Scriberr running on your system in a few minutes.\n\n### Migrating from v1.1.0\n\nIf you are upgrading from v1.1.0, please follow these steps to ensure a smooth transition. Version 1.2.0 introduces a separation between application data (database, uploads) and model data (Python environments).\n\n#### 1. Update Volume Mounts\n\nYou will need to update your Docker volume configuration to split your data:\n\n*   **Application Data:** Bind your existing data folder (containing `scriberr.db`, `jwt_secret`, `transcripts\u002F`, and `uploads\u002F`) to `\u002Fapp\u002Fdata`.\n*   **Model Environment:** Create a **new, empty folder** and bind it to `\u002Fapp\u002Fwhisperx-env`.\n\n#### 2. Clean Up Old Environments\n\n> **CRITICAL:** You must delete any existing `whisperx-env` folder from your previous installation.\n\nThe Python environment and models need to be reinitialized for v1.2.0. If the application detects an old environment, it may attempt to use it, leading to compatibility errors. Starting with a fresh `\u002Fapp\u002Fwhisperx-env` volume ensures the correct dependencies are installed.\n\n### Install with Homebrew (macOS & Linux)\n\nThe easiest way to install Scriberr is using Homebrew. If you don’t have Homebrew installed, [get it here first](https:\u002F\u002Fbrew.sh\u002F).\n\n```bash\n# Add the Scriberr tap\nbrew tap rishikanthc\u002Fscriberr\n\n# Install Scriberr (automatically installs UV dependency)\nbrew install scriberr\n\n# Start the server\nscriberr\n```\n\nOpen [http:\u002F\u002Flocalhost:8080](http:\u002F\u002Flocalhost:8080) in your browser.\n\n### Configuration\n\nScriberr works out of the box. However, for Homebrew or manual installations, you can customize the application behavior using environment variables or a `.env` file placed in the same directory as the binary (or where you run the command from).\n\n> **Docker Users:** You can ignore this section if you are using `docker-compose.yml`, as these values are already configured with sane defaults.\n\n#### Environment Variables\n\n| Variable | Description | Default |\n| :--- | :--- | :--- |\n| `PORT` | The port the server listens on. | `8080` |\n| `HOST` | The interface to bind to. | `0.0.0.0` |\n| `APP_ENV` | Application environment (`development` or `production`). | `development` |\n| `ALLOWED_ORIGINS` | CORS allowed origins (comma separated). | `http:\u002F\u002Flocalhost:5173,http:\u002F\u002Flocalhost:8080` |\n| `DATABASE_PATH` | Path to the SQLite database file. | `data\u002Fscriberr.db` |\n| `UPLOAD_DIR` | Directory for storing uploaded files. | `data\u002Fuploads` |\n| `TRANSCRIPTS_DIR` | Directory for storing transcripts. | `data\u002Ftranscripts` |\n| `WHISPERX_ENV` | Path to the managed Python environment for models. | `data\u002Fwhisperx-env` |\n| `OPENAI_API_KEY` | API Key for OpenAI (optional). | `\"\"` |\n| `JWT_SECRET` | Secret for signing JWTs. Auto-generated if not set. | Auto-generated |\n\n**Example `.env` file:**\n\n```bash\n# Server settings\nHOST=localhost\nPORT=8080\nAPP_ENV=production\n\n# Paths\nDATABASE_PATH=\u002Fvar\u002Flib\u002Fscriberr\u002Fdata\u002Fscriberr.db\nUPLOAD_DIR=\u002Fvar\u002Flib\u002Fscriberr\u002Fdata\u002Fuploads\n\n# Security\nJWT_SECRET=your-super-secret-key-change-this\n```\n\n### Docker Deployment\n\nFor a containerized setup, you can use Docker. We provide two configurations: one for standard CPU usage and one optimized for NVIDIA GPUs (CUDA).\n\n> [!IMPORTANT]\n> **Permissions:** Ensure you set the `PUID` and `PGID` environment variables to your host user's UID and GID (typically `1000` on Linux) to avoid permission issues with the SQLite database. You can find your UID\u002FGID by running `id` on your host.\n>\n> **HTTP vs HTTPS:** By default, Scriberr enables **Secure Cookies** in production. If you are accessing the app via plain HTTP (not HTTPS), you MUST set `SECURE_COOKIES=false` in your environment variables, otherwise you will encounter \"Unable to load audio stream\" errors.\n\n#### Standard Deployment (CPU)\n\nUse this configuration for running Scriberr on any machine without a dedicated NVIDIA GPU.\n\n1.  Create a file named `docker-compose.yml`:\n\n```yaml\nservices:\n  scriberr:\n    image: ghcr.io\u002Frishikanthc\u002Fscriberr:v1.2.0\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - scriberr_data:\u002Fapp\u002Fdata # volume for data\n      - env_data:\u002Fapp\u002Fwhisperx-env # volume for models and python envs\n    environment:\n      - PUID=${PUID:-1000}\n      - PGID=${PGID:-1000}\n      - APP_ENV=production # DO NOT CHANGE THIS\n      # CORS: comma-separated list of allowed origins for production\n      # - ALLOWED_ORIGINS=https:\u002F\u002Fyour-domain.com\n      # - SECURE_COOKIES=false # Uncomment this ONLY if you are not using SSL\n    restart: unless-stopped\n\nvolumes:\n  scriberr_data: {}\n  env_data: {}\n```\n\n2.  Run the container:\n\n```bash\ndocker compose up -d\n```\n\n#### NVIDIA GPU Deployment (CUDA)\n\nIf you have a compatible NVIDIA GPU, this configuration enables hardware acceleration for significantly faster transcription.\n\n1.  Ensure you have the [NVIDIA Container Toolkit](https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Finstall-guide.html) installed.\n2.  Create a file named `docker-compose.cuda.yml`:\n\n```yaml\nservices:\n  scriberr:\n    image: ghcr.io\u002Frishikanthc\u002Fscriberr-cuda:v1.2.0\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - scriberr_data:\u002Fapp\u002Fdata # volume for data\n      - env_data:\u002Fapp\u002Fwhisperx-env # volume for models and python envs\n    restart: unless-stopped\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: all\n              capabilities:\n                - gpu\n    environment:\n      - NVIDIA_VISIBLE_DEVICES=all\n      - NVIDIA_DRIVER_CAPABILITIES=compute,utility\n      - PUID=${PUID:-1000}\n      - PGID=${PGID:-1000}\n      - APP_ENV=production # DO NOT CHANGE THIS\n      # CORS: comma-separated list of allowed origins for production\n      # - ALLOWED_ORIGINS=https:\u002F\u002Fyour-domain.com\n      # - SECURE_COOKIES=false # Uncomment this ONLY if you are not using SSL\n\nvolumes:\n  scriberr_data: {}\n  env_data: {}\n```\n\n3.  Run the container with the CUDA configuration:\n\n```bash\ndocker compose -f docker-compose.cuda.yml up -d\n```\n\n#### GPU Compatibility\n\nScriberr provides separate Docker images for different NVIDIA GPU generations due to CUDA\u002FPyTorch compatibility requirements:\n\n| GPU Generation | Compute Capability | Docker Image | Docker Compose File |\n|:---|:---|:---|:---|\n| GTX 10-series (Pascal) | sm_61 | `scriberr-cuda` | `docker-compose.cuda.yml` |\n| RTX 20-series (Turing) | sm_75 | `scriberr-cuda` | `docker-compose.cuda.yml` |\n| RTX 30-series (Ampere) | sm_86 | `scriberr-cuda` | `docker-compose.cuda.yml` |\n| RTX 40-series (Ada Lovelace) | sm_89 | `scriberr-cuda` | `docker-compose.cuda.yml` |\n| **RTX 50-series (Blackwell)** | sm_120 | `scriberr-cuda-blackwell` | `docker-compose.blackwell.yml` |\n\n**RTX 50-series users (RTX 5080, 5090, etc.):** You must use the Blackwell-specific image. The standard CUDA image will not work due to PyTorch CUDA compatibility requirements. Use:\n\n```bash\ndocker compose -f docker-compose.blackwell.yml up -d\n```\n\nOr for local builds:\n\n```bash\ndocker compose -f docker-compose.build.blackwell.yml up -d\n```\n\n### App Startup\n\nWhen you run Scriberr for the first time, it may take several minutes to start. This is normal!\n\nThe application needs to:\n1.  Initialize the Python environments.\n2.  Download the necessary machine learning models (Whisper, PyAnnote, NVIDIA NeMo).\n3.  Configure the database.\n\n**Subsequent runs will be much faster** because all models and environments are persisted to the `env_data` volume (or your local mapped folders).\n\nYou will know the application is ready when you see the line: `msg=\"Scriberr is ready\" url=http:\u002F\u002F0.0.0.0:8080`.\n\n### Troubleshooting\n\n#### 1. SQLite OOM Error (out of memory)\n\nIf you see an \"out of memory (14)\" error from SQLite (specifically `SQLITE_CANTOPEN`), it usually means a permissions issue. The database engine cannot create temporary files in the data directory.\n\nYou can fix this by setting the `PUID` and `PGID` in your `docker-compose.yml` to match your host user's UID and GID, or by manually changing the ownership of the mapped folders on your host:\n\n```bash\n# If you used a named volume (e.g., 'scriberr_scriberr_data'):\nsudo chown -R 1000:1000 \u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002Fscriberr_scriberr_data\u002F_data\n\n# If you mapped a specific host folder (e.g., .\u002Fscriberr_data):\nsudo chown -R 1000:1000 .\u002Fscriberr_data\nsudo chown -R 1000:1000 .\u002Fenv_data\n```\n\nReplace `1000` with the value you set for `PUID`\u002F`PGID` (default is `1000`).\n\n#### 2. \"Unable to load audio stream\"\n\nIf the application loads but you cannot play or see the audio waveform (receiving \"Unable to load audio stream\"), this is often due to the **Secure Cookies** security flag.\n\nBy default, when `APP_ENV=production`, Scriberr enables `SECURE_COOKIES=true`. This prevents cookies from being sent over insecure (HTTP) connections.\n\n**Solutions:**\n- **Recommended:** Deploy Scriberr behind a Reverse Proxy (like Nginx, Caddy, or Traefik) and use SSL\u002FTLS (HTTPS).\n- **Alternative:** If you must access over plain HTTP, set the following environment variable in your `docker-compose.yml`:\n  ```yaml\n  environment:\n    - SECURE_COOKIES=false\n  ```\n\n## Post installation\n\nOnce you have Scriberr up and running:\n\n- **Configure Diarization**: To enable speaker identification, visit the [Configuration page](https:\u002F\u002Fscriberr.app\u002Fdocs\u002Fconfiguration).\n- **Usage Guide**: For a detailed usage guide, visit [https:\u002F\u002Fscriberr.app\u002Fdocs\u002Fusage](https:\u002F\u002Fscriberr.app\u002Fdocs\u002Fusage).\n\n## LLM Disclosure\n\nThis project was developed using AI agents as pair programmer. It was NOT vibe coded. For context I’m a ML\u002FAI researcher by profession and I have been programming for over a decade now. The codebase follows software engineering best practices and principles and all architecture decisions were made by me. All code generated by LLMs was reviewed and tested to the best of my abilities.\n\n## Donating\n\n\u003Ca href='https:\u002F\u002Fko-fi.com\u002FH2H41KQZA3' target='_blank'>\u003Cimg height='36' style='border:0px;height:36px;' src='https:\u002F\u002Fstorage.ko-fi.com\u002Fcdn\u002Fkofi6.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' \u002F>\u003C\u002Fa>\n\n","Scriberr 是一个开源的、完全离线的音频转录应用，专为重视隐私和性能的自托管用户设计。其核心功能包括使用 Go 语言开发，支持高效准确地将音频文件转换成文本，并且整个过程都在本地完成，不依赖任何云端服务，从而保证了数据的安全性和私密性。此外，Scriberr 提供了易于使用的界面和丰富的文档支持，还开放了 API 接口以满足开发者的需求。该工具非常适合需要对敏感信息进行处理的场景，如企业内部会议记录、个人笔记整理等，同时也适合那些希望在没有互联网连接的情况下也能完成音频转录任务的用户。",2,"2026-06-11 03:44:46","high_star"]