Skip to content
AIwolfiePublic

About

๐ŸŽต A lightweight Python terminal media player with library management, streaming, and a clean TUI.

Resources

Code of conduct

Contributing

Stars

9 stars

Watchers

1 watching

Forks

Latest commit

ย 

History

120 Commits

Folders and files

Repository files navigation


๐Ÿ•ฏ๏ธ ย E m b e r

The cozy floating desktop music companion that refuses to get in your way.

Slim as a ribbon ย ยทย  Warm as lamplight ย ยทย  Endlessly yours

Download Standalone EXE Download Android APK GitHub Release Platforms MIT License Cozy Vibe

๐Ÿš€ Pre-built binaries ready for instant download:

  • ๐ŸชŸ Windows Desktop: Download standalone Ember.exe โ€” double-click and play, no Python or setup required.
  • ๐Ÿ“ฑ Android Mobile: Download Ember.apk โ€” install directly on your smartphone for on-the-go music streaming.

Compact Desk Ribbon

Ember ribbon
Tucks neatly above your code, terminal, or browser without stealing focus

Expanded Studio Panel

Ember expanded player
Full queue management, live lyrics, vinyl mechanics & theme selection



โ˜• ย  The Essence

Most music applications demand half your screen, nag you with notifications, and swallow hundreds of megabytes of RAM.

Ember is built on an entirely different philosophy: quiet presence.

  • ๐ŸŒ™ Floats seamlessly over your code editor, document, or game window.
  • ๐Ÿ•ฏ๏ธ Warm organic palette designed specifically for late-night creative flow and tired eyes.
  • โšก Zero-latency playback that streams directly from the cloud without storing gigabytes of bloat.
  • ๐ŸŽง Never steals keyboard focus โ€” control everything with gentle global hotkeys or native Windows media keys.



โœจ ย  The Experience

ย ย ย ย ย ย  Feature ย ย ย ย ย ย  The Vibe & Craft
๐Ÿ“ฆ Standalone Windows Binary Single portable Ember.exe with zero installation or Python prerequisites. Clean windowed launch with no console flicker.
๐Ÿ“ Dedicated Playlists Tab Create, view, queue, and manage custom playlists. Remove individual tracks or delete playlists with cascade cleanup.
๐Ÿ”— Universal Link Importer Paste YouTube or Spotify playlist links directly. Playback starts immediately with an optional one-click [Save Playlist] prompt.
๐Ÿ’พ 1-Click Offline Exporter Save streaming tracks to your local library (.m4a / .flac) complete with high-res artwork and embedded ID3/MP4 metadata.
๐Ÿ“Š Dynamic Waveform Visualizer Interactive audio seekbar rendered with animated amplitude bars tuned to playback progression.
๐ŸŒ™ Smart Sleep Timer Drift off with 15m, 30m, 45m, or 60m timers featuring a cosine-eased gentle volume fade-out to zero before pausing.
๐ŸŽง Audio Device Switcher Hot-swap playback between Headphones, USB DAC, Bluetooth earbuds, and Speakers directly from preferences.
โšก Persistent LRU Cache Local byte-stream cache (500MB cap) eliminating repeat network calls and enabling instant replay.
๐ŸชŸ Native Windows SMTC Full Windows 10/11 lock screen controls, system volume overlays, and physical hardware media keys.
๐ŸŽฎ Discord RPC & Scrobbling Real-time Discord Rich Presence with elapsed timers plus ListenBrainz / Last.fm scrobble engine.
๐Ÿ” Search & Paste Instant search across YouTube Music guest API with 350ms debouncing and link detection.
๐ŸŽค Live Lyrics Tab Sing along with synchronized and plain lyrics quietly fetched from LRCLIB.
๐Ÿ”€ Smart Shuffle & Repeat Non-destructive upcoming queue shuffle plus 3-way cycleable repeat modes (off โž” all โž” one).
โšก Variable Speed Dial playback rate smoothly between 0.75x, 1.0x, 1.25x, and 1.5x with native pitch preservation.
๐ŸชŸ Desktop Glass Opacity Dial window translucency between 60% and 100% to let your desktop wallpaper bleed gently through.
๐ŸŽ›๏ธ Hand-Crafted Instruments Rotating vinyl disc with specular sheen, spring-damper equalizer bars, and circular volume dial.
๐ŸŽจ Dynamic Palette Switcher Swap instantly between five hand-curated themes (Amber, Emerald, Amethyst, Solar, Rose).
โŒจ๏ธ Universal Hotkeys Global key chords for every common action, fully customizable with conflict detection.



๐ŸŽจ ย  Handcrafted Theme Palettes

