Skip to content

Releases: ghufronakbar/Ririku

Ririku 0.4.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 18:32
e63b767

Ririku becomes a multipurpose notch app. Music controls and synced lyrics stay its core and the default, and the expanded panel gains pages of widgets and tools that you arrange in Setup. Apple silicon only; signed ad hoc and not notarized. After updating, copy the extension again from Setup → Browser connection and reload it in your browser, because its version changed to 0.4.0. An existing layout gets the new Tray tab once.

Added

  • Tabs and widgets (D-018): the expanded panel shows pages of widgets. Home holds the music widget, wide, and the new System widget with processor, memory, and disk use; the System widget reads them only while it is visible (R-WID-4). Processor use needs two readings, which macOS updates about once a second, so the widget shows the last value, dimmed, for about half a second. With several pages, tab icons sit left of the notch.
  • Setup → Layout: a live preview of the expanded panel, and for each page a name, an icon, and its widgets, each small or wide, which can be moved, removed, or moved to another page. Up to eight pages; Reset to Default Layout restores Home and the Tray. The layout is stored as versioned JSON, and entries this version cannot read are skipped.
  • Thirteen local widgets (roadmap stage 4): Clock, Pomodoro, Countdown, Stopwatch, Network, Battery, Notes, Counter, Days Left, Water, Apps, Shortcuts, and Bookmarks, each small or wide. Their settings are on the new Setup → Widgets page. Running timers store their start and schedule only their end, so they keep going while the panel is closed or Ririku quits (R-WID-4).
  • Live timer and notices: while no music plays, a running timer shows its time beside the notch. A finished timer, a failed shortcut, or a connected charger shows a notice below the notch for about three seconds without opening the panel (R-UI-3, R-UI-6, D-021).
  • Tray (roadmap stage 5): drag files onto the notch to open the panel on the new Tray tab and drop them there. The Tray keeps links, never copies, and never moves or deletes a file (R-WID-7); click a file to open it, drag it out, or send it with the AirDrop card. The Tray tab joins the default layout, and a layout saved earlier gets it once (D-025).
  • Clipboard history (off by default, D-020): keeps the last 50 texts and images you copy on this Mac, skips content marked as secret, transient, or generated and copied files (R-WID-6), and puts an entry back on the clipboard when you click it. A Clipboard tab appears while it is on; turning it off deletes the history.
  • Calendar and Camera widgets (roadmap stage 6, D-026): the Calendar widget shows today's events that have not ended, or tomorrow's once today has none left, and opens the Calendar app when clicked. It only reads events (R-WID-8), only while visible, and from the calendars chosen in Setup → Widgets (R-WID-4). The Camera widget is a mirror that turns on only when clicked in the open panel and turns off when the panel closes or the tab changes; the picture is never recorded or saved (R-WID-5). macOS asks for each permission only when the widget is added in Setup → Layout, and a denied permission shows a button to System Settings instead of asking again (R-WID-3). The permission prompts, including the existing Automation prompt, are now translated into Indonesian and Japanese.
  • Translate and lyric translation (roadmap stage 6, D-019, D-027, macOS 15 or later, off by default): the new Translate tab translates typed or pasted text on the Mac with Apple's Translation framework, detecting the source language unless one is chosen. Translate lyrics in Setup → Lyrics shows each synced line's translation under the active line in the expanded panel; the whole song is translated once, kept in memory only, and the lyrics never change (R-LYR-6). Languages are downloaded from Setup → Widgets, where macOS's prompt shows in a normal window; text is never sent to a translation service (R-WID-10).
  • Setup → General (D-022): show a Dock icon (off by default) and hide the menu bar icon (shown by default); choose the display for the panel, or keep Automatic; set the delay before the panel opens (0–1 s, default 0.15 s) and before it closes (0.1–2 s, default 0.35 s); and turn on a haptic tap when the pointer reaches the notch (off by default). With both icons hidden, opening Ririku again opens Setup.
  • Setup → Keyboard: record a shortcut that opens and closes the panel from any app. It is off until recorded, needs Command, Option, or Control, and uses the Carbon hot key API, so no Accessibility permission is requested.
  • Setup → Tutorial with a button to each page it mentions, and Setup → About with the version, the privacy note, and links to the source code, the user guide in the interface language, and the issue tracker.
  • App, Edit, and Window menus: visible with the Dock icon, and they make Copy, Paste, Undo, and Close Window work in Setup.

