Skip to content

Ember v1.1.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 13:45
· 46 commits to main since this release

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%. Run ember install (or make 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 .lrc beside the file, a cache in ~/.cache/ember/lyrics, or LRCLIB, asked only while the
    stage is open; [vibe] lyrics = false keeps it offline. Scroll over the words to move them a quarter second.
  • It's a plugin (plugins/vibe, built in as ember plugin vibe); ember install writes it and grants it media
    and entry.
  • 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, audio and countdown widgets.
  • Pages may be size: "card", sticky, and say when they ends; a dash close says why (reason).
  • media events (the media grant): the song playing, only while the plugin's page is open.
  • [opens] ember = "music" | "idle" in a manifest (the entry grant): a click on Ember in the card opens its page.
  • Ember's hello says the plugin's grants; the Go SDK has Plugin.Granted and the harness Media and DashClosed.