Effects & overlays¶
You want an app that does more than sit there in white text - an animated background behind it, rain falling over it, a colour scheme that matches the rest of your dashboard, or a nicer animation when AWTRIX moves from one app to the next.
AWTRIX NG gives you four independent tools for that:
| Tool | What it does | Where it goes | Scope |
|---|---|---|---|
| Background effect | Animates behind text and icons | effect on a payload |
per app |
| Weather overlay | Draws on top of the finished page | overlay on a payload, or PATCH /api/v1/display |
per app, or device-wide |
| Palette | Recolours a palette-driven effect, or an overlay | palette on a payload |
per app |
| Transition | Animates the change between apps | transitionEffect in settings |
device-wide only |
This guide shows you how to reach for each one. The exhaustive name tables live in Visual reference.
Start here: one app, one effect¶
Paste this. It creates a pushed app called demo with an ocean-wave background behind the text:
curl -X PUT http://<awtrix-ip>/api/v1/apps/pushed/demo \
-H 'Content-Type: application/json' \
-d '{"text":"HELLO","effect":"Pacifica"}'
The app joins the rotation immediately. To take it away again:
Everything else on this page is a variation on that one payload.
Every example here sends Content-Type: application/json, which is
mandatory on every write - if your app
fails to change, a missing header is the first thing to check.
Pick an effect¶
19 background effects are built into AWTRIX. A few to start from:
effect |
What it looks like |
|---|---|
Pacifica |
Rolling ocean waves in blue and teal |
Plasma |
A colour swirl across the whole panel, sweeping the full hue wheel |
PlasmaCloud |
The same, softer and slower, in a narrower band of colour |
ColorWaves |
A hue sweep travelling sideways across the panel |
Matrix |
Green trails falling down every column |
TwinklingStars |
Scattered stars twinkling on and off |
The other thirteen - TheaterChase, Fade, MovingLine, BrickBreaker, PingPong, Radar,
Checkerboard, Fireworks, Ripple, Snake, SwirlIn, SwirlOut, LookingEyes - are described
one by one, with which of them honour a palette, in
Visual reference → Background effects.
Names are matched case-insensitively - Pacifica, pacifica and PACIFICA are the same
effect. Omit effect (or send an empty string) and the app has no background.
A name AWTRIX does not know is rejected with 422 validationFailed on the effect field, and
nothing is stored - the app is not created or changed. For an array payload the whole batch is
rejected, so you never end up with half of it applied. The exact spellings come from
GET /api/v1/capabilities.
Tune it¶
Three keys on the same payload shape how an effect looks, and the palette is the app's own - the same one its text and charts can paint from:
effectSpeed- how fast the animation runs.1.0is the effect's own pace.palette- the colours it draws from: a built-in name, a palette file on AWTRIX, or up to 16 colour stops inline. Left out, the effect keeps its own colours.paletteBlend-true, the default, blends between the palette's colours;falsegives 16 hard bands.
Types, ranges and defaults are in Visual reference → Effect settings.
All three at once:
curl -X PUT http://<awtrix-ip>/api/v1/apps/pushed/demo \
-H 'Content-Type: application/json' \
-d '{"text":"HI","effect":"Plasma","effectSpeed":0.4,"palette":"Lava"}'
Slow it down or speed it up¶
effectSpeed multiplies the effect's own pace: 2.0 is twice as fast, 0.5 is half speed. It
means the same thing on every effect and on every overlay; there is no effect where it means
something else.
curl -X PUT http://<awtrix-ip>/api/v1/apps/pushed/demo \
-H 'Content-Type: application/json' \
-d '{"text":"CALM","effect":"PlasmaCloud","effectSpeed":0.25}'
A value outside 0.1 … 10 is silently pulled to the nearest bound rather than rejected with an
error, so an animation can neither freeze nor run away.
Palette-painted text is the exception: it moves on its own paletteSpeed, so effectSpeed does
not affect it.
Recolour an effect with a palette¶
Until you supply a palette, every effect keeps its own built-in colours. A palette hands it a set
of colours to draw from instead.
8 built-in names are accepted, case-insensitively: Cloud, Lava, Ocean, Forest,
Stripe, Party, Heat, Rainbow. Each one's character is described in
Visual reference → Palettes.
Up to 16 entries, each accepting the full colour form:
curl -X PUT http://<awtrix-ip>/api/v1/apps/pushed/demo \
-H 'Content-Type: application/json' \
-d '{"text":"MINE","effect":"Plasma","palette":["#FF0000","#FF8800","#FFFF00","#FFFFFF"]}'
The entries are colour stops, spread across the whole ramp by interpolation, so four stops describe a smooth four-colour gradient. An empty array is rejected.
A name is looked up as /PALETTES/<name>.txt on the AWTRIX filesystem first - one hex colour
per line, one to sixteen lines, read as stops exactly like the inline list. See
Visual reference → Custom palettes.
Because the file is tried first, a file named after a built-in replaces it for as long as
it exists, and deleting the file brings the built-in back - that is what the web UI's
palette editor writes when you change Heat.
A palette that matches neither a file nor a built-in is a 422 validationFailed on the
palette field, not a silent substitution.
paletteBlend needs a palette to do anything¶
paletteBlend interpolates between palette entries, so it changes nothing unless the payload
also supplies a palette. With the default true you get smooth gradients; false gives
16 hard colour bands.
Four effects ignore palettes¶
BrickBreaker, PingPong, Matrix and LookingEyes have fixed colours. Sending a palette with
one of them returns success and changes nothing on screen. GET /api/v1/capabilities →
paletteEffects lists exactly the effects that do honour a palette, so you never have to guess.
Each app keeps its own palette¶
The palette belongs to the app that sent it. If app A and app B both use Plasma and app B sets
palette: "Lava", app A keeps its own colours - two differently-coloured Plasma apps can sit
side by side. Deleting an app that set a palette leaves no residue behind.
Add weather on top¶
An overlay draws over the finished page - it never clears the canvas, so your text and icons
stay readable underneath. 6 overlays exist: rain, snow, drizzle, storm, thunder,
frost. What each one looks like is in
Visual reference → Weather overlays.
Per app:
curl -X PUT http://<awtrix-ip>/api/v1/apps/pushed/weather \
-H 'Content-Type: application/json' \
-d '{"text":"7C","overlay":"snow"}'
Overlay names are matched case-insensitively - rain, Rain and RAIN are all the same overlay.
An unknown name is rejected with 422 validationFailed on the overlay field and the app is not
stored.
Overlays honour the payload's effectSpeed and palette: a supplied palette recolours the
drops, flakes, bolts and frost. Without a palette they keep their stock colours. Heavier weather
falls faster - storm is brisker than drizzle - and the speed scales whichever one applies.
Or over everything at once¶
PATCH /api/v1/display sets a device-wide overlay, which also covers the built-in apps:
curl -X PATCH http://<awtrix-ip>/api/v1/display \
-H 'Content-Type: application/json' \
-d '{"overlay":"rain"}'
Tune it with overlaySettings - speed, palette and blend in one object, because the
device-wide overlay owns its settings rather than borrowing an app's:
# rain at a third of its pace
curl -X PATCH http://<awtrix-ip>/api/v1/display \
-H 'Content-Type: application/json' \
-d '{"overlay":"rain","overlaySettings":{"speed":0.3}}'
The Web UI has the same knob as an Overlay speed slider under Display → Weather overlay.
Clear it with null, which drops the settings along with the overlay:
curl -X PATCH http://<awtrix-ip>/api/v1/display \
-H 'Content-Type: application/json' \
-d '{"overlay":null}'
Read the current value back from GET /api/v1/display. Both fields are documented in
Visual reference → Setting the global overlay.
Which one wins¶
- Pushed apps and notifications: a per-app
overlaybeats the global one. The global overlay applies only when the payload carries nooverlayof its own. - Built-in apps (time, date, temperature, humidity, battery): only the global overlay applies - they have no payload to carry a per-app one.
A per-app overlay runs on that app's own effectSpeed and palette; the device-wide one runs on
overlaySettings, whichever app is on screen.
How it all composes with your text¶
One page is drawn in this order, bottom to top:
- Background effect - or, when there is no effect, the flat
backgroundColor. - Text and decorations (charts, progress bar, draw ops). Decorations draw over the text;
textInFront: truereverses that pair so the text lands on top. The background below is unaffected either way. - Icon, if the app has one.
- Overlay.
Two consequences worth knowing. An effect replaces backgroundColor rather than sitting on top
of it: when effect names a real effect, it paints the whole canvas and your backgroundColor is
never applied. Sending both is not an error - the colour is simply ignored. Drop the effect key if
you want a flat colour behind your text.
And a busy effect like Plasma or PlasmaCloud fills the whole canvas, so text over it can
disappear. Slow the effect down ("effectSpeed":0.3), give it a dark palette ("palette":"Ocean"),
or pick a calmer one. There is no dimming control for backgrounds.
Layering with charts and draw ops is covered in Charts & drawing.
Change how apps swap: transitions¶
A transition animates the change from one app's page to the next. It is a device-wide setting - there is no way to give one app its own transition.
curl -X PATCH http://<awtrix-ip>/api/v1/settings \
-H 'Content-Type: application/json' \
-d '{"transitionEffect":"Pixelate","transitionDurationMs":600}'
transitionEffect picks one of 22 animations and defaults to Rain; transitionDurationMs
sets how long one takes, 1000 ms out of the box. Set autoTransition to false if you would
rather AWTRIX stopped rotating through apps altogether. All three are described in
Settings, and what each animation looks like is
in Visual reference → Transitions.
Random re-picks one of the other twenty-one for every transition - it never picks itself.
Names are matched case-insensitively, and an unknown one is rejected with 422 validationFailed
whose message lists all 22 accepted names.
Ripple and Fade each exist as a background effect and as a transition, with entirely
unrelated behaviour: {"effect":"Ripple"} draws expanding rings behind your text, while
{"transitionEffect":"Ripple"} reveals the next app in a circle. Read the name in the context of
the key that carries it.
Discover the names AWTRIX accepts¶
To get the exact names AWTRIX accepts, ask it directly:
{"effects":["BrickBreaker","Checkerboard","..."],
"paletteEffects":["Checkerboard","ColorWaves","..."],
"transitions":["Random","Slide","..."],
"overlays":["drizzle","frost","..."],
"palettes":["Cloud","Lava","Ocean","Forest","Stripe","Party","Heat","Rainbow"]}
effects and overlays are always exactly what AWTRIX can draw, sorted alphabetically
rather than in any meaningful order.
paletteEffects lists the effects that actually use the app's palette - the scene-style effects
that draw fixed colours (BrickBreaker, PingPong, Matrix, LookingEyes) are absent from it.
Build a palette picker from this list rather than from effects.
These names are spelled the way the API returns them. You may send any casing you like; AWTRIX resolves it case-insensitively.
palettes lists the 8 built-in names - the ones that always resolve. It does not list your palette
files; read those from GET /api/v1/files?dir=/PALETTES. A file may carry a built-in's name and
replaces it while it exists, so a name on this list does not promise the built-in colours.
When nothing happens¶
| Symptom | Likely cause |
|---|---|
422 validationFailed on effect |
The name is not in /api/v1/capabilities → effects. Casing does not matter; spelling does. |
415 unsupportedMediaType |
Missing Content-Type: application/json - curl -d sends a form body. |
| Palette had no visible effect | The effect is not in /api/v1/capabilities → paletteEffects - e.g. BrickBreaker, PingPong, Matrix, LookingEyes. |
422 validationFailed on palette |
Neither a /PALETTES/<name>.txt nor one of the 8 built-in names. |
| A built-in palette shows the wrong colours | A file of that name overrides it. Delete /PALETTES/<name>.txt, or use the web UI's restore button. |
paletteBlend changed nothing |
No palette was sent alongside it. |
422 validationFailed on overlay |
The name is not one of the 6 overlays; check the spelling. |
backgroundColor ignored |
An effect is set - it paints the whole canvas itself. |
Match on the error code and field, never on the wording - the full error body is written out
under Errors.
Related¶
- Visual reference - every effect, overlay, palette and transition, in full.
- App & notification payload - every key you can put next to
effect. - Charts & drawing - bars, lines and draw ops layered over an effect.
- Settings -
transitionEffectand the rest of the device-wide knobs.