Repository navigation
Ember v1.1.0
Lighter
- The service no longer caps Go's memory at 16 MiB. The runtime needs about half of that for itself, so the garbage
collector ran back to back and Ember's CPU crept from a few percent to a quarter of a core or more the longer it
ran. It now stays around 4%. Runember install(ormake install) to rewrite the unit. - A dance and its face ride their 24 fps instead of asking for 60; the island sends the compositor only the
rectangles that changed (an open card: 13 times fewer pixels a second); a frame no longer allocates for arcs,
shaded fills or the session order.
Ember, more natural
- It dances on the beat: its knees bend into each beat (it used to land about 80 ms late), its weight steps from foot
to foot, the first beat of a bar lands hardest, and its flame tip and headphones trail its head. It picks a sway,
a groove, a head-bob or a bounce from how hard this part of the song goes, and blends between them. - Its face moves like a face: a change of expression happens behind a blink, the eyes jump and hold, blinks land on
beats and new lines, and each phrase of a song gets its own face (lost in it, grooving, beaming, now and then a
wink). - On the stage it sings the words. Ember listens for the singer in the middle of the stereo picture, finds where each
syllable starts, and shapes its mouth for it: lips closing on m, b and p, teeth on f and v, the tongue on l and th,
wide on "ah", round on "oh" and "oo", flowing from one to the next and holding a held note. It reads English,
Hindi in Devanagari and in Latin letters, and has a go at Arabic and Japanese kana. - Words from a browser player whose playhead only counts whole seconds no longer run up to a second late.
- Its idle breath no longer jumps when its mood changes.
Vibe
- Click Ember in the card while a song plays (or the headphones in the music row, or
ember dash vibe) and the card
becomes a stage: Ember dances big on a floor of the cover's light, on its own beat, and sings along with the song's
words, lit as they're sung. Claude's session stays in the top line; a request replaces the stage at once; when
Claude finishes, the stage folds itself at the end of the song; paused two minutes, it closes. - Every case has its look: a break in the words, a very long line, words without times, no words, an instrumental, a
new song, a talk, an ad, paused, Claude done or stopped, the screen shared, calm motion, late at night. - The words come from an
.lrcbeside the file, a cache in~/.cache/ember/lyrics, or LRCLIB, asked only while the
stage is open;[vibe] lyrics = falsekeeps it offline. Scroll over the words to move them a quarter second. - It's a plugin (
plugins/vibe, built in asember plugin vibe);ember installwrites it and grants itmedia
andentry. - Words in scripts that join, reorder or run right to left (Hindi and other Indic scripts, Arabic, Hebrew) are shaped
in their own script's font; right-to-left lines sit right and light up from the right, a mixed line in reading order. - A player whose playhead never moves (some browsers) is noticed after four seconds: its words page by how long the
song has played, and say so, until the playhead moves again.
Plugin protocol (backward compatible)
- Stages: the
stage,timed_text,media,sessions,audioandcountdownwidgets. - Pages may be
size: "card",sticky, and say when theyends; adashclose says why (reason). mediaevents (themediagrant): the song playing, only while the plugin's page is open.[opens] ember = "music" | "idle"in a manifest (theentrygrant): a click on Ember in the card opens its page.- Ember's hello says the plugin's grants; the Go SDK has
Plugin.Grantedand the harnessMediaandDashClosed.