Features
What Vidra does, in the order you meet it.
Grouped by lifecycle rather than by marketing category. Every line carries the detail that makes it checkable against a running instance.
Publish
Getting video in, and getting it encoded.
- Resumable and chunked uploads
- A dropped connection picks up where it stopped rather than starting the file again.
- Straight-to-storage uploads
- Chunks stream to the storage backend — local or S3 — and never touch the server's disk. A server dying mid-upload loses nothing.
- Lean encode path
- On the worked example — a 2 GB, 30-minute 1080p source on the default ladder — a full-ladder job reads the source once, down from up to 8, and decodes it in full 3 times, down from 13. The read and decode counts are exact; peak scratch computes to about 3.6 GB from about 10.3, off the ladder's bitrate table rather than a stopwatch.
- Upload from a URL
- Asynchronous fetch, SSRF-guarded, with a sandboxed yt-dlp path you can enable.
- Per-user quotas
- Storage limits per account, so one uploader cannot fill the disk.
- ClamAV scanning
- Optional scanning on upload. Budget an extra 2 GB of RAM if you turn it on.
- HLS ladder
- H.264 and AAC. A 1080p TargetAll job runs one encode pass and derives both output classes from it, about 1.5 to 2.5 times the source duration on 4 vCPU.
- CMAF packaging and DASH
- Packaged alongside HLS from the same renditions.
- VP9 and WebM download
- An optional downloadable rendition next to the streaming ladder.
- Codec profile flags
- HEVC and AV1 are behind flags and default to off.
- Live streaming
- RTMP ingest with privacy-gated HLS output, and a replay that becomes a VOD when the stream ends.
- Channel auto-sync mirroring
- Mirror a channel into your instance and keep it in step.
Watch
The player and everything around it.
- Bespoke player
- Keyboard shortcuts, picture-in-picture and theatre mode, written for this platform rather than skinned onto a generic one.
- I-frame trick-play
- Scrubbing runs against an I-frame rendition, so the preview keeps up with the pointer.
- Thumbnails, storyboards, chapters
- Storyboards drive scrub previews; chapters break a long recording into parts.
- WebVTT captions
- Upload them, or have Whisper generate them and edit what it produced.
- Password-protected videos
- Scoped playback tokens, not an unlisted URL that leaks the moment somebody forwards it.
- Embeds, oEmbed, RSS, sitemap, PWA
- Your video plays on other people's pages, and your instance is readable by the things that index it.
Find
Search and ranking, with the parts still on probation labelled.
- Hybrid full-text and trigram search
- Two indexes queried together, so a half-remembered title still resolves.
- Typo-tolerant autosuggest
- Suggestions while typing, tolerant of the wrong letters.
- Decayed-counter trending
- View counters decay with age, so last quarter's hit does not sit at the top forever.
- Co-visitation recommendations
- Built from what viewers actually watched next.
- LightGBM ranker
- Shadow-evaluated: it scores results and its scores are compared, but it does not decide the order until you promote it.
How it compares
A platform you publish to, or software you run.
Every row below follows from that one difference: who sets the rules, who pays for the bytes, and what is still on your disk if you stop.
| Hosted platforms (YouTube) | Vidra | |
|---|---|---|
| Who sets the rules | Google. The terms, the moderation policy and the ranking are theirs to change. | You do. Registration approval, reports and instance settings sit in your own admin console. |
| Ads and your audience | The platform sells advertising against your audience and sets the revenue share. | No ad system and no monetisation layer. Vidra is not a creator monetisation platform. |
| Federation | None. Accounts, subscriptions and discovery stay on one platform. | ActivityPub and ATProto. Enabled per instance; once on, every channel federates by default and can opt out. |
| Runtime | Not something you run. | A Go backend (Go 1.26, Echo) and a Next.js 16 frontend, over PostgreSQL 18 and Redis 8. |
| Egress | Theirs to pay for. | Yours, and offloadable: a CDN in front of your HLS, or IPFS gateways carrying public media. |
| Licence | Proprietary, hosted service. | AGPL v3. Use it, study it, modify it, redistribute it — and a modified service owes its users the source. |
| Leaving | Takeout exports your video files. The URLs, the embeds and the audience stay on the platform. | Your files and your database stay where you put them: media in the storage backend you configured, everything else in one PostgreSQL. Your domain is your domain, so the URLs and the embeds are yours too. |
Who sets the rules
- Hosted platforms (YouTube)
- Google. The terms, the moderation policy and the ranking are theirs to change.
- Vidra
- You do. Registration approval, reports and instance settings sit in your own admin console.
Ads and your audience
- Hosted platforms (YouTube)
- The platform sells advertising against your audience and sets the revenue share.
- Vidra
- No ad system and no monetisation layer. Vidra is not a creator monetisation platform.
Federation
- Hosted platforms (YouTube)
- None. Accounts, subscriptions and discovery stay on one platform.
- Vidra
- ActivityPub and ATProto. Enabled per instance; once on, every channel federates by default and can opt out.
Runtime
- Hosted platforms (YouTube)
- Not something you run.
- Vidra
- A Go backend (Go 1.26, Echo) and a Next.js 16 frontend, over PostgreSQL 18 and Redis 8.
Egress
- Hosted platforms (YouTube)
- Theirs to pay for.
- Vidra
- Yours, and offloadable: a CDN in front of your HLS, or IPFS gateways carrying public media.
Licence
- Hosted platforms (YouTube)
- Proprietary, hosted service.
- Vidra
- AGPL v3. Use it, study it, modify it, redistribute it — and a modified service owes its users the source.
Leaving
- Hosted platforms (YouTube)
- Takeout exports your video files. The URLs, the embeds and the audience stay on the platform.
- Vidra
- Your files and your database stay where you put them: media in the storage backend you configured, everything else in one PostgreSQL. Your domain is your domain, so the URLs and the embeds are yours too.
Choosing between self-hosted options? Vidra and PeerTube, compared →
Vidra is a clean-room implementation rather than a fork of anything, and it is not PeerTube-API-compatible. Moving an existing instance across is supported and documented — read the migration overview.
Connect
ActivityPub federation, ATProto for Bluesky, messaging, one storage network, and identity.
- ActivityPub
- Your channels and videos are addressable from the rest of the fediverse.
- ATProto
- Viewers sign in with Bluesky, or with any ATProto PDS.
- Cross-posting to Bluesky
- Optional, for public videos, and off until you enable it.
- IPFS media, dual-tier
- A public tier that serves through gateways and puts every public video's CIDs in the API so anyone can pin a copy; a private tier keyed to your own swarm — replication, not distribution. Off by default. What IPFS actually does →
- Direct messages
- One-to-one conversations, with images and files — attachments are capped at 100 MiB and scanned for malware before they become linkable.
- End-to-end encrypted conversations
- An opt-in conversation type, encrypted in your browser with Olm — the Matrix protocol's ratchet, via @matrix-org/olm — so the server stores only ciphertext and cannot read the content, though it still knows who is talking to whom and when. Two things to weigh before you rely on it: libolm was deprecated by its maintainers on 2024-07-31 and its repository archived, and Vidra's use of it has not been independently audited. Text only: attachments stay in standard conversations, where they can be scanned.
- Disappearing messages
- Encrypted conversations can auto-delete on a timer, 30 seconds to 90 days. Expired messages vanish from every read immediately and are hard-deleted from the server by a sweeper.
- OAuth, OIDC and TOTP two-factor
- Sign in through an identity provider you already run, with a TOTP second factor either way.
Moderate
The work that starts on day two.
- Reports and moderation
- A reporting path for viewers and a queue for acting on it.
- Registration approval
- New accounts wait for a person to let them in.
- Admin console
- More than a hundred instance settings, changeable at runtime rather than through a redeploy.
Operate
What you touch after it is live.
- The vidra CLI
- setup, doctor, status, logs, deploy, rollback, backup and restore, all scripted.
- vidra doctor
- 26 checks against a running instance, with the failure named.
- Probes
- /healthz, /readyz, /schemaz and /version.
- Metrics and traces
- Prometheus metrics and OpenTelemetry traces, both first-party.
- Durable queues
- Postgres-backed, claimed with SKIP LOCKED and leases: queued work survives a restart, and two workers cannot claim the same job.
- Roles and replicas
- One boot variable splits the same image into api and worker processes. Replicas take leases, elect a leader for sweeps, and drain behind /readyz — soak-tested at two replicas with a deliberate counterfactual.
- Schema history
- 123 SQL migrations, versioned with the code.
- API surface
- 230 paths under one OpenAPI contract.
- Accessibility
- Accessibility failures fail the build: axe gates CI in both frontends, and this site's own CI gates WCAG 2.2 AA explicitly.
DRM: None shipped: a test lane proves the seam, and production DRM sits behind an unbuilt roadmap item. If your distributor requires encrypted playback today, Vidra is the wrong tool.
Two more things Vidra does not do
- In-player peer-to-peer
- A decision, not a gap: Vidra adds no peer-to-peer in the player, so watching a video never exposes a viewer's IP address to other viewers. The reasoning is published. Size your bandwidth for every byte the instance serves.
- A hosted tier
- A design decision, not a gap in the roadmap.