Record locally. Make recordings AI-ready. Run workflows on top.
Record → Query → Automate
Install · Features · Docs · Report Bug
Bloom is a local-first screen recorder built for agentic workflows.
- Record locally — No lock-in, your files stay yours
- Upload to VideoDB — Automatic cloud sync with AI processing.
- Find any moment — Transcripts, visual embeddings, metadata.
- Let agents work on your recordings — Query via APIs or agent frameworks like Claude Code and access your recordings data.
Recordings are no longer files, they are inputs for AI.
Bloom.Demo.mp4
Run this in your terminal to install Bloom:
curl -fsSL https://artifacts.videodb.io/bloom/install | bashThis will automatically detect your Mac architecture, download the right build, and install it to /Applications.
Manual install
- Apple Silicon (M1/M2/M3/M4): bloom-2.2.0-arm64.dmg
- Apple Intel: bloom-2.2.0-x64.dmg
- Windows: bloom-2.2.0-x64.exe
- Mount the DMG and drag Bloom to your Applications folder
- Open Terminal and run
xattr -cr /Applications/Bloom.app - Launch the app from Applications or Spotlight
Supported on macOS and Windows (pre-built installer available for macOS). Linux support coming soon.
| Feature | Description |
|---|---|
| No subscription | Pay only for usage |
| Local-first | Record locally, no lock-in |
| AI-ready | Search, summarize, extract |
| Screen recording | Capture screen, microphone, and system audio via VideoDB Capture SDK |
| Camera overlay | Draggable camera bubble during recording |
| Floating bar | Always-on-top control bar that never blocks your apps |
| Multi-monitor | Display picker to choose which screen to record |
| Library | Browse, search, play, rename, and download recordings |
| Transcription | Automatic transcript generation with subtitled playback |
| Chat with video | Ask questions about your recording via VideoDB Chat |
| Share | One-click shareable link for any recording |
| Keyboard shortcut | Cmd+Shift+R to start/stop recording from anywhere |
| Open source | Fully customizable UI layer |
Bloom = UI layer (open source)
VideoDB = Intelligence layer (cloud)
graph LR
subgraph EA[" Electron App "]
R["Renderer UI"]
M["Main Process"]
DB[("SQLite")]
R -->|IPC| M
M --> DB
M --> SDK
end
subgraph VS[" VideoDB SDK "]
SDK["Node SDK"]
CC["CaptureClient"]
WS["WebSocket"]
API["Connection API"]
BIN["Native Binary"]
SDK --> CC & WS & API
CC --> BIN
end
subgraph LC[" Local Capture "]
SC["Screen Capture"]
MIC["Microphone"]
SA["System Audio"]
BIN --> SC & MIC & SA
end
subgraph VC[" VideoDB "]
UPLOAD["Upload & Export"]
STREAM["HLS Streaming"]
IDX["Indexing"]
TRX["Transcription"]
UPLOAD --> STREAM
IDX --> TRX
end
BIN -->|"upload chunks"| UPLOAD
WS -->|"session events"| UPLOAD
API -->|"index / transcribe"| IDX
classDef orange fill:#2e1a08,stroke:#EC5B16,stroke-width:1.5px,color:#f5a36a
classDef amber fill:#2e2008,stroke:#E8A317,stroke-width:1.5px,color:#f5d080
classDef red fill:#2e0d08,stroke:#FF4000,stroke-width:1.5px,color:#ff8a60
classDef green fill:#0d2e1a,stroke:#4CAF50,stroke-width:1.5px,color:#8ed4a0
classDef db fill:#1a1208,stroke:#EC5B16,stroke-width:1.5px,color:#f5a36a
class R,M orange
class SDK,CC,WS,API,BIN amber
class SC,MIC,SA red
class UPLOAD,IDX,TRX,STREAM green
class DB db
style EA fill:#1a0e04,stroke:#EC5B16,stroke-width:2px,color:#f5a36a
style VS fill:#1a1504,stroke:#E8A317,stroke-width:2px,color:#f5d080
style LC fill:#1a0804,stroke:#FF4000,stroke-width:2px,color:#ff8a60
style VC fill:#071810,stroke:#4CAF50,stroke-width:2px,color:#8ed4a0
Recording flow: The app creates a CaptureClient which spawns a native binary to capture screen, mic, and system audio. Chunks are uploaded to VideoDB Cloud in real-time. A WebSocket connection delivers session events (started, stopped, exported) back to the app.
Post-recording: Once the video is exported, the app calls the VideoDB API to index spoken words, generate a transcript, and create a subtitled stream — all available for in-app HLS playback or sharing via URL.
The UI layer is fully open source.
- Modify it — Customize the interface to your needs
- Extend it — Add new features and workflows
- Plug it in — Integrate with your own systems
Bloom is not just a tool. It's a foundation for building agentic systems on top of recordings.
Your recorder should not trap your data.
It should:
- Give you ownership — Local-first, no lock-in
- Enable intelligence — AI-ready from day one
- Power your agents — APIs and integrations built-in
Bloom is built for that future.
- Node.js 18+
- VideoDB API Key (console.videodb.io)
npm install
npm startOn first launch, grant microphone and screen recording permissions, then enter your VideoDB API key.
src/
├── main/ # Electron Main Process
│ ├── index.js # App entry, windows, tray, IPC routing
│ ├── db/
│ │ └── database.js # SQLite via sql.js
│ ├── ipc/ # IPC handlers
│ │ ├── capture.js # Recording start/stop, channels, devices
│ │ ├── permissions.js # Permission check/request/open settings
│ │ ├── camera.js # Camera bubble control
│ │ ├── history.js # Library: recordings list, delete, sync
│ │ └── auth.js # Login, logout, onboarding
│ ├── lib/ # Utilities
│ │ ├── config.js # App config
│ │ ├── logger.js # File + console logging
│ │ ├── paths.js # App paths (DB, config, logs)
│ │ └── videodb-patch.js # Binary relocation for packaged apps
│ └── services/
│ ├── videodb.service.js # VideoDB SDK wrapper
│ ├── session.service.js # Session tokens, WebSocket, sync
│ └── insights.service.js # Transcript + subtitle indexing
├── renderer/ # Renderer (context-isolated)
│ ├── index.html # Floating bar page
│ ├── renderer.js # Bar init + event routing
│ ├── permissions.html # Permissions modal window
│ ├── onboarding.html # Onboarding modal window
│ ├── history.html # Library window
│ ├── history.js # Library — list, player, download, share, sync
│ ├── display-picker.html # Display picker popup
│ ├── camera.html # Camera bubble
│ ├── ui/
│ │ └── bar.js # Bar controls, toggles, timer, devices
│ ├── utils/
│ │ ├── permissions.js # Permission check/request utility
│ │ └── logger.js # Renderer-side logging
│ └── img/ # Icons, brand assets, animated previews
└── preload/
└── index.js # Context bridge (renderer ↔ main)
build/
├── afterPack.js # electron-builder hook (codesign, plist patch)
├── entitlements.mac.plist # macOS entitlements
└── icon.icns # App icon
- macOS: System Settings → Privacy & Security → enable Screen Recording / Microphone / Camera
- Toggle camera off/on in source controls
- Check Camera permission in system settings
# Delete the app database (stored in Electron userData)
# macOS
rm ~/Library/Application\ Support/bloom/bloom.db
rm ~/Library/Application\ Support/bloom/config.jsonThen run npm start
# Build directory (for testing)
npm run pack
# Build DMG installers (macOS arm64 + x64)
npm run distMIT
- Docs: docs.videodb.io
- Issues: GitHub Issues
- Discord: Join community
- Console: Get API key
Made with love by the VideoDB team