Ember ships with 5 unified color stories inspired by natural stones and ambient warmth:

  ๐Ÿ•ฏ๏ธ Amber     โ”‚ Deep espresso base, roasted coffee, and luminous golden amber light
  ๐ŸŒฟ Emerald   โ”‚ Forest moss, midnight pine, and radiant emerald glow
  ๐Ÿ”ฎ Amethyst  โ”‚ Velvet twilight, dark slate, and deep mystical violet luminescence
  โ˜€๏ธ Solar     โ”‚ Sun-baked terracotta, warm earth, and bright solar radiance
  ๐ŸŒธ Rose      โ”‚ Smoky plum, evening rouge, and delicate soft blush accents

Every widget, vinyl reflection, text label, and progress slider re-skins instantly at runtime without restarting the application.




๐Ÿš€ ย  Quickstart

๐ŸŒŸ Option 1: Pre-built Releases (Recommended for Users)

Zero setup required โ€” grab the binary for your platform and enjoy:

  • ๐ŸชŸ Windows Desktop: Download Ember.exe (or Ember-v1.0.0-windows-x64.zip) from GitHub Releases. Double-click to run silently on your desktop.
  • ๐Ÿ“ฑ Android Mobile: Download Ember.apk from GitHub Releases. Tap to install on your Android device (Android 5.0+).

๐Ÿ› ๏ธ Option 2: Run Desktop from Source (Python)

# 1. Clone the repository
git clone https://github.com/AIwolfie/Ember.git
cd Ember

# 2. Automated setup
install.bat

# 3. Launch
launch.bat

(Prefer live diagnostic console logs while developing? Run launch_debug.bat instead.)


๐Ÿ“ฑ Option 3: Run Mobile from Source (Flutter)

# 1. Navigate to the flutter project
cd ember_flutter

# 2. Fetch dependencies
flutter pub get

# 3. Launch on connected Android device or emulator
flutter run

๐Ÿ“ฆ Option 4: Build Your Own Standalone .exe (Windows)

Want to compile the desktop .exe yourself? A 1-click build script is included:

build_exe.bat

This automatically compiles ember.spec using PyInstaller and outputs the portable binary to dist/Ember.exe.


๐Ÿ“ฑ Option 5: Build Your Own Android APK (Mobile)

To package your own release APK:

cd ember_flutter
flutter pub get
flutter build apk --release

The optimized release APK will be generated at build/app/outputs/flutter-apk/app-release.apk. For per-ABI split APKs (~25MB each):

flutter build apk --split-per-abi



โŒจ๏ธ ย  Default Hotkeys Cheatsheet

Control your soundtrack from inside any application, IDE, or full-screen game:

Shortcut Action Scope
Ctrl + Alt + Space Play ย /ย  Pause Global
Ctrl + Alt + โ†’ Next Track Global
Ctrl + Alt + โ† Previous Track (or restart current) Global
Ctrl + Alt + E Toggle Expanded Panel Global
Ctrl + Alt + โ†‘ Expand Ribbon to Panel In-App
Ctrl + Alt + โ†“ Collapse Panel to Ribbon In-App
Ctrl + Alt + F Jump to & Focus Search Field In-App

๐Ÿ’ก Tip: All key combinations can be freely re-mapped in the โš™ Preferences dialog.




๐Ÿ›๏ธ ย  Architecture & Engineering

