Skip to content

Add newwallpaperwhodis#296

Open
upioneer wants to merge 4 commits into
tailscale-dev:mainfrom
upioneer:add-newwallpaperwhodis
Open

Add newwallpaperwhodis#296
upioneer wants to merge 4 commits into
tailscale-dev:mainfrom
upioneer:add-newwallpaperwhodis

Conversation

@upioneer

Copy link
Copy Markdown

NewWallpaperWhoDis: new service integration

Description

This pull request integrates NewWallpaperWhoDis (a lightweight, self-hosted wallpaper management server and dynamic rotation engine) into the ScaleTail suite using Tailscale as a secure sidecar container.

The service has been fully configured and audited to strictly match the repository's contributor guidelines:

  • Refactored internal container naming conventions to use dynamic template standards (app-${SERVICE} and tailscale-${SERVICE}).
  • Added a Next.js HTTP health check via wget checking /favicon.svg on internal port 3000 inside the shared network namespace.
  • Resolved documentation discrepancies, correcting explanations of the app's internal port 3000 and external host port mapping 6767.
  • Registered NewWallpaperWhoDis alphabetically under the Dashboards and Visualization category of the root README.md.

Related Issues

  • None.

Verification

The service integration was rigorously tested using an automated validation suite (validate-service.ps1), passing 20/20 targeted compliance tests:

==================================================
 ScaleTail Service Integration Validator 
==================================================

[ PASS ] Directory Check - Found service directory: services/newwallpaperwhodis
[ PASS ] File Presence: compose.yaml - Found
[ PASS ] File Presence: .env - Found
[ PASS ] File Presence: README.md - Found
[ PASS ] Environment: SERVICE - SERVICE=newwallpaperwhodis
[ PASS ] Environment: IMAGE_URL - IMAGE_URL=ghcr.io/upioneer/newwallpaperwhodis:latest
[ PASS ] Environment: SERVICEPORT - SERVICEPORT=6767
[ PASS ] Compose: Tailscale Container Name - Matches template tailscale-newwallpaperwhodis
[ PASS ] Compose: App Container Name - Matches template app-newwallpaperwhodis
[ PASS ] Compose: Network Mode Sidecar - Routes through tailscale service
[ PASS ] Compose: Depends On Tailscale - Waits for tailscale container
[ PASS ] Compose: Service Naming - App service named 'application' per standards
[ PASS ] Compose: Tailscale Health Check - Configured correctly
[ PASS ] Compose: App Health Check - Next.js wget health check active
[ PASS ] Compose: Internal Proxy Port - Reverse proxy targets port 3000
[ PASS ] Service README: Mentions 3000 - Correctly explains internal network port
[ PASS ] Service README: Mentions 6767 - Correctly explains external LAN exposure
[ PASS ] Service README: Project Links - Links to webpage and upstream git
[ PASS ] Main Registry: Indexed - Service registered in root README.md
[ PASS ] Main Registry: Sorting - Service placed in correct alphabetical position (after Homepage)
==================================================
 INTEGRATION STATUS: SUCCESSFUL AND PR READY!     
==================================================

Live Runtime Verification (Docker in WSL)

The stack was deployed live inside WSL environment using TS_AUTHKEY in the environment configuration, successfully establishing container connectivity and secure tailnet routing:

Image ghcr.io/upioneer/newwallpaperwhodis:latest Pulled 
Network newwallpaperwhodis_default Creating 
Network newwallpaperwhodis_default Created 
Container tailscale-newwallpaperwhodis Creating 
Container tailscale-newwallpaperwhodis Created 
Container app-newwallpaperwhodis Creating 
Container app-newwallpaperwhodis Created 
Container tailscale-newwallpaperwhodis Starting 
Container tailscale-newwallpaperwhodis Started 
Container tailscale-newwallpaperwhodis Waiting 
Container tailscale-newwallpaperwhodis Healthy 
Container app-newwallpaperwhodis Starting 
Container app-newwallpaperwhodis Started 
  • tailscale-newwallpaperwhodis successfully registered on the Tailnet, fetched its Tailnet IP, and transitioned to Healthy.
  • app-newwallpaperwhodis booted automatically after sidecar verification, successfully completing end-to-end integration mapping.

Checklist

  • I have performed a self-review of my code and followed the templates structure.
  • I have added verification that the stack works as expected.
  • I have updated necessary documentation (e.g. frontpage README.md ).
  • I have selected the correct label(s) for this PR.

Additional Context

  • Flat-File Architecture: Users can drops wallpapers directly in a folder on their host machine (mapped to ./wallpapers) and the background crawler automatically ingests them without requiring uploads in the web UI.
  • Port Naming: The Next.js web application listens internally on 3000 (which tailscale reverse-proxies), while LAN exposure (if enabled by uncommenting ports) binds to port 6767.

retries: 3
start_period: 30s
restart: always

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove trailing blank line.


In this setup, the `tailscale-NewWallpaperWhoDis` service runs Tailscale, which manages secure networking for NewWallpaperWhoDis. The `NewWallpaperWhoDis` service utilizes the Tailscale network stack via Docker's `network_mode: service:` configuration. This keeps the app Tailnet-only unless you intentionally expose ports.

## What to document for users

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part is not required. I'd suggest you replace the whole README.md with the following.

NewWallpaperWhoDis with Tailscale Sidecar Configuration

This Docker Compose configuration sets up NewWallpaperWhoDis with a Tailscale sidecar container, enabling secure, private access to your self-hosted wallpaper manager over your Tailnet. With this setup, your NewWallpaperWhoDis instance is not exposed to the public internet and is only accessible from authorized devices connected via Tailscale.

NewWallpaperWhoDis

NewWallpaperWhoDis is a lightweight, self-hosted wallpaper manager designed to turn browsers, tablets, smart TVs, Raspberry Pis, dashboards, and other display endpoints into dynamic smart displays. It uses a simple flat-file workflow, so wallpaper collections can be managed by placing images into directories instead of maintaining a traditional database-heavy media system.

The application scans your wallpaper files, processes useful metadata such as aspect ratio, orientation, and luminosity, and serves wallpapers through configurable rotation profiles. This makes it useful for dashboards, wall-mounted displays, digital signage-style setups, home labs, offices, and any environment where you want centrally managed wallpaper rotation without manually touching each display.

Key Features

  • 🖼️ Self-hosted wallpaper management for displays and browser-based endpoints
  • 📁 Flat-file image library workflow with simple folder-based collection management
  • 🔄 Dynamic wallpaper rotation through customizable profiles
  • 🧭 Central web interface for managing wallpapers and endpoints
  • 📺 Suitable for smart TVs, tablets, dashboards, Raspberry Pis, and kiosk-style screens
  • 🧩 Lightweight deployment without a traditional relational database requirement
  • 🔐 Tailnet-only access when paired with the included Tailscale sidecar

Usage Notes

For display devices such as smart TVs, tablets, or dashboards, open the relevant NewWallpaperWhoDis player URL in a browser. Once the endpoint is connected, wallpaper behavior can be managed centrally from the web interface without needing to reconfigure the device directly.

References

Comment thread .markdownlint.yml
@@ -1,2 +1,3 @@
{ "default": true, "MD013": false, "MD033": false }

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert your modification, please.

Comment thread validate-service.ps1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove.

@crypt0rr

Copy link
Copy Markdown
Collaborator
SCR-20260612-nwds SCR-20260612-nwak

@crypt0rr crypt0rr added the new service request to add a new service label Jun 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new service request to add a new service

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants