explainroo
explainroo is a free, open source tool that lets your AI agent make explainer videos with a voice. It runs on your own computer and needs no API key.
翻訳待ち
Encore for YouTube Music: a tiny (4 MB) Windows app to listen together. Listen along with friends in sync, Discord status with a Listen along button, mini player.
翻訳待ち
Loading the full README.
Read the full README ↗Independent open-source project, not affiliated with or endorsed by Google, YouTube or Discord. YouTube Music is a trademark of Google LLC. Encore shows the official music.youtube.com website; it doesn't download music or block ads.
Written in Go with Wails v3 on Windows' built-in WebView2 (Edge) runtime: the installer is about 4 MB and the installed app about 13 MB, where Chrome-based apps are about 100 MB.
0–100 volume that remembers its level across launches; scroll over it to change it (Shift: steps of 5).Download the installer from the download page and run it. It installs for your Windows account only (no administrator rights) and replaces earlier "YouTube Music" versions of this app, keeping your settings and sign-in.
The installer isn't code-signed yet (free signing for open-source projects has been requested), so Windows may say "Windows protected your PC": select More info → Run anyway. Releases are built by GitHub Actions from this repository; see the code signing policy and privacy details.
go run .
Needs go-winres (go install github.com/tc-hib/go-winres@latest) and NSIS (winget install NSIS.NSIS).
.\build.ps1 -Version 0.2.0
This runs the tests, then writes dist\Encore.exe, dist\Encore-Setup-0.2.0.exe and dist\latest.yml. The installer is per-user, installs to %LOCALAPPDATA%\Programs\Encore and replaces an earlier install named "YouTube Music" (Go 0.2.x or Electron 0.1.x), whose settings in %USERPROFILE%\.youtube-music carry over. Pushing a v* tag builds and publishes a release from GitHub Actions.
| Path | Contents |
|---|---|
%USERPROFILE%\.youtube-music\settings.json | App settings (shared with the Electron releases) |
%USERPROFILE%\.youtube-music\webview2\ | YouTube sign-in and site data |
%USERPROFILE%\.youtube-music\app.log | Log for troubleshooting (capped at 1 MB; the previous one is kept as app.log.1) |
main.go, windowstate.go | Windows, layout, window position |
messages.go, state.go, playback.go | Page messages, settings state, playback hub, tray and taskbar controls |
presence.go, internal/discord | Discord Rich Presence (local IPC, no secret) |
listenalong.go, internal/listen | Listen along (encrypted relay protocol) |
internal/taskbar | Taskbar thumbnail buttons |
internal/audiosession | Name and remembered volume in the Windows volume mixer |
frontend/player.js | Script injected into music.youtube.com |
frontend/shell.html, frontend/settings.html, frontend/mini.html | Title bar, settings and mini player pages |
site/ | Download page, code signing policy and the listen-along join page, published with GitHub Pages |
The title bar is its own window. The YouTube Music and settings webviews are attached below it as Win32 child windows, so the site's own layout is never modified. Window moving and edge resizing are handled by the title-bar page itself (Wails' own drag/resize script only loads into pages served by its asset server, and these pages are built from strings): it asks the app to start the native move or resize. While the window is not maximised a 6 px frame of that page stays visible around the YouTube view, which is what makes the window resizable from its sides and bottom.
The app stores the player engine level (#movie_player.getVolume(), what you actually hear) and applies it with #movie_player.setVolume, which exists in both of YouTube Music's current player UIs. Before playback starts it seeds YouTube's own PREF cookie (volume=N, on the old slider curve) and reloads once, so the player starts at the saved level from its first frame. If YouTube changes the level on its own it is put back; a change you make in the page (slider, keyboard) is followed and saved. The app never mutes, pauses or plays media and never writes the <video> element's volume.
In the Windows volume mixer the sound appears as Encore. It is played by a WebView2 helper process (msedgewebview2.exe), which Windows would otherwise list as "Microsoft Edge WebView2" and whose volume it remembers per WebView2 install: shared with other WebView2 apps and forgotten when the runtime updates or the helper restarts. internal/audiosession names the app's sessions and keeps the level set for Encore in the mixer (mixerVolume in settings.json), restoring it whenever a new session starts.
go test ./...
This is the beginning of the README. Read the rest at the original. Read the full README ↗