Genbox

← all tools · video

🎵 Music Video Generator

Make your own music video in seconds - just upload your song, pick a look and download the video

About this tool

Create your own music video online, in seconds. Just upload a song, pick a style and download an MP4 with the sound baked in - no editing, no signup, no watermark. Your track becomes a beat-synced photo slideshow, classic EQ spectrum bars (optionally behind an album cover), Matrix digital rain with your lyrics, a neon tunnel or a starfield. Every cut lands on the beat. Vertical formats are ready for TikTok, Reels and YouTube Shorts, with widescreen for YouTube and X. Fine-tune colours, motion and length if you want, or keep the defaults. Everything is rendered on the server from your audio.

Upload the track (MP3 or WAV). The clip can render the whole song.

⬆ Drag & drop a file here
MP3 or WAV.

API

POST /api/tools/music-video-generator/run (multipart/form-data) → JSON with outputs[].url, a zip link and a config_url.

Every run also hands you the config JSON (button above). It is the request body - POST it straight back to replay the exact generation:

curl -X POST -H 'Content-Type: application/json' \\
  --data @genbox-config-music-video-generator.json \\
  /api/tools/music-video-generator/run
For AI agents · API specs

Technical specs

Categoryvideo
Slugmusic-video-generator
Run endpointPOST /api/tools/music-video-generator/run
Content typemultipart/form-data (with file uploads) or application/json
ResponseJSON: job, notes, outputs[].url, zip, config_url
Rate limitAPI: 1 request / minute / IP. Live preview and image renders have their own separate limits, plus a short global cooldown between renders (storm protection). Over a limit you get HTTP 429 + a Retry-After header (local requests are unlimited)
Machine-readable specGET /api/tools/music-video-generator
OpenAPI 3.1 (Swagger)this tool (JSON) · all tools

Request body

Every parameter accepted by the run endpoint, in request-body order. Fields are optional unless marked required. The same schema is published as OpenAPI 3.1. Upload files with multipart/form-data; a JSON body replays a saved config.

ParameterTypeRequiredDefault / allowed valuesDescription
audio file required MP3 or WAV.
visualizer select no slideshow · spectrum · spectrum_cover · matrix · tunnel · space The options below adapt to the style you pick.
preset templates no Ready-made looks - how the photos behave, not just colours. Pick one, then tweak below if you want. Only used when {"visualizer": ["slideshow"]} matches.
photos file (list) no Shown in order, one after another. Use ‹ › to change the sequence. Only used when {"visualizer": ["slideshow"]} matches.
cover file no Optional. A square image (album cover, logo, single photo) sits in the upper part of the frame, on top of the EQ. Without it you get the plain spectrum bars. Only used when {"visualizer": ["spectrum_cover"]} matches.
lyrics textarea no Matrix: lines drop into random streams. Slideshow: lines appear as captions over the photos. Only used when {"visualizer": ["matrix", "slideshow"]} matches.
color_mode select no spectrum · fire · ice · solid Only used when {"visualizer": ["spectrum", "spectrum_cover"]} matches.
bars range no 72 Only used when {"visualizer": ["spectrum", "spectrum_cover"]} matches.
reflection range no 45 Only used when {"visualizer": ["spectrum", "spectrum_cover"]} matches.
glow range no 50 Only used when {"visualizer": ["spectrum", "spectrum_cover"]} matches.
color color no #22d3ee Only used when {"visualizer": ["spectrum", "spectrum_cover", "tunnel", "space"]} matches.
spectrum_height range no 42 How much of the frame height the spectrum bars occupy, growing up from the bottom. Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_size range no 52 Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_y range no 32 Vertical centre of the cover. Small values push it towards the top of the frame. Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_zoom range no 0 Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_round range no 0 Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_shadow range no 55 Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_glow range no 50 Accent halo around the cover, pulsing with the music. Only used when {"visualizer": ["spectrum_cover"]} matches.
cover_pulse range no 40 How much the cover breathes with the music. Only used when {"visualizer": ["spectrum_cover"]} matches.
backdrop select no blur · dim · none What fills the frame behind the bars. 'Blurred cover' makes the whole clip feel like one cover. Only used when {"visualizer": ["spectrum_cover"]} matches.
backdrop_blur range no 60 Only used when {"backdrop": ["blur"]} matches.
backdrop_dim range no 50 Only used when {"backdrop": ["blur", "dim"]} matches.
stream_count range no 120 More streams = denser rain, but slower render. Only used when {"visualizer": ["matrix"]} matches.
symbol_size range no 28 Only used when {"visualizer": ["matrix"]} matches.
speed_factor range no 1.0 Only used when {"visualizer": ["matrix"]} matches.
head_color color no #B4FFB4 Only used when {"visualizer": ["matrix"]} matches.
body_color color no #00C800 Only used when {"visualizer": ["matrix"]} matches.
slide_seconds range no 3.5 Only used when {"visualizer": ["slideshow"]} matches.
transition range no 0.8 How long the change between two photos takes. Only used when {"visualizer": ["slideshow"]} matches.
transition_type select no fade · slide · zoom Only used when {"visualizer": ["slideshow"]} matches.
beats_per_slide select no 0 · 1 · 2 · 4 · 8 On by default: photos change exactly on the beat (accent every 4th beat in 4/4). Set to Off for fixed seconds per photo. Only used when {"visualizer": ["slideshow"]} matches.
fit select no cover · contain Use 'Show the whole photo' for an ad or a photo with a perfect ratio. Only used when {"visualizer": ["slideshow"]} matches.
zoom range no 18 Only used when {"visualizer": ["slideshow"]} matches.
pan range no 45 Only used when {"visualizer": ["slideshow"]} matches.
beat_pulse range no 60 How much the photos breathe with the music. Only used when {"visualizer": ["slideshow"]} matches.
effect select no none · bubbles · lightleak · wave Movement that works even when the photos stay still. Only used when {"visualizer": ["slideshow"]} matches.
overlay range no 0 Only used when {"visualizer": ["slideshow"]} matches.
lyric_size range no 6 Only used when {"visualizer": ["slideshow"]} matches.
lyric_color color no #ffffff Only used when {"visualizer": ["slideshow"]} matches.
lyric_band range no 45 Only used when {"visualizer": ["slideshow"]} matches.
background_color color no #05070d
resolution select no 720x1280 · 1080x1920 · 1080x1080 · 1280x720 · 1920x1080 · 854x480 · 640x360 Phone formats: pick HD Vertical for TikTok, Reels and Shorts.
fps select no 24 · 30
length select no full · custom Default renders the whole track. Longer clips take longer; heavy styles are slow.
seconds range no 30 Only used when Length = Custom. Only used when {"length": ["custom"]} matches.
quality select no fast · balanced · high
params_json textarea no Extra style parameters merged last.

Call it from an agent

  • GET /api/tools/music-video-generator - machine-readable spec of this tool (inputs, category, API block).
  • GET /api/tools - list of every tool plus the categories.
  • POST /api/tools/music-video-generator/run - run it. Accepts multipart/form-data (with files) or a raw application/json body. Returns JSON with outputs[].url, zip and config_url.
  • The config_url JSON is the request body - POST it back to replay the same generation.
# agent example
curl -s https://genbox.eu/api/tools/music-video-generator/run \\
  -H 'Content-Type: application/json' \\
  --data @genbox-config-music-video-generator.json

Rate limits

  • Max 1 request per minute per IP on the run endpoint.
  • Over the limit you get HTTP 429 with retry_after (seconds) - wait that long and retry.
  • Higher limits and API keys are coming soon: an API key will lift the per-IP throttle. Not available yet.