dorkhub

Prismedia

Your whole media life in one private, self-hosted library—watch, read, listen, request, and manage across web, iPhone,…

pauljoda
C#642 forksupdated 1 day ago
visit the demogit clone https://github.com/pauljoda/Prismedia.gitpauljoda/Prismedia

Prismedia colored prism mark

Prismedia

Your whole media life. One private home.
A private, self-hosted media library for watching, reading, listening, requesting, and managing across web, iPhone, iPad, and Apple TV.

Visit the Prismedia website Quick start guide Join the Prismedia TestFlight Follow Prismedia on Product Hunt Container image

Prismedia CI status Prismedia documentation deployment status

Website · Docs · Quick Start · TestFlight · Product Hunt · Subreddit

One private Prismedia library enters as white light and becomes purpose-built media experiences across the spectrum

One Library In. Every Experience Out.

Movies, music, books, audiobooks, comics, images, and galleries share the same underlying needs: identity, artwork, files, metadata, relationships, progress, and history. Self-hosted media usually spreads those needs across one app for playback, another for requests, and a suite of services for acquisition and maintenance.

Prismedia keeps that shared foundation in one private system, then gives every medium an interface shaped around how it is actually used. The logo makes the idea literal: one light enters; every medium leaves in its own color.

The complete web workspace, native iPhone and iPad experience, and focus-first Apple TV app share one household library. An item remains the same item while it moves from discovery and request through acquisition, identification, organization, playback or reading, and long-term maintenance.

The native Apple apps are open to a limited testing group through TestFlight.

Prismedia product film showing the web, iPhone, iPad, and Apple TV experiences
▶ Watch the 72-second silent product film

Prismedia on Product Hunt

From “I Want It” To “Press Play”

Discovery, requests, acquisition, metadata, files, playback, reading, and listening are one connected lifecycle. Provider identity, download state, artwork, history, and personal progress stay attached to the same library item instead of disappearing at every handoff.

Prismedia connects discovery, requests, acquisition, management, and enjoyment in one media lifecycle

Quick Start

One self-hosted Prismedia image connects the web, iPhone, iPad, and Apple TV experiences for a household

Important

Prismedia is in early development. Not every image tag is guaranteed to be published yet. The dev tag is always built (every push to main), and alpha is generally available. beta, release, and latest are promoted manually and may not be available yet — if latest can't be pulled, use dev (or alpha) for now. Expect rough edges and breaking changes while things stabilize.

Docker Run

docker run -d \
  --name prismedia \
  -p 8008:8008 \
  -v prismedia-data:/data \
  -v /path/to/your/media:/media \
  ghcr.io/pauljoda/prismedia:latest

Open http://localhost:8008, add /media or one of its subfolders as a watched library, then run a scan from Jobs or Settings.

Docker Compose

services:
  prismedia:
    image: ghcr.io/pauljoda/prismedia:latest
    ports:
      - "8008:8008"
    volumes:
      - prismedia-data:/data
      - /path/to/your/media:/media
    restart: unless-stopped

volumes:
  prismedia-data:
docker compose up -d

Volumes

Mount Purpose
/data PostgreSQL data, generated cache, thumbnails, waveforms, trickplay, HLS output, plugin state, encryption secret
/media Your mounted media folders

Mount /media read-only if Prismedia should only scan and play files. Mount it read-write if you want browser uploads, renames, moves, deletes, and file-manager organization.

Access

