Open source · Local-only · 0.2.0 beta — live in your browser
The character sheet, on camera.
A layer of story over every camera.
Vellum renders a live character HUD over your webcam — through OBS, into your video call — so your table sees your stats where they're already looking.
The shift
Off the tab, onto the table.
In a remote session, everyone's stats live in a character-sheet tab off-camera — private, invisible, and a tab-switch away. Vellum composites them onto the webcam feed itself: OBS renders the HUD over your camera, the virtual camera carries it into the call, and your character state becomes ambient information the whole table shares.
Before
The other tab
Hope, HP, and conditions sit in a browser tab nobody else can see. Every check starts with "hang on, let me look."
After
The frame
Your stats ride your camera tile — visible to everyone, updated live, exactly where the table is already looking.
Built like a good tool.
Local-only & yours
Nothing leaves your machine
No account, no server, no telemetry. Vellum runs from a static file and writes to localStorage — there is nothing to sign up for and nothing to phone home to.
Composable
Daggerheart in the box, your system next
Systems, scenes, and themes are config, not core code. Daggerheart ships as the reference implementation; the platform exists so you can teach it yours.
Made for the call
Not the stream
Designed for a 4–6 person Discord call at 480p — legible at thumbnail size, calm on camera. A table tool, not a broadcast package.
For system authors
Compose it.
A system declares its resources, conditions, and character schema. It offers scenes — URL-addressable HUDs, one per role, each the target of an OBS browser source. Scenes compose widgets: generic pip tracks, slot tracks, badges, and nameplates bound to your config.
Add your system as one folder — config plus a few components, no core edits.
// systems/daggerheart/index.ts — illustrative
export const daggerheart: SystemDefinition = {
id: "daggerheart",
label: "Daggerheart",
resources: [
pipTrack("hope", { max: 6 }),
slotTrack("hp", { thresholds: true }),
slotTrack("stress"),
],
conditions: coreConditions,
characterSchema,
scenes: [
scene("player", ["identity", "hope", "hp", "stress"]),
scene("gm", ["fear"]),
],
defaultTheme: "daggerheart",
};
Quick start
Four steps to the table.
-
Open Vellum
No install — open the app in your browser, or download the static bundle to run fully offline. Either way it runs entirely on your machine; nothing you enter is uploaded.
-
Build your character
Fill in the character form, then hit Copy share link. Your whole sheet packs into a URL — no files to prepare or email around.
-
Drop it into OBS
Import the Vellum scene collection — macOS, Windows, or Linux — or add a browser source pointed at your share link. The in-app setup wizard walks you through the rest.
-
Go live in Discord
Add your webcam under the HUD, start the OBS Virtual Camera, and pick it in Discord. Your tile is now camera plus HUD — and every value persists across a reload.