[Plugin] PeppyMeter/Spectrum Screensaver for VOLUMIO Bookworm

Hey Gelo5,

Thanks for the thorough testing - glad to see skin changing, logo scaling, and all the rotation modes working correctly on the Windows client.

The smudging on spinning elements has been fixed. Main reason: a 1px difference between a circle and an oblong, and a 1px offset on the circle centre. That is right - the entire visual artifact that had you decorating screenshots with pink dots was caused by few pixels. Two to be exact. Not a rendering pipeline fault. Not a z-order collision. Not a compositor failure. Two pixels that thought they were special. And not so perfect circles.

They have been corrected and reminded of their place in the coordinate system.

Fix is in the experimental branch.

Kind Regards,

1 Like

Hey Gelo5,

Good catch - and yes, single-profile-per-client when you are running three servers is a pain. You should not have to re-run the wizard every time you point the laptop at a different box.

Multi-profile support is noted for a future release. The idea is that each server gets its own saved configuration so you can switch between them without losing your settings. Details to be worked out but you have planted the flag.

This release is bug fixes only - the smudging fix, the font crash, and the reload loop are the priority. Right now, admissions are open to the test clinic only. Sleep clinic is currently understaffed - dream of profiles to come next.

Kind Regards,

Unfortunately, this did not fix the problem.


1920x1080 Turntables
maybe the album cover mask is causing this (in this case)?

I checked all the text files retrieved, and as you said, they were all Windows CRLF files. This operation was performed using Git App on Windows.

Okay, I thought this problem only occurred in my specific situation. Your solution is a more generalized result.

Just installed this from github repo and it looks fantastic. I was messing with the Aimp Windows app and this tops it in many ways. I have a couple of questions (not clear from documentation)

  1. I have an iPAD Air and would like to view the screensaver there. Is this available via http?

  2. I couldn’t find meter.txt as mentioned on the Github readme.

I updated to the latest peppy_remote.py (experimental), and the font issue is now resolved, but the “config reload loop” is still persisting.

Hey @Lee.Yan,

The reload loop fix is in peppy_remote - the full package, not just peppy_remote.py. Copying a single file from the experimental branch does not update the dozen other modules that changed alongside it. The installer exists for a reason - it pulls handlers, fonts, icons, and patches them for the remote client. Cherry-picking files is how you get a half-experimental, half-main Frankenstein that has problems neither branch has on its own.

Kind Regards,

Dear Volumionauts,

I have spent the last few weeks explaining the same install instructions in slightly different words to slightly different people in slightly different time zones. Copy this. No, that branch. No, the other flag. No, you downloaded the installer from main but asked for experimental content. No, iex cannot pass arguments. No, closing PowerShell and opening a new one is not optional.

I have come to a realisation. The sleep clinic has a new wing. While @Gelo5 dreams of features, @dewen dreams of fonts, and @pjorgenunes dreams of remote wizards, I have checked myself into the adjacent ward: the Perfection Obsession Detox Clinic. Symptoms include rewriting an installer four times because the flag naming was “slightly ambiguous”, building a dedicated font pipeline because one user saw a square, and writing a README so thorough it has its own table of contents.

I am not getting better. But the installer is.

What changed

The remote installer (both install.sh and install.ps1) has been rebuilt. Previously the -b flag only switched the peppy_screensaver branch while peppy_remote files always came from main. This caused confusion. Including mine.

The installer now has proper branch control for both repos:

–both (or -Both on Windows): sets both repos to the same branch. This is what you want 99% of the time.

–remote-branch / --screensaver-branch: sets each repo independently for the rare case where you need a mixed setup.

-b still works as a legacy alias for --both.

The installer banner now shows exactly where your files are coming from:

Remote files:  experimental (peppy_remote)
Handler files: experimental (peppy_screensaver)

If you see “main” where you expected “experimental”, something went wrong. Fix it before reporting bugs.

How to install from experimental

The README has been rewritten as the single source of truth. If you are testing experimental, follow the “Testing from experimental branch” section exactly.

For the impatient:

Linux:

curl -sSL https://raw.githubusercontent.com/foonerd/peppy_remote/experimental/install.sh | bash -s -- --both experimental

Windows (two steps, no shortcuts):

irm https://raw.githubusercontent.com/foonerd/peppy_remote/experimental/install.ps1 -OutFile install.ps1
.\install.ps1 -Both experimental

