- C# 75.1%
- HTML 16.9%
- CSS 6.7%
- Shell 1.1%
- Dockerfile 0.1%
|
Some checks failed
docker / image (push) Failing after 1s
build.sh was grepping 0.4.0.N so every 0.5 pin stayed as an orphan. prune-images.sh removes unused 0.5.0.N tags and keeps :latest / running. |
||
|---|---|---|
| .forgejo/workflows | ||
| docs | ||
| src | ||
| templates | ||
| tests/JellySync.Tests | ||
| unraid | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| ca_profile.xml | ||
| clean-build.ps1 | ||
| Directory.Build.props | ||
| Directory.Build.targets | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| global.json | ||
| JellySync.sln | ||
| README.md | ||
| SETUP-UNRAID.md | ||
| TESTING.md | ||
JellySync
One-way TV series and movie sync from remote Jellyfin servers into a local Unraid 7.x library.
C# / ASP.NET Core 8. Product version 0.5.0.BuildNumber beta (unreleased). BuildNumber is absolute (does not reset at 0.5). Line 0.1 TypeScript (retired). 0.2 C#. 0.3 Tdarr + mobile. 0.4 movies. 0.5 Jellyfin 10.x and 12.x. No Jellyfin plugin. WebUI port 8585. Canonical git: forge.wolfhound.dev/Paldren/JellySync — docs ship with the code.
| Host | Unraid 7.x Docker only |
| WebUI | http://YOUR-UNRAID-IP:8585/ |
| Jellyfin | 10.x and 12.x supported (0.5 target 12.0.0). Auto-detect or pick the line in Settings. 13+ warns; proceed at your own risk |
| Plugin | None — stock Jellyfin REST |
| Identity | Remote series = Series Item.Id; remote movie = Movie Item.Id; remote episode = Episode Item.Id. Independent of local filename |
| Naming | Subscribe picks a base folder under /media plus named templates (series + Movie Folder / Movie Name). {tvdbid} / {tmdbid} fill from remote Jellyfin, then Sonarr/Radarr |
| Replace | Ignore / newer (DateCreated) / quality (local HDR/SDR pref, then resolution) |
| Look | *arr-style dark WebUI; page canvas light jelly #221A26; chrome #141414, cards #1a1a1a |
| Version | 0.5.0.N-beta — bump JellySyncBuild in Directory.Build.targets or docker build --build-arg BUILD_NUMBER=N. System page and footer show it. |
| Role | Inside the container | Unraid host default |
|---|---|---|
| Appdata (catalog, secrets) | /config |
/mnt/user/appdata/JellySync |
| Media library | /media |
the same share local Jellyfin uses |
| Download temp | /tmp/jellysync |
/mnt/user/multimedia/Temp |
Open JellySync.sln in Visual Studio 2022 (or use the .NET 8 SDK). Every public type in JellySync.Core has XML documentation (GenerateDocumentationFile; missing comments on Core are CS1591).
| Project | Role |
|---|---|
| JellySync.Core | Identity (Item.Id), naming (series + movies), quality, replace, enqueue, demo catalog, simulated transport |
| JellySync.Web | *arr-style Blazor Server UI + download worker |
| JellySync.App | Production host (empty store — Unraid image) |
| JellySync.Demo | Startup project. Seeds Cabin NAS (10.11.11), Lab 12 (12.0.0, supported), WolfhoundNAS (Firefly, download revoked) |
| JellySync.Tests | xUnit |
Documentation (in this repo)
| Document | Contents |
|---|---|
| SETUP-UNRAID.md | Install, run, update, and troubleshoot the Unraid Docker container |
| docs/INSTRUCTIONS.md | How to use the WebUI (Library poll, Subscribe, Series Scan/Sync, movie Get) |
| docs/DEMO.md | Install, run, and use JellySync.Demo in Visual Studio / dotnet |
| TESTING.md | Sign-off tests (dotnet test + Unraid container) |
| docs/GIT-UNRAID.md | Forgejo tags, Unraid Add Container / Upgrade (latest-0.5 / latest-0.4 / latest-0.3), image push, Git-hosted icon |
| docs/Jellyfin_Series_Sync_SRS_v0.5.0.md | 0.5.0 Jellyfin 10.x / 12.x (this line) |
| docs/Jellyfin_Series_Sync_SRS_v0.4.0.md | 0.4.0 movie requirements (frozen) |
| docs/Jellyfin_Series_Sync_SRS_v0.3.0.md | 0.3.0 Tdarr + mobile (frozen) |
| docs/Jellyfin_Series_Sync_SRS_v1.8.md | 0.2.x requirements. v1.7 is history. |
| docs/README.md | Documentation map |
| unraid/ | Community Apps template + Docker icon |
Unraid in one page
Install (other Unraid users): Community Apps → JellySync 0.5, or Docker → Add Container with Repository forge.wolfhound.dev/paldren/jellysync:latest-0.5. No git clone, no docker build. Details: SETUP-UNRAID.md. Frozen 0.4 stays on :latest-0.4.
Upgrade (you, after publishing the image): push release/0.5 → Forgejo Actions → docker green → Unraid Force update (Repository :latest-0.5). Icon: https://forge.wolfhound.dev/Paldren/JellySync/raw/tag/latest-0.5/unraid/JellySync.png. Package must be public. CA submit: ca.unraid.net/submit. Runner: docs/GIT-UNRAID.md.
You do not need Visual Studio on the server. First install: clone this repository to /mnt/user/appdata/jellysync-src (must contain Dockerfile and JellySync.sln):
cd /mnt/user/appdata
git clone --branch release/0.5 --depth 1 \
https://forge.wolfhound.dev/Paldren/JellySync.git jellysync-src
Terminal — full path when Unraid Repository is the forge tag (git + build + push + pull + run):
cd /mnt/user/appdata/jellysync-src
bash unraid/release.sh 93
Compile only (jellysync:local; Force update will still pull the old registry image):
cd /mnt/user/appdata/jellysync-src
bash unraid/build.sh 93
Unraid → Docker tab should list JellySync. If you add it by hand instead of build.sh:
| Type | Name | Container | Host |
|---|---|---|---|
| Port | WebUI | 8585 |
8585 |
| Path | Appdata | /config |
/mnt/user/appdata/JellySync |
| Path | Media | /media |
your library share (same as local Jellyfin) |
| Variable | PUID |
99 |
|
| Variable | PGID |
100 |
|
| Variable | UMASK |
002 |
|
| Variable | TZ |
America/New_York |
|
| Variable | WEB_USERNAME / WEB_PASSWORD |
blank = no login |
Apply. Open http://YOUR-UNRAID-IP:8585/. Follow First boot in SETUP-UNRAID.md, then docs/INSTRUCTIONS.md, then tick TESTING.md.
A fresh Unraid container starts empty. Demo remotes exist only in Visual Studio (docs/DEMO.md).
Never point Jellyfin / Sonarr / Bazarr at http://localhost:… from this container.
Visual Studio Demo
- Open
JellySync.sln. - Right-click JellySync.Demo → Set as Startup Project.
- F5 (or Ctrl+F5).
- Browser:
http://localhost:8585/
Cabin NAS is 10.11.11 and Lab 12 is 12.0.0 — both supported on 0.5 (no version banner).
dotnet test
dotnet run --project src\JellySync.Demo
Do not copy bin/obj from Linux. If F5 throws DirectoryNotFoundException for wwwroot, run .\clean-build.ps1 then Rebuild. Details: docs/DEMO.md.
What to click
- Library → Poll server, then Series → Scan / Sync — Sync paints Scan first, then the worker queues. Expanse specials (S00) first; S01E06 blocked. Season fill bars update as files finish. Activity badge = queue.
- Series — collapsed series → seasons (fill bar) → episodes; Had / Available (e.g. 1/7); Collapse All. Firefly / WolfhoundNAS is red until you Acknowledge the download-permission notice; Sync then re-raises it.
- Library → Sync on Andor — preview uses Andor (2022) and Season 01. Absolute keeps Season 01.
- Settings — tabs General / Servers / Templates / Connect. Jellyfin version Auto / 10.x / 12.x on local and each remote. Library poll cadence + series interval on each remote.
- Notifications — per-row Acknowledge + Clear, Acknowledge all, Clear acknowledged.
Conventions (defaults)
| Piece | Template | Example |
|---|---|---|
| Series Folder | {ny} |
Firefly (2005) |
| Season Folder | {'Season '+s00} |
Season 01 |
| Seasonal file | {n} - {s00e00} - {t} {[vf, vc, ac]} |
Firefly - S01E01 - Serenity [480p, x264, AC3] |
| Absolute file | {n} - {absolute} - {t} {[vf, vc, ac]} |
One Piece - 1045 - Title [1080p, HEVC, AAC] (still in Season 01) |
| Specials folder | Season 00 (default), Season 0, or Specials | Season 0 still uses S00Exx |
Environment variables
| Variable | Default | Meaning |
|---|---|---|
PUID / PGID |
99 / 100 | File owner (Unraid nobody:users). Match Jellyfin so it can read new files |
UMASK |
002 | Dest files 664 / new dirs 775 (SMB users). Do not use 022. |
TZ |
America/New_York | Download windows use this timezone |
WEB_USERNAME / WEB_PASSWORD |
empty | Both blank → no WebUI login |
CONFIG_KEY |
generated | Encrypts /config/state.json |
CONFIG_DIR |
/config |
Catalog, secrets, partials |
MEDIA_ROOT |
/media |
All save paths must stay under this |
PORT / ASPNETCORE_URLS |
8585 | Container listen address |
What is in this folder
| Path | Role |
|---|---|
| JellySync.sln | Visual Studio solution |
| src/ | Core, Web, App, Demo |
| tests/ | xUnit |
| docs/ | Instructions, Demo walkthrough, SRS (+ watermarked Word) |
| SETUP-UNRAID.md | Unraid install |
| TESTING.md | Sign-off tests |
| Dockerfile | Unraid image (dotnet publish of JellySync.App) |
| docker-entrypoint.sh | PUID/PGID, CONFIG_KEY, listen 8585 |
| docker-compose.yml | Compose / Unraid 7 plugin |
| unraid/ | Template XML + Docker icon |