Skip to content

Repository files navigation

ElectronNodeLicenseStargazersIssuesWebsite


Bloom

An open source, agentic Loom alternative.

Record locally. Make recordings AI-ready. Run workflows on top.

Record → Query → Automate

Install · Features · Docs · Report Bug


What is Bloom?

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.


Demo

Bloom.Demo.mp4

Installation

Run this in your terminal to install Bloom:

curl -fsSL https://artifacts.videodb.io/bloom/install | bash

This will automatically detect your Mac architecture, download the right build, and install it to /Applications.

Manual install
  1. Mount the DMG and drag Bloom to your Applications folder
  2. Open Terminal and run xattr -cr /Applications/Bloom.app
  3. Launch the app from Applications or Spotlight

Supported on macOS and Windows (pre-built installer available for macOS). Linux support coming soon.


Features

FeatureDescription
No subscriptionPay only for usage
Local-firstRecord locally, no lock-in
AI-readySearch, summarize, extract
Screen recordingCapture screen, microphone, and system audio via VideoDB Capture SDK
Camera overlayDraggable camera bubble during recording
Floating barAlways-on-top control bar that never blocks your apps
Multi-monitorDisplay picker to choose which screen to record
LibraryBrowse, search, play, rename, and download recordings
TranscriptionAutomatic transcript generation with subtitled playback
Chat with videoAsk questions about your recording via VideoDB Chat
ShareOne-click shareable link for any recording
Keyboard shortcutCmd+Shift+R to start/stop recording from anywhere
Open sourceFully customizable UI layer

Architecture

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
Loading

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.


Open source

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.


Philosophy

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.


Development Setup

Prerequisites

Quick Start

npm install
npm start

On first launch, grant microphone and screen recording permissions, then enter your VideoDB API key.


Project Structure

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

Troubleshooting

Permissions denied

  • macOS: System Settings → Privacy & Security → enable Screen Recording / Microphone / Camera

Camera not showing

  • Toggle camera off/on in source controls
  • Check Camera permission in system settings

Reset

# Delete the app database (stored in Electron userData)# macOS
rm ~/Library/Application\ Support/bloom/bloom.db
rm ~/Library/Application\ Support/bloom/config.json

Then run npm start


Building

# Build directory (for testing)
npm run pack
# Build DMG installers (macOS arm64 + x64)
npm run dist

License

MIT


Community & Support


VideoDB

Made with love by the VideoDB team

About

An open source, agentic Loom alternative. Record locally, make recordings AI-ready, and run workflows on top

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

231 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages