Upload a photo, then drag to push pixels.
Or try an example
Drag on the photo. The brush pushes pixels along the stroke. Photos wider than 1400 pixels are scaled down first.
Help Us Improve
—
(—)
Liquify a photo
Push pixels with a brush to liquify a photo, then download a PNG. Runs in your browser. Free, no sign-in.
What this liquify tool does
The brush
Push: Pixels follow the direction of the stroke, with a soft falloff at the edge of the brush.
Brush size: A larger brush moves a wider patch of the photo.
Reset: Reset puts the loaded photo back, before any strokes.
How to liquify a photo
Load a photo
Use an example or upload a PNG, JPEG, or WebP.
Drag on the photo
The stroke pushes pixels as you move. Short strokes make a small nudge.
Download the PNG
Save the result, or reset and start again.
Tips
- 01
Use a smaller brush on a face
A tight brush moves an eye or a smile without dragging the whole portrait.
- 02
Lower the strength
A lower strength makes several short strokes easier to control.
- 03
Use a warp for the whole frame
A wave, twirl, or bulge across the whole photo is on Image Distorter.
When to use this page
A local nudge
Push one part of a photo and leave the rest in place.
A playful portrait
Stretch a smile or a feature with a short stroke.
A quick experiment
Reset as often as you want, then download the version you keep.
What you get
No account: The photo stays in the page. There is no sign-in step.
A full reset: Reset restores the photo from the moment it loaded.
A PNG: The download is the photo after your strokes.
Technical details
- Input
- PNG, JPEG, or WebP. The working image is limited to 1400 pixels on the long edge.
- Brush
- Pixels inside the radius move along the drag. The shift fades to zero at the rim.
- Sampling
- Each moved pixel is sampled from the previous frame with bilinear interpolation.
- Where it runs
- In your browser.
Sources & References
“The CanvasRenderingContext2D method getImageData() of the Canvas 2D API returns an ImageData object representing the underlying pixel data for a specified portion of the canvas.”
getImageData(): Each stroke reads the current pixels, shifts the ones inside the brush, and writes them back. developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getImageData
“The Canvas API provides a means for drawing graphics via JavaScript and the HTML <canvas> element.”
Canvas API: The photo and the liquify result live on a canvas in the page. developer.mozilla.org/en-US/docs/Web/API/Canvas_API