Self-hosted media platform — Flood torrent UI + Jellyfin + smart prefetch engine with geographic seed diversity scoring
- TypeScript 77.1%
- HTML 13.9%
- Shell 4.7%
- JavaScript 1.8%
- C# 1.3%
- Other 1.2%
|
Some checks failed
CI / quality (push) Has been cancelled
- Add ansible/site.yml: full idempotent system playbook (Phases 1-5) - Reordered: system services (AutoUpdate, UFW, Samba, CredSync) before Jellyfin auto-config - Wizard safety net: detect wizard-done-but-no-users via SQLite, auto-reset - Plugin build+deploy: dotnet 9 SDK install, DLL build, meta.json - Fix plugin csproj: target net9.0, Jellyfin 10.11.0 packages (was net8.0/10.10) - Fix plugin JS: extract Jellyfin auth token from ApiClient/localStorage, set as jellyfin_token cookie so auth proxy passes without Basic auth prompt - Fix plugin JS: iframe src /jellyship/ not /JellyShip/dashboard/ (double path 404) - Add system scripts: auth proxy, credential sync, PAM hook, TTY dashboard |
||
|---|---|---|
| .claude-code | ||
| .forgejo/workflows | ||
| .husky | ||
| ansible | ||
| configs | ||
| docs | ||
| jellyfin-plugin | ||
| public | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| .prettierrc | ||
| = | ||
| eslint.config.js | ||
| install.sh | ||
| jellyfin-auth-proxy.py | ||
| jellyship-credential-sync.py | ||
| jellyship-passwd-hook.sh | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| tsconfig.json | ||
| tty-status.sh | ||
| vitest.config.ts | ||
JellyShip
Self-hosted media platform — Flood torrent UI fork + Jellyfin + smart prefetch engine with FUSE mount and geographic seed diversity scoring.
What is JellyShip?
JellyShip bridges the gap between torrent clients and media servers. Traditional torrent clients download pieces randomly; media servers need sequential, predictable access. JellyShip sits between them with an intelligent prefetch engine that prioritizes downloads based on what you're watching — or about to watch.
Key Features
- Interest Marker System — Unified priority model based on playback state (active, paused, unwatched). Each marker projects a 20-minute preallocation window with gradient priority chunks.
- FUSE Mount — Torrents appear as regular files in a Jellyfin-compatible directory structure. Partial files are streamable; unavailable byte ranges trigger automatic priority boosts.
- Cross-Episode Preloading — When you're 7 minutes from the end of an episode, JellyShip is already downloading the start of the next one.
- Automatic Eviction with Deletion Score — Every file gets a 0-99 score based on demand, seed health, and data freshness. When disk is full, the most expendable content goes first.
- Geographic Seed Diversity — Measures seeder distribution across countries, continents, and autonomous systems. Content with poor diversity scores low for deletion — it resists eviction because the network needs it.
- Peer Observation Database — Tracks all peer interactions with 128-day TTL, freshness-weighted scoring, and background swarm refresh to keep health data current.
Installation
curl -sSL https://raw.githubusercontent.com/bradcarnage/jellyship/main/install.sh | bash
Or manually:
git clone https://forgejo.brads.computer/brad/jellyship.git
cd jellyship
pnpm install
pnpm build
sudo cp configs/jellyship.service /etc/systemd/system/
sudo systemctl enable --now jellyship
Requirements
- Debian 12+ (or any Linux with FUSE support)
- Node.js 22+
- pnpm
- libfuse3-dev
- Jellyfin (optional, for playback integration)
Configuration
Copy the default config and edit:
sudo mkdir -p /etc/jellyship
sudo cp configs/jellyship.default.yaml /etc/jellyship/config.yaml
See docs/preallocation-strategy.md for full configuration reference.
Architecture
Jellyfin Webhooks → Prefetch Engine → torrent-stream → FUSE Mount → Jellyfin Scanner
│
Eviction Engine
├── Diversity Scorer (GeoIP)
├── Swarm Refresh Scheduler
└── Peer Observation DB (NeDB)
Documentation
- Preallocation Strategy — Complete system design, all algorithms, configuration reference
- Handoff Document — Summary and project overview
Tech Stack
| Component | Library |
|---|---|
| Torrent engine | torrent-stream |
| FUSE mount | fuse-native |
| GeoIP | MaxMind GeoLite2 + maxmind (npm) |
| Database | NeDB |
| Webhook server | Fastify |
| Config | YAML |
License
MIT