blumeops/docs/jellyfin.md
Erich Blume c89e69e25f Add docs/ with blumeops zk cards (#82)
## Summary
- Move 21 blumeops-tagged zettelkasten cards from ~/code/personal/zk/ to docs/
- Create symlink ~/code/personal/zk/blumeops -> blumeops/docs for obsidian integration
- Update zk-docs mise task to read from local docs/ directory
- Add blumeops workspace to obsidian.nvim config (strict=true)

## Benefits
- Docs are now git-managed in the blumeops repo (visible on GitHub)
- Wiki links between blumeops docs continue to work via symlink
- obsidian-sync isolation: docs don't sync to work laptop
- Direct editing via obsidian.nvim with dedicated workspace

## Testing
- [x] Files moved to docs/ (21 files)
- [x] Symlink created: ~/code/personal/zk/blumeops -> blumeops/docs
- [x] zk-docs mise task updated and working
- [ ] Verify obsidian.nvim link resolution (after merge)
- [ ] Verify obsidian backlinks work

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/82
2026-02-02 21:40:53 -08:00

2.5 KiB

id aliases tags
jellyfin
jellyfin
blumeops

Jellyfin Management Log

Jellyfin is a free, open-source media server running natively on indri for full VideoToolbox hardware transcoding support.

Service Details

  • URL: https://jellyfin.ops.eblu.me
  • Port: 8096 (localhost only, proxied via Caddy)
  • Data directory: ~/Library/Application Support/jellyfin
  • Media path: /Volumes/allisonflix (NFS from sifaka)
  • LaunchAgent: mcquack.jellyfin

Useful Commands

# Check LaunchAgent status
ssh indri 'launchctl list | grep jellyfin'

# View logs
ssh indri 'tail -f ~/Library/Logs/mcquack.jellyfin.err.log'

# Check port is listening
ssh indri 'lsof -nP -iTCP:8096 -sTCP:LISTEN'

# Restart Jellyfin
ssh indri 'launchctl unload ~/Library/LaunchAgents/mcquack.jellyfin.plist && launchctl load ~/Library/LaunchAgents/mcquack.jellyfin.plist'

# Check metrics
ssh indri 'cat /opt/homebrew/var/node_exporter/textfile/jellyfin.prom'

Hardware Transcoding

Jellyfin uses Apple VideoToolbox for hardware-accelerated transcoding on the M1 Mac Mini.

Capabilities:

  • H.264 encode/decode: Hardware
  • HEVC (H.265) encode/decode: Hardware
  • AV1 decode: Software only (requires M3+)
  • HDR to SDR tone mapping: VPP (hardware)
  • Concurrent 4K streams: ~3 with HDR tonemapping

Configuration (Dashboard > Playback):

  1. Hardware Acceleration: Apple VideoToolbox
  2. Allow hardware encoding: Enabled
  3. VPP Tone mapping: Enabled (for HDR to SDR)

Observability

  • Metrics: Collected via jellyfin_metrics ansible role to Prometheus textfile
  • Logs: Forwarded to Loki via Alloy (service="jellyfin")
  • Dashboard: "Jellyfin Media Server" in Grafana

Metrics collected:

  • jellyfin_up - Server availability
  • jellyfin_version_info - Server version
  • jellyfin_library_items{library,type} - Library counts
  • jellyfin_sessions_total - Active sessions
  • jellyfin_sessions_playing - Playing sessions
  • jellyfin_transcode_sessions_total - Transcoding sessions

API Key Setup

Metrics collection requires an API key:

  1. Open https://jellyfin.ops.eblu.me
  2. Go to Dashboard > API Keys > Add
  3. Create key with description "metrics"
  4. Save to indri:
ssh indri 'echo "YOUR_API_KEY" > ~/.jellyfin-api-key && chmod 600 ~/.jellyfin-api-key'

Log

2026-01-30 (Initial Deployment)

  • Deployed Jellyfin natively on indri via Ansible
  • Installed via Homebrew cask, managed via LaunchAgent
  • Added Caddy routing for jellyfin.ops.eblu.me
  • Added metrics collection (jellyfin_metrics role)
  • Added log collection via Alloy
  • Created Grafana dashboard