Parallax 3D Video Generator

Generate pseudo-3D parallax videos from a single image

Your images stay private — everything runs in your browser

Upload Image

+

Click or drag & drop

JPG / PNG supported

Parameters

Duration (sec)

15

Horizontal shift (px)

40

Vertical sway (px)

15

Sway cycles

4

Zoom level

1.25

Resolution (width px)

512

* Higher resolution may increase processing time on some devices

Zoom center

(50%, 50%)

Click preview to set

Upload an image to start preview

What is actually happening

A single photo carries no record of what was near the camera and what was far away. Working that out is the first thing Parallax 3D does. An AI model looks at the picture and outputs a depth value for every pixel as a shade of grey — the brighter the pixel, the closer it was.

The rest is straightforward. The frame is cut into a fine grid, and each cell is redrawn shifted by its depth multiplied by the camera movement. Near cells move a long way, distant cells barely move at all. Repeat that while sweeping the camera position, and a still photo starts to read as three-dimensional.

It is not building a real 3D model, though. Shifting a foreground subject should reveal the background hiding behind it, and that background was never photographed, so the surrounding pixels get stretched to fill the gap. That is why pushing the movement too far makes edges look like they are melting. When the effect looks wrong, horizontal shift is almost always the culprit.

The sliders mix look with cost

There are six parameters, and they fall into two groups: the ones that change how the motion looks, and the ones that change how long generation takes. Settle the motion on a short, low-resolution render first, then raise the length and resolution at the end.

  • Duration (3–30 sec) — roughly proportional to generation time. Keep it short while you experiment
  • Horizontal shift (5–80px) — the main source of depth, and also the main source of edge artifacts
  • Vertical sway (0–40px) — set it to 0 for a clean, purely horizontal drift
  • Sway cycles (1–10) — how many round trips the camera makes across the whole clip. 1–2 on a long clip gives a slow float
  • Zoom level (1.00–3.00) — pushes in and pulls back once across the clip. Click the preview to set the zoom center
  • Resolution (256–1024px) — literally the output video width, and the biggest lever on generation time

The depth map tab exists to catch failures early

The "Depth map" tab shows the estimate in greyscale. Checking it before you generate saves you from waiting several minutes only to be disappointed.

There is only one thing to look for: whether your subject's outline separates from the background. If the boundary between a person and what is behind them blurs into the same shade, that photo will produce almost no parallax. If the subject stands out clearly in white, even a modest horizontal shift will look convincingly three-dimensional.

Certain photos reliably confuse the estimate: shots through glass, wire fences, thin branches and stray hair, and frames that are mostly blank sky. So do screenshots and flat illustrations, which have no depth to find in the first place. Those will only warp, so it is quicker to try a different image.

What determines generation time

Generation time is the frame count multiplied by the cost of drawing one frame. The frame count is 24fps times the duration, so 15 seconds means 360 frames. The per-frame cost rises with resolution.

So 1024px at 30 seconds is roughly eight times the work of 512px at 15 seconds. While you are hunting for settings, render at around 512px and 5–8 seconds; raise the length and resolution once you like the motion.

Depth estimation runs once, right after you pick an image. The one exception is the resolution slider, which rebuilds from the original image and therefore triggers a fresh estimate. Every other slider reuses the existing depth map, so you can adjust them freely while watching the preview.

Why there is network traffic the first time

Depth estimation runs on your device, but the model itself has to be downloaded once before that can happen. It comes from Hugging Face (a quantized build of Depth Anything V2 Small, about 26MB) and jsDelivr (the WebAssembly runtime that executes it).

The only thing leaving your browser is a request for those files. Your photo is not part of it. The depth estimate, the frame rendering and the MP4 encode all happen locally.

After the first run everything is in your browser cache, so the wait effectively disappears. The one-time download is worth keeping in mind on a mobile connection.

About the exported MP4

The output is an H.264 MP4 with no audio track, ready to post straight to social media or a messaging app. The video width is whatever you set on the resolution slider; the height follows your original image's aspect ratio.

The camera motion is built so the last frame lines up with the first. Looping playback has no visible jump, which suits stories, profile videos and anything else that repeats.

Encoding uses the browser's WebCodecs API. Recent browsers support it, but on an older one pressing Generate may fail to produce a file. Updating the browser fixes that.

FAQ

Q. Are my images uploaded to a server?
A. No. Depth estimation and video encoding both run inside your browser. The only external request is the one-time download of the model files.
Q. Why does the first run need a network connection?
A. It fetches the depth model (about 26MB) and the inference runtime from a CDN. That is a static file download — your photo is not sent anywhere. Later runs read them from cache.
Q. Which photos produce the best 3D effect?
A. Ones where the subject clearly separates from the background. Shots through glass, wire fences, thin branches, stray hair and frames dominated by sky are hard to estimate. Use the "Depth map" tab to check whether your subject stands out before generating.
Q. How long does generation take?
A. It depends on frame count (24fps times duration) and resolution. 1024px at 30 seconds is around eight times the work of 512px at 15 seconds, so experiment at 512px and 5–8 seconds first.
Q. What file do I get?
A. An H.264 MP4 with no audio. The motion is built to loop, so the last frame joins back onto the first without a visible cut.
Q. The motion is too strong and edges look warped.
A. Lower the horizontal shift. Since everything is derived from one photo, the area revealed behind a shifted subject has to be filled by stretching its surroundings, and the more you move, the more that shows. Setting vertical sway to 0 and keeping the zoom modest also helps.
Q. Pressing Generate doesn't produce a video.
A. Encoding relies on the browser's WebCodecs API, so browsers without it cannot export. Update to a current browser version and try again.
Q. Which image formats are supported?
A. JPG, PNG and WebP, up to 20MB per file.
Q. Is there any cost?
A. No. It is free, with no sign-up and no limit on how many videos you generate.
Q. What technology does the depth estimation use?
A. A quantized build of Depth Anything V2 Small (Apache-2.0), run in the browser through transformers.js. Nothing is inferred on a server.