Slogan: More than just transcription, it's the encoding of memory.
DreamScribe is an intelligent, real-time voice transcription and knowledge-assistance application built for the PCAS (Personal Central AI System) ecosystem.
Its ultimate vision is to become an indispensable personal AI learning companion for every lifelong learner. It actively assists during a class or meeting by understanding the conversation, providing timely hints, linking to relevant historical knowledge, and connecting to key background materials—without giving away the answer, thus stimulating active thinking.
To dive deep into the core concepts, design philosophy, and grand vision of this project, please read our 📄 Project Vision & Philosophy (Chinese). For the upcoming UI/UX and multimodal extensions, see Frontend UI Design (CN).
- AI Learning Companion: Acts as an active partner in learning scenarios, not just a passive recording tool.
- Memory Encoder for PCAS: Its core technical role is to act as a "Memory Encoder". It receives raw text streams from sensory D-Apps (like
DreamTrans) and encodes them into structuredpcas.memory.create.v1events for the entire PCAS ecosystem to use. - PCAS Native Integration: Deeply integrated with the PCAS service bus via gRPC.
- Single-Image Deployment: A multi-stage Dockerfile packages the frontend UI and backend API into a single, optimized image.
- Backend: Go, Gin, Gorilla WebSocket, gRPC
- Frontend: React, TypeScript, Vite
- CI/CD: GitHub Actions, Docker
- Go (Version 1.22+)
- Node.js (Version 20+)
- A running instance of PCAS
- Start the Backend:
cd backend go run ./cmd/server/main.go - Start the Frontend:
cd frontend npm install npm run dev - Access: The application will be available at
http://localhost:5173.
- Docker (and Docker Compose plugin)
- A running instance of PCAS
- Prepare config:
cp configs/config.example.yaml configs/config.production.yaml- Edit
configs/config.production.yaml(pcas.addressetc.)
- Start:
- Linux/macOS:
./start-docker.sh - Windows PowerShell:
./start-docker.ps1
- Linux/macOS:
- Access:
http://localhost:8080
Dev auto-update (optional):
- Start with watchtower overlay to auto-pull latest images from GHCR:
- Linux/macOS:
./start-docker.sh --dev - Windows PowerShell:
./start-docker.ps1 -Dev
- Linux/macOS:
Compose files:
docker-compose.yml– main servicedocker-compose.dev.yml– adds Watchtower for auto-update in dev
# 1. Pull the latest image
docker pull ghcr.io/soaringjerry/dreamscribe:latest
# 2. Prepare the production config file
cp configs/config.example.yaml configs/config.production.yaml
# edit configs/config.production.yaml <-- set pcas.address
# 3. Run the container
docker run -d \
--name dreamscribe \
-p 8080:8080 \
-v $(pwd)/configs/config.production.yaml:/app/config.yaml:ro \
ghcr.io/soaringjerry/dreamscribe:latest- Access:
http://localhost:8080
Use a single command on your server to install or update DreamScribe. GitHub Actions is only used to build and host Docker images on GHCR.
Linux/macOS one-liner:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/soaringjerry/DreamScribe/main/scripts/install-or-update.sh)" -- --dir /opt/dreamscribe --pcas localhost:50051 --port 18080Windows PowerShell (two steps for clarity):
iwr -UseBasicParsing https://raw.githubusercontent.com/soaringjerry/DreamScribe/main/scripts/install-or-update.ps1 -OutFile install-or-update.ps1
./install-or-update.ps1 -Dir "$HOME/dreamscribe" -PCASAddress "localhost:50051" -Port 18080Options:
--devor-Dev: enable auto-update via Watchtower overlay--diror-Dir: install directory (default Linux:/opt/dreamscribe, Windows:$HOME/dreamscribe)--portor-Port: host port to expose (default 8080)--pcas/-PCASAddress: overridepcas.address--event-type/-EventType: overridepcas.eventType--translate-type/-TranslateType: overridepcas.translateEventType--summarize-type/-SummarizeType: overridepcas.summarizeEventType--chat-type/-ChatType: overridepcas.chatEventType--user-id/-UserId: setuser.id--admin-token/-AdminToken: exportPCAS_ADMIN_TOKENinto container--interactive/-Interactive: interactive wizard (only modifies config on first run or if you choose to)
What the script does:
- Downloads latest
docker-compose.yml(+dev overlay) from GitHub - Ensures
configs/config.production.yamlexists (created from example if missing) - Applies overrides if provided, then runs
docker compose pull && up -d - If
--interactiveis used, guides you through config generation
Diagnostics:
- Open
http://<host>:<port>/testfor a built-in test console (WS/SSE/Chat/Admin) - Check
GET /api/healthfor PCAS readiness (per capability)
- Transcribe (audio WS):
GET /ws/transcribe— send binary PCM frames, receive text frames. - Translate (SSE):
POST /api/translate/start→{ streamId }GET /api/translate/stream?streamId=...— SSE:data: {"text":"..."}POST /api/streams/{id}/sendwith{ text };DELETE /api/streams/{id}to close
- Summarize (SSE): same pattern as Translate via
/api/summarize/* - Chat (SSE one-shot):
POST /api/chatwith{ sessionId, message, refs?, attrs? } - Health:
GET /api/health - Test console:
GET /test
Notes:
- AudioWorklet requires HTTPS or localhost for recording in browsers.
- SSE is server→client text streaming over HTTP; use POSTs to push inputs.
CI status:
- Build & push to GHCR:
.github/workflows/docker-build.yml(keep as-is) - No Action-based deployment required for one-command flow