Generate shareable album images from Apple Music and Spotify links.
Svelte Fork: This is a SvelteKit port of the original Vue 3 project. You can find the original Vue version here.
Music Shot is a SvelteKit application that parses an album URL, renders a phone-style album view, and exports the result as a high-resolution PNG.
Music Shot is intended for quickly turning album links into reusable visual assets for sharing.
- Supports Apple Music and Spotify album links
- Extracts album title, artist, release date, cover art, genre, and track list
- Renders the result in a phone-style player layout
- Supports background blur, accent color, frame theme, title alignment, and export ratio adjustments
- Supports an optional signature with avatar and handle
- Exports PNG images locally in the browser
- Includes English and Chinese UI
- Provides separate desktop and mobile control panels
Input Page
Result Page
| Happier Than Ever | Hurry Up Tomorrow |
|---|---|
![]() |
![]() |
| The Life of a Showgirl | DeBI TiRAR MaS FOToS |
![]() |
![]() |
- Paste an Apple Music or Spotify album URL.
- Fetch album metadata.
- Adjust the presentation in the control panel.
- Export the result as a PNG.
Music Shot normalizes data from Apple Music and Spotify into a single internal album model.
Available adjustments include:
- background blur
- export ratio (
3:4and9:16) - dark or light frame theme
- title alignment
- accent color override
- signature visibility, avatar, and handle
The application captures the rendered phone frame in the browser, composites it onto a blurred cover background, and downloads the final image as a PNG.
- SvelteKit
- Vite
- TypeScript
- Tailwind CSS
@zumer/snapdom
- Spotify data is parsed from the Spotify embed page payload.
- Apple Music data is parsed from JSON schema embedded in the album page.
- Browser requests are routed through a proxy because direct access to upstream pages is blocked by CORS.
- Export rendering is performed client-side.
- Locale, signature, avatar, blur, theme, and ratio preferences are persisted in
localStorage.
- Node.js
^20.19.0 || >=22.12.0
Install dependencies:
npm installStart the development server:
npm run devBuild for production:
npm run buildPreview the production build:
npm run previewRun linting:
npm run lintFormat source files:
npm run formatsrc/
lib/
components/ Input screen, result screen, desktop/mobile control panels
stores/ UI settings and state management (Svelte runes)
utils/ Parsing flow, export pipeline
services/ Cross-platform music link parsing and normalization
assets/ Static assets used in the UI
routes/ SvelteKit page routes (+page.svelte, +layout.svelte)
- Only album links are supported.
- The parser depends on upstream page structures remaining stable.
- The current implementation uses
https://music-shot-proxy.0v0.one/as a public proxy for HTML fetching. - For production use, replacing the public proxy with your own backend or Cloudflare Worker is recommended.
- Playlist support
- Single-track support
- Additional export presets
- Background style presets
- More resilient parser fallback logic
- Automated tests for parsing and export behavior
This project is provided for learning, research, and personal non-commercial use.
Album artwork, music metadata, platform names, logos, and related intellectual property belong to their respective rights holders. Users are responsible for ensuring that their use complies with applicable copyright, trademark, platform, and local legal requirements.
If you plan to use this project in production or for commercial purposes, replace any third-party proxy or unofficial data-fetching approach with an authorized and compliant solution.
MIT