Changed

  • The panel stays open while a menu opened from it is open, such as Translate's languages or a Control-click menu on the Tray, even when the menu reaches past the panel's edge.
  • The panel always uses the dark appearance, so text fields and controls stay readable on black, and the System widget sits on a card like the other widgets.
  • The expanded panel puts the gear button right of the notch instead of next to the track, and opens on the first page each time. A page whose widgets need more room than Expanded island width opens wider; the default Home opens at about 518 pt instead of 442 pt.
  • Project scope: Ririku is now a multipurpose notch app. Music controls and synced lyrics stay its core and the default, and the panel holds tabs with widgets and tools (decisions D-017 to D-027). docs/rules.md replaces the old scope limits with rules for widgets and tools (R-WID), and docs/roadmap.md lists the stages, all of which ship in this release, and the future plans. The README tagline is now "Music, lyrics, and handy widgets in your Mac's notch" (D-023).
  • Setup has a sidebar with the pages General, Tutorial, Language, Keyboard, Layout, Widgets, Appearance, Browser connection, Music source, Lyrics, Prototype, and About. Startup is now a section of General, and the version and privacy note moved from Prototype to About. Until a browser or a desktop player is set up, Setup opens on Browser connection, otherwise on General. The window can now be resized.
  • Code layout (developers): the app target is split into App/, Panel/, Music/, and Setup/. AppModel keeps the app-wide state and holds a new MusicModel for playback, lyrics, and the browser connection; main.swift is now only the entry point. The notch panel is unchanged: a demo render of the compact and expanded panel matches the previous build in size and pixels, apart from the animated spectrum.

Install

  1. Unzip and move Ririku.app into your Applications folder before opening it.
  2. Ririku is signed ad hoc and is not notarized by Apple, so macOS blocks the first launch. Open System Settings → Privacy & Security and click Open Anyway. On macOS 14, Control-click the app and choose Open instead.
  3. In Setup → Browser connection, follow the four steps to load the browser extension.

Full instructions: https://github.com/ghufronakbar/Ririku/blob/main/docs/user-guide.md#install

  • Requires macOS 14 or later; Translate and lyric translation need macOS 15. This build contains an arm64 (Apple silicon) executable only.
  • After updating, copy the extension again from Setup and reload it on your browser's extensions page.
  • Verify the download with shasum -a 256 -c SHA256SUMS.txt.

Ririku 0.3.1

Choose a tag to compare

@github-actions github-actions released this 18 Sep 17:26

First public release. It also contains the unpublished 0.3.0 changes, including the rename from Notch Box to Ririku. Apple silicon only; signed ad hoc and not notarized.

Fixed

  • The expanded panel closes once the pointer leaves it, even after clicking a control such as pause. Closing now follows the pointer position instead of a hover exit that SwiftUI could miss, and a panel opened from the menu stays open until the pointer has visited it.
  • YouTube Music artwork is keyed to the playing video rather than an unverified player-bar image that can retain the previous album.
  • YouTube Music uses the visible song clock instead of an accumulated media timeline. Seeking maps song-relative positions through the player API and rejects stale track commands.
  • Track metadata changes reset the Setup lyric search, including metadata corrections under the same video ID.
  • LRCLIB retries temporary 502/503/504 responses with bounded backoff, respects Retry-After, and does not cache an outage as missing lyrics.