If PowerShell blocks it:

powershell -ExecutionPolicy Bypass -File install.ps1 -Both experimental

If it fails after installing Python or Git via winget, close ALL terminal windows, open a new one, run Step 2 again. This is a Windows PATH issue, not a plugin issue.

Do not copy individual .py files from the repo. Do not mix branches. Do not improvise. The installer handles dependencies, fonts, icons, patching, and virtual environment setup. Let it do its job.


The README covers every scenario. Please read it before asking. I wrote it instead of sleeping, so the least it deserves is a glance.


And while we are at it - the fixes are in the server plugin also, not the remote client. The UDP version listener on the server is comparing mismatched strings. So if your peppy_screensaver on Volumio is still running main, you are testing a fix that is not there. Both sides need experimental. The server is where the loop originates. The remote is where you stare at it in disbelief. Fixing only the staring end does not resolve what fixes already solved.

Server plugin:

  1. uninstall via Volumio UI
  2. SSH in
  3. cd ~
  4. rm -rf peppy_screensaver if you have a previous clone
  5. git clone --depth=1 https://github.com/foonerd/peppy_screensaver.git --branch experimental
  6. cd peppy_screensaver
  7. volumio plugin install
  8. enable in UI

You know the drill by now. If you do not, the README knows it for you.

As always, provided “as-is”. The experimental branch is experimental. The clue is in the name.

Kind Regards,

Hey @KCAudio,

Welcome, and glad you like what you see.

To your questions:

  1. There is no web or HTTP-based viewer. The remote client is a native application that runs on Linux or Windows using pygame for rendering. An iPad cannot run it. There are no plans for a browser-based or app-based viewer - the rendering pipeline relies on pygame, SDL2, and direct pixel manipulation that does not translate to a browser context. What you see is what runs on a real computer with a real GPU.

  2. meters.txt lives inside each template folder. The path on Volumio is:

/data/plugins/user_interface/peppy_screensaver/screensaver/meters/[template_name]/meters.txt

Replace [template_name] with the folder name of the template you are using, for example 1280x720_g5_443_rotate. Each template has its own meters.txt that defines the meter sections, component positions, and animation parameters for that specific skin.

Kind Regards,

1 Like

I performed a full installation. but the “config reload loop” is still persisting.

Selecting “Use server theme” for ‘Meter theme’ works normally, regardless of whether the templates used come from the SMB Volumio server or the local machine. Using other options for ‘Meter theme’ will result in a “config reload loop”.

I checked the GitHub logs for “fix: stop config reload loop and clarify reload”, and the only file affected is peppy_remote.py.

Hey @Lee.Yan,

I cannot replicate this problem.

Here is what I need:

  1. Your config.json - the full text, not a screenshot. Open it in Notepad, select all, copy, paste here. On Windows it is in your peppy_remote folder.

  2. Exactly what you selected in the wizard, step by step. NO SCREENSHOTS - Which option for “Meter theme” - “Use server theme”, a fixed meter, random from folder, or random from list? Which template folder? Did you change anything manually after the wizard?

  3. Are your templates coming from SMB (Volumio share) or local path? What is the exact path?

  4. What is on the server side - which peppy_screensaver branch, what meter mode is set in the Volumio UI (random, list, fixed)?

“It does not work” and a screenshot of scrolling text is not enough to diagnose anything. I need to see exactly what you configured and where, so I can reproduce it identically on my side.

Kind Regards,

config.json in Windows

{
“wizard_completed”: true,
“server”: {
“host”: “192.168.2.67”,
“level_port”: 5580,
“spectrum_port”: 5581,
“volumio_port”: 3000,
“discovery_port”: 5579,
“discovery_timeout”: 10
},
“display”: {
“windowed”: true,
“position”: null,
“fullscreen”: false,
“monitor”: 0,
“meter_folder”: “1920x1080_g5_709”,
“meter”: “random”
},
“templates”: {
“use_smb”: false,
“local_path”: “C:/Users/Trinis/peppy_remote/templates”,
“spectrum_local_path”: “C:/Users/Trinis/peppy_remote/templates_spectrum”
},
“spectrum”: {
“decay_rate”: 0.85
},
“debug”: {
“level”: “off”,
“trace_spectrum”: false,
“trace_network”: false,
“trace_config”: false
}
}

Volumio Side package.json

