How shikhar0x/ember works
Ember is a desktop media downloader: a user submits a Spotify, YouTube Music, or YouTube link, reviews matches or batch selections, then receives a downloaded and tagged file. The graph separates request/task control, metadata resolution, acquisition and tagging, and the desktop client. README capabilities such as local-file pairing, video output, themes, and history are represented where the tree supports them; route and UI excerpts are partial, so uncertain connections are omitted.
Main entry points: routes.py API routes · +page.svelte Ember interface · resolver.py Candidate search · download_controller.py Download controller
Components 24
Desktop client
- Ember interface
frontend/src/routes/+page.svelte - Media player
frontend/src/lib/MediaPlayer.svelte - Desktop shell
frontend/src-tauri/src/lib.rs
API and tasks
- Local API server
backend/api/server.py - API routes
backend/api/routes.py - Task registry
backend/api/task_registry.py - Download controller
backend/core/download_controller.py
Metadata and matching
- Track models
backend/core/models.py - Spotify session
backend/core/spotify_client.py - Spotify metadata
backend/core/spotify.py - YouTube Music metadata
backend/core/ytmusic_metadata.py - Candidate search
backend/core/resolver.py - Track matching
backend/core/matcher.py - Resolution pipeline
backend/core/pipeline.py
Download and tagging
- Media fetching
backend/core/fetcher.py - Download services
backend/core/services - Metadata tagging
backend/core/tagger.py - Track enrichment
backend/core/enrich.py - FFmpeg manager
backend/core/ffmpeg_manager.py
Other components
- User
- YouTube services
- Spotify service
- Local files
- Downloaded files
Connections 26
- User → Ember interface: submits link
- Ember interface → Local API server: HTTP requests
- Local API server → API routes: mounts routes
- API routes → Task registry: creates and queries tasks
- API routes → Download controller: submits work
- Download controller → Download services: dispatches downloads
- API routes → Resolution pipeline: resolves matches
- Resolution pipeline → Candidate search: fetches candidates
- Resolution pipeline → Track matching: ranks candidates
- Candidate search → Spotify metadata: queries metadata
- Candidate search → YouTube Music metadata: searches sources
- Spotify metadata → Spotify session: requests session data
- Spotify session → Spotify service: authenticates
- Candidate search → YouTube services: searches videos
- API routes → Track enrichment: enriches tracks
- Download services → Media fetching: fetches media
- Download services → Metadata tagging: embeds metadata
- Media fetching → YouTube services: downloads media
- Metadata tagging → Downloaded files: writes tagged files
- Download controller → FFmpeg manager: prewarms conversion
- Ember interface → Media player: controls playback
- Desktop shell → Local API server: starts sidecar
- User → Local files: drops local audio
- Ember interface → Local files: inspects and pairs
- Track enrichment → Spotify metadata: looks up track metadata
- Track enrichment → Metadata tagging: supplies metadata