Prismedia has real user accounts: a first-run wizard creates your administrator, and every household member gets their own username and password. The same credentials sign in to the web app, Jellyfin clients, and OPDS readers, and all /api/* routes require a signed-in user — so no reverse-proxy auth middleware is needed. Admins control per-user library access and NSFW visibility. See Authentication & User Accounts.

Image Tags

Tag Use
latest Current promoted release. Recommended for normal installs.
release / release-X.Y.Z Release channel and version-pinned release images.
beta / beta-X.Y.Z Manual beta channel for release candidates.
alpha / alpha-X.Y.Z Manual alpha channel for early testing.
dev Latest main build. Useful for testing fixes before release.
sha-<short-sha> / X.Y.Z-<short-sha> Exact dev build for rollback or bisection.

Read CHANGELOG.md before upgrading a library you care about.

What Prismedia Manages

Video is the foundation, but music, audiobooks, eBooks, comics, images, and galleries are first-class media—not generic files forced into the same grid.

Prismedia gives video, music, audiobooks, eBooks, comics, images, and galleries purpose-built native experiences

Library And Search

Prismedia has dedicated browse surfaces for movies, series, videos, images, galleries, comics, eBooks, audio, artists, people, studios, tags, and collections. The dashboard leads with Continue Watching and Recently Watched; the search page and command palette jump across every entity type.

Video library Search

File Manager

The Files workspace mirrors watched library roots and gives you practical file operations without leaving the app: open linked entities, create folders, upload, rename, move, rescan, exclude paths from scans, remove exclusions, and delete when the media mount is writable.

File manager

Playback And Reading

Videos direct-play when the client can decode them, stream-copy (remux) where possible, and fall back to on-demand HLS only when a transcode is truly needed. Detail pages include subtitles, transcript management, trickplay previews, resume, metadata editing, and artwork controls.

Comics (.cbz/.zip), EPUBs, and PDFs open in a built-in reader — paged and webtoon comics, reflowable EPUBs, and a full PDF reader with selectable text, zoom, search, outline, and resume. Images and galleries use a lightbox with metadata and linked entities. Audio plays through a persistent bar with a queue, shuffle, waveforms, and OS media-control integration.

Video detail Audio playback

Metadata And Identify

The Identify workspace keeps a durable review queue. Add movies, series, videos, books, galleries, images, people, studios, or audio, run providers, review field-by-field proposals, choose artwork, walk into streaming child proposals (seasons/episodes, volumes/chapters, albums/tracks), and accept when the result is right. Auto Identify can apply confident matches automatically during scans.

Plugins can be native TypeScript or Python, and Stash community scrapers can be wrapped as providers.

Identify queue Plugins

Requests

Request is Prismedia's first-party acquisition workspace. Search for books, authors, movies, series, artists, and albums, then let Prismedia create Wanted library entities, search Prowlarr or direct Torznab/Newznab indexers, route releases to qBittorrent, Transmission, or SABnzbd, monitor the download, import the result into the right library, and keep durable History for every grab, import, failure, blocklist, and removal. Wanted and acquired items live on the same library pages with release picking, live progress, monitoring, Missing/Cutoff Unmet lists, and detail metadata from providers such as OpenLibrary, TMDB, and MusicBrainz.

Request search Request detail

Jellyfin Clients (Experimental)

A Jellyfin-compatible API lets client apps discover Prismedia, sign in, and stream — tested with Infuse (video + audio) and music clients like Manet, Finamp, and Symfonium. Clients sign in with your Prismedia user accounts, and each user carries their own library access and NSFW visibility, so you can run separate SFW and NSFW "servers" in your client. Resume position and play counts sync both ways, per user. See Jellyfin Compatibility.

Web And Native Apple Apps

The responsive web app is the complete library workspace: browse every medium, request and identify items, manage files, tune settings, and inspect background work from one interface.

The native iPhone and iPad app adds adaptive Apple-platform navigation, video and audio playback, dedicated music and audiobook players, and customizable EPUB, PDF, comic, and webtoon reading. Tune typeface, size, weight, line spacing, margins, theme, and brightness. When a title has both text and audio editions, reading and listening progress stay together with separate actions for continuing each experience.

Prismedia's native reader with literary typography, deep customization, and combined reading and audiobook progress

The Apple TV app uses a cinematic, focus-first interface and a custom native player built on the device's codec and playback stack. Supported sources direct-play at original quality—including lossless audio—while the paused chrome keeps title, stream state, resolution, codecs, timeline, audio, subtitles, and playback controls readable from the couch.

Prismedia's custom Apple TV player showing direct play, original-quality video, lossless audio, native codecs, and paused playback controls

The iPhone, iPad, and Apple TV apps are currently distributed through the limited Prismedia TestFlight.

Collections

Collections are simple groupings for browsing and curation. They can be manual, rule-driven, or hybrid, and they can contain movies, series, galleries, images, books, and audio tracks. They are not a global playback queue; they are an organizational view over your library.

Collections

Jobs, Settings, And Visibility

Long-running work runs in the .NET worker and is visible in Jobs: scans, probes, previews, thumbnails, sprites, waveforms, HLS, subtitles, identify, imports, collection refreshes, and maintenance. Settings control watched libraries, user accounts, playback, subtitles, generated storage, worker concurrency, and diagnostics.

Jobs Settings

Design Language

Prismedia's visual system makes the name literal: neutral white-light chrome holds the whole collection together, then each media family takes a muted color from the prism spectrum. True black and opaque material surfaces keep artwork dominant; a page gets one restrained accent moment, while frosted glass is reserved for navigation, toolbars, menus, dialogs, and other layers that actually float.

The design language lives in docs/design-language.md and is mirrored in the documentation site.

Documentation

Development

Prerequisites

  • Node.js 22
  • pnpm 10
  • .NET 10 SDK
  • Docker
  • ffmpeg for media work outside the unified image

Local Stack

pnpm install
docker compose -f infra/docker/docker-compose.yml up -d postgres
pnpm --filter @prismedia/web-svelte dev
dotnet run --project apps/backend/src/Prismedia.Api/Prismedia.Api.csproj
dotnet run --project apps/backend/src/Prismedia.Worker/Prismedia.Worker.csproj

Open the running application through the .NET host at http://localhost:8008. Vite provides frontend hot reload behind the development stack, but port 8008 is the canonical app surface and same-origin API entry point.

Useful Commands

pnpm check          # frontend lint/typecheck through turbo
pnpm test:unit      # TypeScript unit tests
pnpm test:web-svelte
pnpm test:backend   # .NET tests
pnpm docs:check     # Docusaurus typecheck + build
pnpm release:check  # changelog + workspace version validation

Build The Production Image

docker build -f infra/docker/unified.Dockerfile -t prismedia:local .

Release Notes

Prismedia starts at 1.0.0 and uses plain SemVer versions. The root package.json is the build version and all workspace package versions must match it. Channel publishing never edits package versions or changelog headings; it only publishes the already-decided build.

See CHANGELOG.md for user-facing release notes.

License

See LICENSE.

more like this

Scythe

SCYTHE is a lightweight, C#-based game engine focused on modifiability and rapid iteration using Raylib.

C#50

RaylibWasm

.Net 10 (.Net 8+) webassembly starter project using raylib-cs nuget 7.0.2 and raylib 5.5

C#50

ScreenRecoder

这是一个基于FFmpeg使用 C# 、C++ 开发的最简单的屏幕录制软件。

C50

search

search projects, people, and tags