My question: how do I fix this error. Refusing to downgrade jellyfin/jellyfin: running 12.0 → pinned 10.11.11 (module: media). [ERROR] This SparkBox build pins an OLDER media than you're running. [ERROR] Recreating would likely break it (app vs already-migrated data). [ERROR] If you truly intend this: SBALLOWDOWNGRADE=1 sparkbox up media [ERROR] Aborting 'up': a running app would be downgraded by this build. [ERROR] Nothing was changed — your apps are still running. This is almost [ERROR] certainly a bad SparkBox version pin; update SparkBox once it's [ERROR] fixed, or re-run with SBALLOWDOWNGRADE=1 to force it. SparkBox AI replied: The error is telling you straight up: your SparkBox version pins an older Jellyfin (10.11.11) than what's running on your box (12.0). This means your SparkBox install is out of date. Fix it in this order: 1. Update SparkBox to the latest release: sudo sparkbox upgrade This pulls the newest SparkBox build, which should pin a newer (or matching) Jellyfin version. Wait for it to finish. 2. Then retry the media module: sudo sparkbox up media That should resolve it. The newer SparkBox build will have a Jellyfin pin that matches or exceeds what you're already running, so no downgrade happens. If upgrade says you're already on the latest and the error persists, then your SparkBox is current but its Jellyfin pin is genuinely older than your running container — which is rare. In tha …(reply truncated — full chat sent to Tom)
17 replies
Chris wrote:
Thanks for catching that truncated reply — I'll give you the full picture.\n\nThis error means your box is running Jellyfin 12.0, but your current SparkBox build pins version 10.11.11. That's a one-way migration: once you move to Jellyfin 12.0, the database changes are permanent, so the guard is preventing you from downgrading back to 10.11.11 (which would corrupt your Jellyfin data).\n\nHere's what happened: You likely opted into Jellyfin 12.0 when it became available (v1.6.678+), either by setting JELLYFINVERSION=12.0 manually or getting a new box that seeds it by default. Since then, your SparkBox install hasn't been fully upgraded to a version that supports Jellyfin 12.0 in its committed pin.\n\nThe fix:\n\n1. Run sudo sparkbox upgrade to pull the latest SparkBox build.\n2. Then run sudo sparkbox up media.\n\nThe newest build will pin Jellyfin 12.0 (or newer) in its base configuration, so there's no downgrade conflict anymore.\n\nIf you're already on the latest after running upgrade and the error persists, reply here with the output of sparkbox -v so we can dig deeper — but upgrading should resolve it for you.\n\nYou're all set once both commands complete without errors.
MEllmer wrote:
I have performed the requested commands and I am still running into an issue. The output of Sparkbox -v is below SparkBox v1.6.681 The log output from the upgrade is mellmer@media:~$ sudo sparkbox up media / | | | | ) \ \| ' \ / | '| |/ / \ / \ \/ / ) | |) | (| | | | <| |) | () < |/| ./ \,|| ||\\/ \//\\ || SparkBox v1.6.681 - Self-Hosted Privacy Stack Created by Tom Spark | youtube.com/@TomSparkReviews Network profile: private [INFO] Starting SparkBox... [INFO] Targeted up: media [INFO] Prepared 1 module config dir(s) for PUID=1000 PGID=1000 [INFO] .env changed since last up — recreating the affected containers to pick up new values [WARN] VPNPROVIDER=surfshark with VPNDOT='on': Surfshark blocks encrypted DNS inside the tunnel — if the VPN connects but apps report DNS/SSL errors, set VPNDOT=off. [ERROR] Refusing to downgrade jellyfin/jellyfin: running 12.0 → pinned 10.11.11 (module: media). [ERROR] This SparkBox build pins an OLDER media than you're running. [ERROR] Recreating would likely break it (app vs already-migrated data). [ERROR] If you truly intend this: SBALLOWDOWNGRADE=1 sparkbox up media [ERROR] Aborting 'up': a running app would be downgraded by this build. [ERROR] Nothing was changed — your apps are still running. This is almost [ERROR] certainly a bad SparkBox version pin; update SparkBox once it's [ERROR] fixed, or re-run with SBALLOWDOWNGRADE=1 to force it. I have the Allow downgrade command above.
Chris wrote:
Got it — thanks for the output. You're on v1.6.681, which is current, but the error is telling you something specific: your running Jellyfin is 12.0 (already migrated) but SparkBox's default pin is 10.11.11. This happens when Jellyfin 12.0 was set at some point, but the JELLYFINVERSION=12.0 opt-in setting didn't persist back to your .env file. Here's the fix: 1. SSH into your box (or open a terminal) 2. Run: echo 'JELLYFINVERSION=12.0' /opt/sparkbox/.env 3. Then: sudo sparkbox up media That adds the sticky Jellyfin 12.0 opt-in to your .env, so when the media module recreates it will pin Jellyfin 12.0 and the downgrade guard won't fire. Once the recreate completes, the container should come back up and stay healthy. Let me know if that clears it — if you hit any errors on the up step, reply with just the [ERROR] lines.
MEllmer wrote:
Still getting the following error. mellmer@media:~$ echo 'JELLYFINVERSION=12.0' /opt/sparkbox/.env mellmer@media:~$ sudo sparkbox up media [OK] Opened 1 port(s) for 'pihole' in UFW. / | | | | ) \ \| ' \ / | '| |/ / \ / \ \/ / ) | |) | (| | | | <| |) | () < |/| ./ \,|| ||\\/ \//\\ || SparkBox v1.6.681 - Self-Hosted Privacy Stack Created by Tom Spark | youtube.com/@TomSparkReviews Network profile: private [INFO] Starting SparkBox... [INFO] Targeted up: media [INFO] Prepared 1 module config dir(s) for PUID=1000 PGID=1000 [INFO] .env changed since last up — recreating the affected containers to pick up new values [WARN] VPNPROVIDER=surfshark with VPNDOT='on': Surfshark blocks encrypted DNS inside the tunnel — if the VPN connects but apps report DNS/SSL errors, set VPNDOT=off. [ERROR] Refusing to downgrade jellyfin/jellyfin: running 12.0 → pinned 10.11.11 (module: media). [ERROR] This SparkBox build pins an OLDER media than you're running. [ERROR] Recreating would likely break it (app vs already-migrated data). [ERROR] If you truly intend this: SBALLOWDOWNGRADE=1 sparkbox up media [ERROR] Aborting 'up': a running app would be downgraded by this build. [ERROR] Nothing was changed — your apps are still running. This is almost [ERROR] certainly a bad SparkBox version pin; update SparkBox once it's [ERROR] fixed, or re-run with SBALLOWDOWNGRADE=1 to force it.
Chris wrote:
Let me dig into this — the opt-in should have stuck by now. Let's verify the env var actually landed and check for a state marker. Run these two checks: 1. grep JELLYFINVERSION /opt/sparkbox/.env — tell me exactly what it prints (or if it prints nothing). 2. ls -la /opt/sparkbox/state/ | grep -i jellyfin — tell me what files are there (or if it prints nothing). Once I see those outputs, I'll know whether this is a config persistence issue or something else that needs fixing. Don't run sparkbox up media again yet — just give me those two lines and we'll go from there.
MEllmer wrote:
mellmer@media:~$ grep JELLYFINVERSION /opt/sparkbox/.env JELLYFINVERSION=12.0 JELLYFINVERSION=12.0 mellmer@media:~$ ls -la /opt/sparkbox/state/ | grep -i jellyfin -rw------- 1 mellmer mellmer 92 Sep 10 20:58 jellyfin-admin-password.txt -rw------- 1 mellmer mellmer 83 Sep 10 20:58 jellyfin-encoding-seeded drwxrwxr-x 2 mellmer mellmer 4096 Sep 10 20:50 jellyfin-version-optin
Chris wrote:
Got it - I can see the marker file exists and the JELLYFINVERSION lines are in .env. The fact the guard still fires after the opt-in was set suggests the value might be duplicated or malformed. Let me verify: Run this exact command: grep -n JELLYFINVERSION /opt/sparkbox/.env Post back the complete output with line numbers. That will show me exactly what's in the file and whether the duplication is causing the parser to skip it.
MEllmer wrote:
mellmer@media:~$ grep -n JELLYFINVERSION /opt/sparkbox/.env 25:JELLYFINVERSION=12.0 113:JELLYFINVERSION=12.0
Chris wrote:
Perfect — that's the issue. You have JELLYFINVERSION=12.0 on two separate lines (25 and 113), and the duplicate is preventing the opt-in from sticking properly. Here's the fix: 1. SSH in and run: sed -i '25d' /opt/sparkbox/.env This removes the first occurrence on line 25. Line 113 will shift down but keep the value. 2. Verify it worked: grep JELLYFINVERSION /opt/sparkbox/.env You should see exactly ONE line now. 3. Then recreate the media module: sudo sparkbox up media Once the up command completes without the downgrade error, you're all set — the opt-in will be sticky from that point forward.
MEllmer wrote:
Still received the downgrade error. I do only have one line now. mellmer@media:~$ grep -n JELLYFINVERSION /opt/sparkbox/.env 25:JELLYFINVERSION=12.0 113:JELLYFINVERSION=12.0 mellmer@media:~$ sed -i '25d' /opt/sparkbox/.env mellmer@media:~$ grep JELLYFINVERSION /opt/sparkbox/.env JELLYFINVERSION=12.0 mellmer@media:~$ sudo sparkbox up media [sudo] password for mellmer: / | | | | ) \ \| ' \ / | '| |/ / \ / \ \/ / ) | |) | (| | | | <| |) | () < |/| ./ \,|| ||\\/ \//\\ || SparkBox v1.6.681 - Self-Hosted Privacy Stack Created by Tom Spark | youtube.com/@TomSparkReviews Network profile: private [INFO] Starting SparkBox... [INFO] Targeted up: media [INFO] Prepared 1 module config dir(s) for PUID=1000 PGID=1000 [INFO] .env changed since last up — recreating the affected containers to pick u p new values [WARN] VPNPROVIDER=surfshark with VPNDOT='on': Surfshark blocks encrypted DNS inside the tunnel — if the VPN connects but apps report DNS/SSL errors, set VPN DOT=off. [ERROR] Refusing to downgrade jellyfin/jellyfin: running 12.0 → pinned 10.11.11 (module: media). [ERROR] This SparkBox build pins an OLDER media than you're running. [ERROR] Recreating would likely break it (app vs already-migrated data). [ERROR] If you truly intend this: SBALLOWDOWNGRADE=1 sparkbox up media [ERROR] Aborting 'up': a running app would be downgraded by this build. [ERROR] Nothing was changed — your apps are still running. This is almost [ERROR] certainly a bad SparkBox version pin; update SparkBox once it's [ERROR] fixed, or re-run with SBALLOWDOWNGRADE=1 to force it.
Chris wrote:
Thanks for confirming the duplicate is gone. The persistent error tells us the opt-in marker might not be wired to the compose evaluation. Let me get one diagnostic: Run this: cat /opt/sparkbox/state/jellyfin-version-optin Tell me exactly what it prints (or if empty). That file records the opt-in intent. If it is empty or missing, the opt-in never persisted when you ran the earlier up commands, which would explain why the guard still fires. Once I see that output, I will know whether this is a parsing issue or a state persistence problem.
MEllmer wrote:
mellmer@media:~$ cat /opt/sparkbox/state/jellyfin-version-optin cat: /opt/sparkbox/state/jellyfin-version-optin: Is a directory According to the above maybe the command was not complete??
Chris wrote:
Got it — that's the real issue. The opt-in marker was created as a directory instead of a file, which is blocking the feature from working. Let's fix it: 1. Remove the directory: rm -rf /opt/sparkbox/state/jellyfin-version-optin 2. Verify the .env still has exactly one JELLYFINVERSION=12.0 line (you already cleaned the duplicate, so this should be good) 3. Recreate the media module: sudo sparkbox up media When the up command runs, it will re-create the opt-in marker as a file this time and apply the Jellyfin 12.0 pin correctly. The downgrade guard should not fire once the module recreates. Let me know if that clears it for you.
MEllmer wrote:
Same result mellmer@media:~$ sudo rm -rf /opt/sparkbox/state/jellyfin-version-optin mellmer@media:~$ grep JELLYFINVERSION /opt/sparkbox/.env JELLYFINVERSION=12.0 mellmer@media:~$ sudo sparkbox up media / | | | | ) \ \| ' \ / | '| |/ / \ / \ \/ / ) | |) | (| | | | <| |) | () < |/| ./ \,|| ||\\/ \//\\ || SparkBox v1.6.681 - Self-Hosted Privacy Stack Created by Tom Spark | youtube.com/@TomSparkReviews Network profile: private [INFO] Starting SparkBox... [INFO] Targeted up: media [INFO] Prepared 1 module config dir(s) for PUID=1000 PGID=1000 [INFO] .env changed since last up — recreating the affected containers to pick up new values [WARN] VPNPROVIDER=surfshark with VPNDOT='on': Surfshark blocks encrypted DNS inside the tunnel — if the VPN connects but apps report DNS/SSL errors, set VPNDOT=off. [ERROR] Refusing to downgrade jellyfin/jellyfin: running 12.0 → pinned 10.11.11 (module: media). [ERROR] This SparkBox build pins an OLDER media than you're running. [ERROR] Recreating would likely break it (app vs already-migrated data). [ERROR] If you truly intend this: SBALLOWDOWNGRADE=1 sparkbox up media [ERROR] Aborting 'up': a running app would be downgraded by this build. [ERROR] Nothing was changed — your apps are still running. This is almost [ERROR] certainly a bad SparkBox version pin; update SparkBox once it's [ERROR] fixed, or re-run with SBALLOWDOWNGRADE=1 to force it. mellmer@media:~$
Chris wrote:
Got good news — this is the bug that was just fixed in v1.6.682 (released today). The downgrade guard in v1.6.681 doesn't read the Jellyfin 12 opt-in overlay properly, even when the marker file and .env entry are both set correctly. Here's the fix: 1. Upgrade SparkBox to the latest: sudo sparkbox upgrade 2. Then retry: sudo sparkbox up media Once v1.6.682 is installed, the guard will read your opt-in overlay and the downgrade error won't fire. You're all set after the up command completes. Let me know if that clears it.
MEllmer wrote:
appears to be resolved! thanks for the support.
Chris wrote:
Great to hear it's working now\! v1.6.682 fixed the issue where the downgrade guard wasn't reading the Jellyfin 12 opt-in overlay correctly. Glad the upgrade resolved it for you.