Free · MP4

Placeholder videos, from a URL.

Put /video/640x360 in a video tag and get back an MP4 of exactly that size, with your label in the middle, a running timer and a progress bar along the bottom. Colours, label, length and frame rate are query parameters. No key, no account.

imgsrc.pub · placeholder video
Size, 50–1280 px
×
Length
Frame rate
Background
Label

The preview is the real response from that URL, exactly what your page would load.

https://imgsrc.pub/video/640x360?bg=6e6cff&color=ffffff
200 OKvideo/mp4loading…
Use cases

Test the player, not the footage.

A placeholder video is a real H.264 file with a real size and length, so players, layouts and loaders behave exactly as they will with the final footage.

01

Custom players and controls

Check a scrubber, a fullscreen button or a chapter list against a real file. The timer drawn in the middle (0.0s / 5s) and the bar filling along the bottom show at a glance whether play, pause, seek and loop are doing what you expect.

02

Hero and background video

Lay out a muted, looping hero before the brand film is shot. Ask for the exact size of the slot, such as /video/1280x720, and the page gets the right aspect ratio and file type from the first commit.

03

Feeds, grids and lazy loading

Fill a feed with clips at mixed sizes to see how it reserves space, lazy-loads and pauses off-screen. Give each one its own label with ?text=Clip+1 so you can tell them apart in a screen recording.

04

Seed data, stories and demos

Point video_url fields in seed scripts and Storybook stories at placeholder URLs instead of committing binaries to the repo. Each URL says what it contains, so the fixtures stay readable months later.

What you get

One MP4, drawn frame by frame.

Each frame is drawn on the server: the background colour, your label centred in bold, the elapsed time under it and a progress bar that fills along the bottom edge. The frames are then encoded with ffmpeg as H.264 (baseline profile, level 3.0, yuv420p) in an MP4 container, with the index moved to the front of the file so playback can start before the download finishes.

There is no audio track. Browsers still want the muted attribute before they will autoplay, so keep it on the tag. The first request for a new URL waits while the clip is encoded; after that the server returns the stored file, sent with a one-year immutable cache header.

<video autoplay muted loop playsinline
  width="640" height="360"
  src="https://imgsrc.pub/video/640x360?text=Hero+loop">
</video>
Parameters

Everything the URL accepts.

The size goes in the path. Everything else is an optional query parameter, in any order.

ParameterValuesDefaultWhat it does
/video/{w}x{h}50–1280 eachrequiredWidth and height in pixels, in the path. A size outside the range returns a 400 error instead of a video.
bghex, no #eeeeeeBackground colour.
colorhex, no #31343cColour of the label, the timer and the progress bar.
textURL-encoded string{w} x {h}The label in the middle. Its size is a tenth of the shorter side, and never below 20px.
durationseconds5Length of the clip. Longer clips take longer to encode the first time.
fpsframes per second15Frame rate. 15 is plenty for a ticking timer; use 24 or 30 to test smoother playback.
Examples

Four URLs, four videos.

Each player below is playing the URL under it, straight from imgsrc.pub.

/video/640x360?bg=5148E0&color=FFFFFF&text=Hero+loop
16:9 · 5 s
/video/360x640?bg=0B1020&color=F472B6&text=Story
9:16 · 5 s
/video/480x480?bg=FBBF24&color=0B1020&text=Square&duration=3
1:1 · 3 s
/video/1280x720?text=720p&fps=30
720p · 30 fps
FAQ

Placeholder video, answered.

Is the placeholder video API free?+

Yes. There is no account, no API key and no watermark. A URL is encoded once and stored, so asking for the same video again returns the saved file.

How do I make it autoplay and loop?+

Add autoplay, muted, loop and playsinline to the video tag. Browsers only autoplay video that is muted, and iPhones need playsinline to play it inside the page rather than full screen.

What sizes can I ask for?+

Any width and height from 50 to 1280 pixels. Common picks are 1280x720 for 16:9, 720x1280 for vertical video and 640x640 for square. Anything outside the range returns a 400 error with a one-line explanation.

Why does the first request take longer?+

Every frame is drawn and encoded the first time a URL is requested. A five-second clip at 15 fps is 75 frames. Later requests for the same URL skip all of that and return the stored MP4.

Can I use it as a poster image too?+

Use the placeholder image API for that: /640x360.png?text=Loading gives a still of the same size, which you can set as the video's poster attribute.

Can I add sound or change the font?+

No. The clips have no audio track, and the label is drawn in the server's sans-serif font. You can change the colours, the label, the length and the frame rate.

More tools

The rest of the toolbox.

Five more free tools, and three AI tools for when a placeholder won't do.

Your player is waiting.
Give it a video.

Pick a size, copy the URL, paste it into your video tag.

1280 px
Largest side
H.264
MP4
0
API keys