edited the readme

This commit is contained in:
2026-08-07 13:52:54 +02:00
parent faa3a7257f
commit f8adc2594f
+58 -50
View File
@@ -1,45 +1,49 @@
# BenthicBloom # BenthicBloom
A GNOME Shell 50 extension that automatically rotates your wallpaper, A GNOME Shell 50 extension that rotates your wallpaper, supports looping
supports looping video (live) wallpapers, and includes built-in video (live) wallpapers, and protects OLED displays from burn-in.
protection against OLED burn-in.
## Features ## Features
- **Auto rotation** — pick one or more folders and BenthicBloom cycles - **Auto rotation**: pick one or more folders and BenthicBloom cycles
through the images inside them on a timer, in sequential or shuffled through the images inside them on a timer, sequential or shuffled, with
order, with an optional crossfade between changes. The chosen wallpaper an optional crossfade. Can also apply to the lock screen.
can also be applied to the lock screen. - **Live wallpapers**: play a looping video or animated GIF as your
- **Live wallpapers** — play a looping video *or animated GIF* as your
desktop background. Frames are decoded with GStreamer and rendered desktop background. Frames are decoded with GStreamer and rendered
directly by GNOME Shell's own Clutter stage (no external, incompatible directly on GNOME Shell's own Clutter stage. Playback can pause on
Clutter build involved). Playback can automatically pause on battery battery power or while a window is fullscreen. Auto rotation suspends
power or while a window is fullscreen. Automatic rotation is while a live wallpaper is on screen and resumes after.
automatically suspended while a live wallpaper is actually on screen - **OLED burn-in protection**, three independent toggles:
(and resumes afterward), since changing the static wallpaper would
otherwise repaint over the video.
- **OLED burn-in protection** — three independent, individually toggled
techniques:
- *Pixel shifting*: nudges the background a few pixels on a slow drift - *Pixel shifting*: nudges the background a few pixels on a slow drift
cycle so the same subpixels aren't lit continuously. cycle so the same subpixels aren't lit continuously.
- *Idle dimming*: fades the background to a configurable lower - *Idle dimming*: fades the background after the system has been idle
brightness after the system has been idle for a while, and restores for a while, restores it when you're back.
it the moment you're back. - *Forced rotation*: guarantees a wallpaper change after a maximum
- *Forced rotation*: guarantees the wallpaper changes after a maximum static duration, even if auto rotation is off.
static duration, even if automatic rotation is otherwise switched
off.
- A top-bar indicator for quick access to rotation, live wallpaper, and - A top-bar indicator for quick access to rotation, live wallpaper, and
OLED protection toggles, plus a "Next Wallpaper" action, and a full OLED protection toggles, a "Next Wallpaper" action, and a full
libadwaita preferences window. libadwaita preferences window.
## Requirements ## Requirements
- GNOME Shell 50. - GNOME Shell 50.
- For live wallpapers: GStreamer with its `good` and `base` plugin sets - For live wallpapers: GStreamer's `base` and `good` plugin sets (the
(e.g. `gstreamer1.0-plugins-good` and `gstreamer1.0-plugins-base`, or `good` set also provides GIF decoding), with GObject-Introspection data.
your distribution's equivalent) — the `good` set is also what provides Without them the live wallpaper toggle stays disabled; everything else
animated GIF decoding. If these aren't installed, the live wallpaper works normally.
toggle stays disabled and BenthicBloom's other features work normally.
```sh
# Arch
sudo pacman -S gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav
# Debian/Ubuntu
sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gir1.2-gst-plugins-base-1.0
# Fedora
sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gobject-introspection
```
Restart GNOME Shell after installing (log out and back in on Wayland).
## Installation ## Installation
@@ -51,9 +55,8 @@ cd benthicbloom
make install make install
``` ```
Then reload GNOME Shell — press <kbd>Alt</kbd>+<kbd>F2</kbd>, type `r`, Reload GNOME Shell (<kbd>Alt</kbd>+<kbd>F2</kbd>, type `r`, <kbd>Enter</kbd>
press <kbd>Enter</kbd> on X11, or log out and back in on Wayland — and on X11; log out and back in on Wayland), then enable the extension:
enable the extension:
```sh ```sh
gnome-extensions enable benthicbloom@quinta0.github.io gnome-extensions enable benthicbloom@quinta0.github.io
@@ -70,21 +73,21 @@ installable via `gnome-extensions install <file>` or the Extensions app.
## Configuration ## Configuration
Open preferences from the panel indicator's "Wallpaper Settings…" entry, Open preferences from the panel indicator's "Wallpaper Settings..." entry,
or run: or run:
```sh ```sh
gnome-extensions prefs benthicbloom@quinta0.github.io gnome-extensions prefs benthicbloom@quinta0.github.io
``` ```
- **General** — panel indicator visibility, lock screen syncing, debug - **General**: panel indicator visibility, lock screen syncing, debug
logging, and the folders scanned for wallpapers. logging, and the folders scanned for wallpapers.
- **Rotation** — enable/disable, interval, shuffle vs. sequential order, - **Rotation**: enable/disable, interval, shuffle vs. sequential order,
and crossfade transition settings. crossfade settings.
- **Live Wallpaper** — enable/disable, video file, source folders to pick - **Live Wallpaper**: enable/disable, video file, source folders, mute,
a video/GIF from, mute, playback speed, and power-saving pause behavior. playback speed, power-saving pause behavior.
- **OLED Protection** — master switch plus independent controls for - **OLED Protection**: master switch plus independent controls for pixel
pixel shifting, idle dimming, and forced periodic rotation. shifting, idle dimming, and forced periodic rotation.
## Architecture ## Architecture
@@ -96,6 +99,7 @@ lib/logger.js Small logging wrapper gated by the debug-logging setti
lib/wallpaperSource.js Async folder scanning for image files lib/wallpaperSource.js Async folder scanning for image files
lib/shuffleBag.js No-immediate-repeat random ordering for shuffle mode lib/shuffleBag.js No-immediate-repeat random ordering for shuffle mode
lib/rotationManager.js Timer-driven wallpaper rotation + crossfade overlay lib/rotationManager.js Timer-driven wallpaper rotation + crossfade overlay
lib/gstreamerAvailability.js Non-blocking GStreamer init/registry check + availability probe
lib/liveWallpaper.js GStreamer video playback rendered onto a Clutter actor lib/liveWallpaper.js GStreamer video playback rendered onto a Clutter actor
lib/oledProtection.js Pixel shifting, idle dimming, forced rotation lib/oledProtection.js Pixel shifting, idle dimming, forced rotation
lib/indicator.js Top-bar quick-access menu lib/indicator.js Top-bar quick-access menu
@@ -105,20 +109,24 @@ schemas/ GSettings schema
## Known limitations ## Known limitations
- The live wallpaper currently renders across the full stage as a single - The live wallpaper renders across the full stage as a single layer, so
layer, so on multi-monitor setups the video spans across all monitors on multi-monitor setups the video spans all monitors as one canvas
as one canvas rather than being tiled per-monitor. instead of being tiled per-monitor.
- Pixel shifting and idle dimming rely on GNOME Shell's private - Pixel shifting and idle dimming rely on GNOME Shell's private
`Main.layoutManager._backgroundGroup` and `Meta.IdleMonitor` APIs, which `Main.layoutManager._backgroundGroup` and `Meta.IdleMonitor` APIs, not
are not part of the stable extension API and could change in future part of the stable extension API, and could change in future shell
shell versions. versions.
- GStreamer's registry scan is skipped (trusting the existing cache)
unless no cache exists yet, to avoid blocking gnome-shell's main thread,
and therefore the whole screen, for several seconds right after login.
A background subprocess refreshes the cache afterward so newly
installed plugins still become visible eventually.
## Testing ## Testing
This was developed and validated (JSON, GSettings schema compilation, This was developed and validated (JSON, GSettings schema compilation, and
and JavaScript syntax) without a live GNOME Shell 50 session available in JavaScript syntax) without a live GNOME Shell 50 session available in the
the development environment. Before relying on it, test in a nested development environment. Before relying on it, test in a nested session:
session:
```sh ```sh
dbus-run-session -- gnome-shell --nested --wayland dbus-run-session -- gnome-shell --nested --wayland
@@ -129,4 +137,4 @@ you hit.
## License ## License
GPL-3.0-or-later — see [LICENSE](LICENSE). GPL-3.0-or-later, see [LICENSE](LICENSE).