Everything here is private to you. Your look is stored with your encrypted private settings and follows you between your devices. Photos and videos are encrypted on your device before upload, so the server only keeps an unreadable blob. Share codes contain only colors and numbers, never code.
Most options live in Settings (the gear icon in the app). The two pages that matter here are Settings → Appearance and Settings → Chat backgrounds. Want to skip the reading? Jump to the gallery, copy a code, and paste it in the app.
01Themes
A theme colors the whole app: panels, text, buttons, and message bubbles.
Pick a preset
- Open Settings → Appearance.
- Under Theme, tap a swatch: Dark, Light, Violet, Ocean, AMOLED, Forest or Rose. The preview at the top updates at once.
- Fine-tune if you like: Accent color, Message colors (sent and received), Bubble style (Rounded, Tail, Flat, Outline), Corner roundness, Text size and font, and Density. These overrides survive switching presets.
Follow the system, or a schedule
- In Settings → Appearance, find Theme mode.
- Manual keeps the theme you picked. Follow system switches with your device's light/dark setting. Schedule goes dark between two times.
- For the last two, choose a Light theme and a Dark theme. With Schedule, set Dark from and to. A range like 20:00 to 07:00 crosses midnight, and equal times mean "never dark".
Build your own from six colors
- In Settings → Appearance → Custom themes tap New custom theme (up to 10).
- Give it a name (24 characters at most) and pick six colors: Chat background, Panels, Text, Accent, Sent bubble, Received bubble.
- Ember derives every other shade. A dark or light base is chosen from the brightness of the chat background, and if your text color would be hard to read on it, Ember swaps in a safe one.
- Tap Save and use. Reopen it later with edit under its swatch.
Share and import with ember-theme: codes
A theme code is the text ember-theme: followed by your six colors and name, packed as base64url. It is about 250 characters.
- Copy: open your custom theme and tap Copy theme code.
- Paste: on the other device, open Settings → Appearance → Custom themes, paste into the box ("Paste a theme code (ember-theme:…) here") and tap Import theme. It is added to your list and switched on.
Codes are checked on import: anything that is not strict #rrggbb colors, or longer than 2048 characters, is rejected with a message. Try the ready-made ones in the gallery.
02Chat backgrounds
Open Settings → Chat backgrounds. Under Chat background, switch between Color, Photo or video and Animated. An animation covers a photo, and a photo covers a color, so only one is active at a time.
A plain color
- Choose Color.
- Tap the swatch next to Background color. Tap default to go back to the theme's own.
A photo, GIF, WebP or short video
- Choose Photo or video and tap Upload photo or video.
- Pick a JPEG, PNG, GIF or WebP (animated ones move), or an MP4 or WebM video.
- To replace it, tap Change photo or video. To drop it, tap remove.
| Limit | Value |
|---|---|
| File size | 10 MB at most |
| Video length | 30 seconds at most |
| Video size | 1920 px at most on the long side |
| Formats | JPEG, PNG, GIF, WebP, MP4, WebM |
Privacy: large photos are shrunk and then encrypted on your device. Only ciphertext is uploaded, so the server stores an unreadable blob and cannot see what your wallpaper is.
Tip: Match accent to wallpaper, then Use this accent, picks an accent color from your wallpaper.
03Animated background generator
- Open Settings → Chat backgrounds and choose Animated.
- Tap one of the eight ready-made tiles. Hover (or focus) a tile to see it move.
- Change Type, the Colors (the + and - buttons add or remove colors, from 2 to 5) and the sliders below.
- Tap Copy code to share it, or Paste code to apply one. Remove animation clears it.
The types
| Type | What you get |
|---|---|
| Embers | Glowing sparks drifting up from a warm glow. The last color is the backdrop, the others are the sparks. |
| Aurora | Soft waving ribbons of light. The last color is the sky, the others are the ribbons. |
| Gradient | A smooth blend of all your colors that slowly sways, with a soft highlight drifting across. |
| Stars | Twinkling stars that slowly drift. The last color is the night sky. With three or more colors the second one tints the horizon. |
| Bubbles | Translucent rings floating up. The last color is the water, and with three or more colors the second one lightens it near the surface. |
| Keyframes | You define the colors over time. See advanced keyframes. |
The sliders
| Setting | Range | Effect |
|---|---|---|
| Speed | 0.2x to 3x | How fast everything moves. |
| Density | 10% to 100% | How many sparks, stars or bubbles. For Aurora, how tall the waves are. |
| Intensity | 10% to 100% | Brightness and opacity of the lights. |
| Angle | 0 to 360 degrees | Direction. 0 is up, 90 is right, clockwise. Embers and bubbles rise at 0, stars drift at 90, gradients lean along it. |
04Advanced: keyframes and codes
A keyframes background animates two gradient colors and an angle through a loop that you describe. In Settings → Chat backgrounds → Animated tap Advanced, then Convert to keyframes. Now you get:
- Loop length: 2 to 120 seconds. After the last frame the colors glide back to the first, so the loop is seamless.
- 2 to 8 frames. Each has a position in the loop (0 to 100%), color A and color B, and an angle. Add frame and remove change the list.
- Speed still scales the whole loop.
An example spec
A background is just data. This is "Slow tide" from the gallery:
{
"v": 1,
"kind": "keyframes",
"colors": ["#0ea5e9", "#1e1b4b"],
"speed": 1,
"density": 0.5,
"intensity": 0.8,
"angle": 180,
"keyframes": [
{ "at": 0, "colors": ["#0c4a6e", "#020617"], "angle": 180 },
{ "at": 0.5, "colors": ["#1e3a8a", "#0f172a"], "angle": 200 },
{ "at": 0.8, "colors": ["#155e75", "#082f49"], "angle": 160 }
],
"duration": 20
}
How the ember-bg: code is made
The code is the prefix ember-bg: plus base64url(JSON): the spec above as compact UTF-8 JSON, encoded as base64 with - and _ instead of + and /, and no = padding. In a browser console:
const spec = { v: 1, kind: "gradient", colors: ["#f97316", "#4c1d95"], speed: 0.6, density: 0.5, intensity: 0.8, angle: 160 };
const bytes = new TextEncoder().encode(JSON.stringify(spec));
const b64 = btoa(String.fromCharCode(...bytes)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
console.log("ember-bg:" + b64);
Paste a code into Paste code (or the box labelled "Paste a code") to apply it. Codes are validated, never executed:
- Must start with
ember-bg:and be at most 2048 characters. kindis one of embers, aurora, gradient, stars, bubbles, keyframes.vis 1.- 2 to 5
colors, each strict#rrggbb. Keyframes need 2 to 8 frames with exactly two colors each, anddurationis 2 to 120. - Unknown keys are dropped, and numbers outside their range (see the sliders above) are clamped. Missing numbers get defaults.
05Per-chat look, nicknames, folders and pins
In the chat list, right-click a chat (on a phone, long-press it). The menu offers Pin to top (or Unpin), Add to folder…, Set nickname (direct chats) and Customize chat.
Customize chat
- Choose Customize chat. The dialog is titled "Customize chat" with the chat's name.
- Set an Accent color, a Theme (default Same as app, or any preset or custom theme), a Background color, a Wallpaper (Upload photo or video), or an Animated background (Choose animation, the same generator as above).
- The preview at the bottom shows the result. Reset this chat returns it to your app-wide look.
A chat's own look always beats the app-wide one. Only you see it, and it is stored encrypted with your private settings. A photo wallpaper is kept under an anonymous hash of the conversation, so the server does not learn which chat it belongs to.
Nicknames
Choose Set nickname to rename a contact just for you, and optionally give their name a color. Nobody else sees it.
Folders
- Above the chat list, next to All, Direct and Groups, tap the + chip (Manage folders) and enter a New folder name.
- Put a chat in a folder with Add to folder… in its menu. The folder appears as a tab next to the others.
Pins
Pin to top keeps a chat above the rest, in the order you pinned them. You can pin up to 10.
06Profile tab and status
Open the Profile tab: in the left column's tabs (Chats, Friends, Profile) on a wide screen, or the bottom bar on a phone.
- The big card at the top is how others see you, and it updates live as you edit.
- Under Status, tap a chip for a quick one: At work, Do not disturb, Focus, Working from home, On vacation. It lasts until the end of the day. Clear removes it.
- Under Edit profile set a Display name (32 characters), a Bio (160), a Profile colour, and your own status emoji and text (60). Choose Clear status after: 1 hour, 4 hours, Today or Never, then Save profile.
- Your ID has Copy and Share so friends can add you. Customize appearance → at the bottom opens Settings → Appearance.
07Performance and battery
- Animations setting: Settings → Appearance → Layout and behavior → Animations offers System (respects your device's reduce-motion setting), Reduced and Full. With reduced motion an animated background becomes one still picture and videos do not autoplay.
- It stops when you can't see it. Animations pause while the app is in a background tab or the background is off screen, and run at 30 frames per second at most on a capped-resolution canvas.
- Lighter looks: lower Density and Speed, or choose Gradient or Keyframes, which draw almost nothing. A dark theme such as AMOLED saves power on OLED screens.
- This page follows the same rule: the gallery previews only move while on screen, and stay still if your device asks for reduced motion.
08Gallery
Tap Copy code, open the app, and paste. Theme codes go in Settings → Appearance → Custom themes. Background codes go in Settings → Chat backgrounds → Animated → Paste code.