Ember/
โ”œโ”€โ”€ ember/
โ”‚   โ”œโ”€โ”€ app.py             โ†’ Application lifecycle, rotating logs, hotkey hooks
โ”‚   โ”œโ”€โ”€ cache.py           โ†’ Persistent LRU audio byte-stream disk cache (500MB cap)
โ”‚   โ”œโ”€โ”€ catalog.py         โ†’ YouTube Music guest API with exponential backoff
โ”‚   โ”œโ”€โ”€ config.py          โ†’ Palette tokens, geometry constants, design tunables
โ”‚   โ”œโ”€โ”€ discord_rpc.py     โ†’ Discord Rich Presence integration
โ”‚   โ”œโ”€โ”€ exporter.py        โ†’ 1-click offline FLAC / M4A exporter & ID3 tagger
โ”‚   โ”œโ”€โ”€ icons.py           โ†’ FontAwesome 6 vector icons with dynamic tinting
โ”‚   โ”œโ”€โ”€ importer.py        โ†’ Universal YouTube & Spotify playlist importer
โ”‚   โ”œโ”€โ”€ jobs.py            โ†’ Asynchronous QRunnable workers with isolated thread pools
โ”‚   โ”œโ”€โ”€ lyrics.py          โ†’ LRCLIB lyrics resolution & timestamp parser
โ”‚   โ”œโ”€โ”€ models.py          โ†’ Song dataclass & serialization contracts
โ”‚   โ”œโ”€โ”€ panel.py           โ†’ Floating surface, ribbon, tabs, playlists & waveform
โ”‚   โ”œโ”€โ”€ player.py          โ†’ PlaybackCore, queue manager & auto-recovery engine
โ”‚   โ”œโ”€โ”€ scrobbler.py       โ†’ ListenBrainz & Last.fm scrobble engine
โ”‚   โ”œโ”€โ”€ settings_dialog.py โ†’ Preferences modal, hotkey binder & device switcher
โ”‚   โ”œโ”€โ”€ smtc.py            โ†’ Native Windows System Media Transport Controls
โ”‚   โ”œโ”€โ”€ storage.py         โ†’ SQLite engine for playlists, favorites & history
โ”‚   โ”œโ”€โ”€ stream.py          โ†’ Direct audio stream extraction with yt-dlp
โ”‚   โ”œโ”€โ”€ theme.py           โ†’ Dynamic Qt stylesheets compiled with string.Template
โ”‚   โ”œโ”€โ”€ toast.py           โ†’ Non-intrusive floating desktop notification toast
โ”‚   โ”œโ”€โ”€ tray.py            โ†’ System tray icon & single-instance lock guard
โ”‚   โ””โ”€โ”€ utils.py           โ†’ Formatters, clock helpers, and text elision
โ”œโ”€โ”€ tests/                 โ†’ Automated pytest suite (89 tests passing)
โ”œโ”€โ”€ build_exe.bat          โ†’ 1-click standalone Windows .exe compiler
โ”œโ”€โ”€ ember.ico              โ†’ Official multi-resolution Ember application icon
โ”œโ”€โ”€ ember.spec             โ†’ PyInstaller standalone release specification
โ”œโ”€โ”€ install.bat            โ†’ Automated Windows environment installer
โ”œโ”€โ”€ launch.bat             โ†’ Clean silent application launcher
โ”œโ”€โ”€ launch_debug.bat       โ†’ Diagnostic console launcher
โ”œโ”€โ”€ requirements.txt       โ†’ Pinned dependency specifications
โ”œโ”€โ”€ CREDITS.md             โ†’ Full project attribution
โ””โ”€โ”€ LICENSE                โ†’ MIT License



๐Ÿ“ฑ App Deployments & OTA Updates

Ember uses a seamless CI/CD pipeline allowing instant Over-The-Air (OTA) patching via Shorebird, meaning users never have to manually reinstall APKs to get your latest dart code!

Whenever you push to the main branch, the pipeline will perfectly choose the deployment strategy based on exactly one thing: the version in ember_flutter/pubspec.yaml.

1. Pushing Silent OTA Patches (No Version Bump) If you make a bug fix or UI change to the Flutter code and want to silently push it to all users immediately:

  • DO NOT change the version in pubspec.yaml! Leave it exactly as is.
  • Commit and push to main.
  • Result: The CI pipeline will automatically run shorebird patch. All users around the world will instantly download this patch in the background and the app will notify them to restart!

2. Publishing a New Base APK Release (Version Bump) If you add complex new native Android packages or major features and need to completely replace the APK:

  • BUMP the version: in pubspec.yaml (e.g., from 1.0.1+2 to 1.0.2+3).
  • Commit and push to main.
  • Result: The CI pipeline will build a brand new Base Release containing the Shorebird SDK, push it as a new GitHub Release tag, and users will see an "Update Available ๐Ÿš€" prompt inside their app asking them to download the new APK!

Contributing & Pull Requests

When you push to any branch other than main (like a PR), the secondary branch_build.yml Action runs. It securely compiles a standard preview APK and commits it to the root folder as Android_APK/Preview_Build.apk, allowing PR reviewers to easily download and test your code without compiling!




๐Ÿงช ย  Verification & Testing

Ember features a comprehensive automated test suite covering models, themes, database integrity, playlists, and resilience:

py -3 -m pytest tests/ -v

(All 89 tests passing across all subsystems.)




๐Ÿค ย  Attribution & Credits

Ember is built with care, craft, and love for music:

  • Mayank Malaviya (@AIwolfie ยท aiwolfie.online) โ€” Original creator, lead architect, and maintainer of Ember. Buy Me a Coffee
  • Muhammad Taezeem Tariq Matta (@taezeem14) โ€” Contributor โ€” development improvements and project upgrades.
  • Kenil Ribadiya (kenilribadiya.in) โ€” Contributor โ€” Mobile App Architect & Android Flutter Implementation.

For full details, see CREDITS.md.




Distributed under the MIT License

Crafted for late nights, cold tea, and warm code. Enjoy the sound. ๐ŸŽต

About

๐ŸŽต A lightweight Python terminal media player with library management, streaming, and a clean TUI.

Resources

Code of conduct

Contributing

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages