Skip to content

v0.0.1

Pre-release
Pre-release

Choose a tag to compare

@AlyShmahell AlyShmahell released this 29 Aug 15:04
· 2 commits to main since this release

Changelog

[0.0.1] — 2026-08-29

First public release of Medora: a self-hosted media library that runs as a host binary (not a container). A Podman builder produces the dist; you install and run medora on the machine. Default listen is http://127.0.0.1:7676. License is BSD 3-Clause. Package target is linux-amd64.

Install and run

  • TTY installer (install.sh) picks a GitHub release, installs into ~/.medora, links ~/.local/bin/medora, and adds a userscope desktop entry and icon.
  • Two archives:
    • slim — binary, seed config, first-party static, Matchora helper. No {exeDir}/vendor/. Run medora --prepare later for ffmpeg/JS and Matchora’s llama.cpp.
    • bundled — slim plus vendored htmx, video.js, hls.js, ffmpeg, and Matchora’s llama.cpp.
  • After listen, Medora opens the UI in the browser when DISPLAY or WAYLAND_DISPLAY is set (MEDORA_NO_BROWSER=1 skips that). A second start on a busy port opens the same URL and exits.
  • Writable data lives under {exeDir}/data (SQLite store, transcode cache, backups, overlay config.yaml, Matchora cache). Overlay YAML merges on top of the seed config/default.yaml.
  • Library roots: MEDORA_MEDIA_PATH or media.path (comma-separated). Each root is jailed separately; the add-library picker shows them as one folder tree.

Library and scan

  • Libraries are a name and a folder. There is no movie/TV/anime type. A directory is a show when it looks like a show pack (Season N, SxxExx, sequential cour layouts, and similar); otherwise it is a movie.
  • Local scan walks the disk, reads existing NFO/posters, and inventories titles.
  • Scan with Matchora sends the folder to first-party Matchora v0.0.3 (localhost :7680). Matchora groups and matches; Medora inventories videos, classifies movie vs show, numbers episodes, and writes catalog metadata. Optional: overwrite existing metadata; persist NFO/art beside the files.
  • Per-library and per-title scan. Uncertain matches show an orange ! and a candidate picker. Unmatched titles are still inventoried.
  • Scan on startup is on by default.
  • Library pages: search plus sort by name, date added, or year.

Home and browsing

  • Home: libraries, continue watching, recently added.
  • Movie and show pages from NFO (plot, cast, genres, studio, ratings, and the rest of the usual fields). Shows have season and episode views.
  • Poster progress bars and per-user watch progress.

Playback

  • video.js player with hls.js for HLS.
  • Direct byte-range stream when the file can play as-is; otherwise HLS transcode (H.264, configurable max height and CRF).
  • Quality, audio track, chapters, subtitles (embedded plus sidecar .srt / .vtt / .ass / .ssa), playback rates, prev/next episode, resume from last position.
  • Hardware encode: hwaccel: auto probes VAAPI on /dev/dri (needs host Mesa/libva/libdrm). Fallback is software libx264. Settings → Server shows the active pipeline.
  • Idle HLS jobs are cancelled a few minutes after the last segment request. The Medora process stays up.

Metadata

  • Matchora owns browse jail, grouping, matching, and catalog bytes. Provider keys (OMDb, TMDB, and any other secrets Matchora exposes) are stored in Matchora, not in Medora YAML. Admin sets them under Settings → Integrations → Metadata.
  • Medora owns SQLite, playback, persist-beside-media, ffmpeg stills, and the match picker UI.

Accounts

  • Empty install redirects to /register to create the admin. After that, /register is 404.
  • Admin → Settings → Users creates ordinary users, resets passwords, and deletes accounts.
  • Libraries and progress are per user.

Integrations and backup

  • Per-user outbound webhooks (JSON). Types: PlaybackStart, PlaybackProgress, PlaybackStop, ItemAdded, TaskCompleted, UserCreated, UserDeleted, plus Generic. Destinations can filter by notification type and item type, add headers, and use a {{Field}} template. Test send and API-key regenerate are on the same page.
  • Settings → Backup: one-shot and periodic tar.zst of store/, retain count, restore (reloads the store), delete archive. Default schedule is every 24h, keep 7.

Build and test (developers)

  • ./build/run TTY menu: run, rebuild, prepare, or package. Builder is Podman-only; it writes build/dist/.
  • ./tests/run runs unit tests and Playwright smoke in Podman (no host Go/Node/Playwright).

Known limits

  • linux-amd64 only. No Windows, macOS, or ARM packages.
  • Runtime is the host binary. Podman is for building and CI, not for serving media.
  • Matchora is not a user-facing admin console; it binds 127.0.0.1:7680.
  • Matchora scan jobs are untyped, so anime prefer does not apply on those jobs.
  • Webhook item-type checkboxes include music labels (Album, Song); libraries themselves are only movie/show.
  • No plugin system. Metadata is Matchora only.