Added

  • docs/rules.md: binding project rules with citable IDs for contributors and AI agents, collected from the agreed decisions and the planning documents. AGENTS.md makes it required reading.
  • App icon and browser extension icon: an anime-style illustration generated with Gemini through Antigravity, clipped to the macOS icon grid by scripts/make-icon.swift during the build.
  • Opt-in Apple Music connection to the Music app, sharing the Spotify AppleScript adapter: persistent-ID–validated commands, locally read artwork, and the same source selection and LRCLIB lyrics. When LRCLIB has none, plain lyrics saved with the track in the Music app are shown unsynced. Requires macOS Automation permission; live permission/playback validation is still pending. Radio streams without a duration are not supported as songs.
  • Opt-in Spotify desktop connection using local AppleScript polling and track-validated playback commands. Shares source selection, LRCLIB lyrics, artwork, and automatic accent; requires macOS Automation permission. Browser disconnects preserve the Spotify session. Live permission/playback validation is still pending; podcasts, local files, and ads are not supported as songs.
  • Auto — from artwork accent color: a cached dominant-color tint with readable brightness, Neutral fallback, and a transition that respects animation and Reduce Motion settings. Existing manual color preferences are preserved.
  • Synced lyric rows slide upward on adjacent lines; seeks snap and Reduce Motion disables the animation.
  • Offline regression tests for browser clock/seek transitions and lyrics service recovery. Real Chrome playback and animation rendering still need manual verification.
  • Setup → Startup: Open Ririku at login, off by default. It registers the app bundle with SMAppService, so no helper tool or Terminal command is needed, and it stays unavailable while the app runs from a temporary location.
  • Other Chromium browsers: Setup registers the native host for every installed browser it knows (Chrome, Brave, Edge, Vivaldi, Opera, Chromium, Arc) in one click, names them under step 1, and offers each browser's own extensions address. The native host reports which browser launched it, so the panel and step 4 name it. One browser profile is connected at a time, and only Chrome is verified so far.

Changed

  • Long lyric lines are no longer cut off. When a song has a line too long for the island, the current line is given two rows while the previous and next lines stay on one; a line that overflows by a little shrinks slightly instead of wrapping. The measurement happens once per song and island width, so the island keeps a steady height for the whole song instead of resizing line by line.
  • The expanded panel is now exactly as tall as its content. Its height was a fixed 200 pt guess that left 21 pt of empty black space under the transport buttons; it is now the sum of the rows PlayerView draws, which are named once in ExpandedLayout and shared by the view. Spacing and the bottom padding are tighter and the transport buttons are 32 pt, so the panel is about 35 pt shorter (199 pt without lyrics, 285 pt with three lyric lines). A command error also gets a correctly sized row instead of borrowing that slack.
  • The compact island now matches the physical notch. Its width and height are stored as an addition to the measured notch instead of absolute values, so the default fits the notch exactly on any Mac and nothing shows beside the camera housing. Artwork and the spectrum sit on the left and right edges and come out from behind the notch as the island grows, Setup → Appearance gained Compact island height, and Reset size became Reset to the notch size. The notch width is measured instead of assuming at least 180 pt, and the old compactWidth preference is dropped.
  • While playback is paused, the compact island keeps the artwork and the spectrum but drops the lyrics, so it shrinks back to the notch; the expanded panel still shows them.
  • Setup → Chrome connection is now Setup → Browser connection, and interface text that named Chrome now names the browser. The extension is listed as Ririku — Browser Bridge; reload it once from chrome://extensions after updating.

Removed

  • The Indonesian planning archive (docs/archive/id). Its rules that still apply are in docs/rules.md; the history remains in Git.

Install

  1. Unzip and move Ririku.app into your Applications folder before opening it.
  2. Ririku is signed ad hoc and is not notarized by Apple, so macOS blocks the first launch. Open System Settings → Privacy & Security and click Open Anyway. On macOS 14, Control-click the app and choose Open instead.
  3. In Setup → Browser connection, follow the four steps to load the browser extension.

Full instructions: https://github.com/ghufronakbar/Ririku/blob/main/docs/user-guide.md#install

  • Requires macOS 14 or later. This build contains an arm64 (Apple silicon) executable only.
  • After updating, copy the extension again from Setup and reload it on your browser's extensions page.
  • Verify the download with shasum -a 256 -c SHA256SUMS.txt.