{
“name”: “peppy_screensaver”,
“version”: “3.3.2”,
“description”: “PeppyMeter screensaver for Volumio”,
“main”: “index.js”,
“scripts”: {
“test”: “echo "Error: no test specified" && exit 1”
},
“author”: “2aCD (original), Just a Nerd”,
“license”: “MIT”,
“repository”: {
“type”: “git”,
“url”: “GitHub - foonerd/peppy_screensaver · GitHub
},
“volumio_info”: {
“prettyName”: “PeppyMeter Screensaver”,
“icon”: “fa-lightbulb-o”,
“plugin_type”: “user_interface”,
“boot_priority”: 10,
“has_alsa_contribution”: true,
“os”: [
“bookworm”
],
“architectures”: [
“armhf”,
“amd64”
],
“details”: “VU meter screensaver using PeppyMeter”,
“changelog”: “3.3.2 - Multi-client remote (unicast discovery/level/spectrum); theme-follow reload fix; 3.3.1 peppy_fonts defaults and config toggle.”
},
“engines”: {
“node”: “>=20”,
“volumio”: “>=4”
},
“dependencies”: {
“fs-extra”: “^11.2.0”,
“kew”: “^0.7.0”,
“v-conf”: “^1.4.3”,
“socket.io-client”: “^1.7.4”,
“ini”: “^4.1.1”,
“line-reader”: “^0.4.0”,
“image-size”: “^1.1.1”
}
}

server side meter mode is random

Hey @Gelo5,

I am going in circles with this, like your album cover mask, at full RPM. Other than getting dizzy from tracking everything that rotates, I can not get this replicated on experimental branches.

Are you absolutely certain that server and remote are on the same code from experimental branch from both: peppy_screensaver and peppy_remote?

Going outside, touching grass, my head is spinning.

Kind Regards,

Hey @Lee.Yan,

Thank you. That config.json changes everything.

The problem is not the server. It is not the UDP version listener. It is not config version management. It is not the reload hardening work we did this week. None of that was relevant. We spent a considerable amount of time chasing server-side paths, tightening config version comparisons, and normalising string matching - all excellent work, all completely beside the point.

The actual culprit:

"meter_folder": "1920x1080_g5_709",
"meter": "random"

This is kiosk random mode. Local handler, not server. The remote picks a random meter from the folder, loads it, and then immediately compares the loaded meter name (“153G5_Studer A810”) against the configured value (“random”). Those will never be equal. So it reloads. Picks another random meter. Compares again. Not equal. Reloads. Forever. It is the most determined infinite loop I have seen this month, and I have seen a few.

This is a peppy_remote client local handler. It has nothing to do with the server, the UDP listener, the config version hash, or any of the hardening work. I have been renovating the plumbing while the leak was in the roof.

I have reproduced it on my side with the same config shape. Fix incoming.

In the meantime - switching to “Use server theme” in the wizard will avoid the loop, as you already discovered. Kiosk random mode is what triggers it.

And for future reference - the config.json was the first thing I needed. If I had seen that at the start, we would have found this in five minutes instead of five days. When filing bugs, always include it. It is the single most informative file in the entire setup.

Kind Regards,

Yes, Peppymeter 3.3.2 (Experimental),
Remote (Experimental), VOLUMIO 4.103 (stable).

Hey @Lee.Yan,

Fixed and pushed to experimental. The kiosk random reload logic now recognises that “random” is an instruction, not a meter name to compare against. When the folder has not changed and the config says random, the client picks a meter and stays there until the next random interval. As it should.

From bug report to fix in under five minutes. @Wheaten, your “you have 20 minutes” estimates are starting to look generous.

Please reinstall the remote client from experimental:

irm https://raw.githubusercontent.com/foonerd/peppy_remote/experimental/install.ps1 -OutFile install.ps1
.\install.ps1 -Both experimental

Test with your local kiosk mode random config and let me know if the loop is gone.

Kind Regards,

Hey @Gelo5,

This is next to the last out of 1.9k tracks in the playlist and no smudging from dirty pixels overnight.

When {date,time} have you updated stack from experimental?

Kind Regards,

Hit the mark! It’s back to normal. I only updated a file you patched 30 minutes ago.

lightning speed!
Thanks

1 Like

27.03.2026 - 5 minutes ago
JOKER!
Now it works great! TY @nerd
Edit: 41 minutes ago

1 Like