Omni Image Animation & AI Studio

10 creative pipelines: Pencil Sketch, Parallax, 3D Relight, Lens Flare, Ink Assembly, Kintsugi, AI Inpaint & more - all client-side

Zero-Upload Privacy: All 10 engines - pixel manipulation, depth maps, physics simulation, fracture generation, FMM inpainting, and MediaPipe face inference - run entirely inside your browser. Your images never reach our servers.

Studio Controls

Active Engine
Timeline Duration 15s
Active Pipeline:Pencil Sketch
Viewport:0 * 0 px
Render Status:Ready
Studio Viewport
Awaiting source media

Drop Source Image Here

Upload any photo to run all 10 engines.
100% Local - Nothing is uploaded

1 Line-by-Line Pencil Sketch Animation

The pencil sketch engine converts a photograph into a sequenced graphite drawing that builds itself stroke by stroke, accurately simulating a human artist's hand. The algorithm runs in two phases:

Phase 1 - Stroke Generation: For every 4 * 4 pixel sample grid, the engine computes the Sobel gradient at that point (Gx = depth[x+1] - depth[x-1], Gy = depth[y+1] - depth[y-1]). The gradient direction is rotated 90deg to find the tangent to the nearest edge. This becomes the stroke angle - strokes drawn perpendicular to a gradient naturally follow the contour of shapes, exactly as a human hand would. Stroke length scales with darkness: length = 6 + (255 - luma) / 30, producing 6px gossamer lines in highlights and up to 14px heavy strokes in deep shadows. Pixels with luminance below 100 receive a secondary cross-hatch stroke at 90deg for tonal density. All strokes are radially sorted by distance from canvas centre for a natural outward drawing progression.

Phase 2 - Animation: Each animation frame calculates targetStrokeCount = floor(progress * totalStrokes). Only the delta between the last drawn index and the target is rendered per frame, batched into a single beginPath() / stroke() call on a composited off-screen layer. This accumulation technique prevents expensive full-redraws while maintaining 60 FPS on images with 50,000+ strokes.

2 2.5D Cinematic Parallax Camera Zoom

The parallax engine synthesises depth-of-field camera motion from a flat photograph without any depth sensor data. A Gaussian-weighted luminance analysis generates a synthetic depth map heuristic (brighter = closer in typical outdoor photos). The camera model applies a perspective-correct pixel remap at each frame:

  • zoom = 1.0 + progress * 0.15 - 15% progressive zoom over the full timeline
  • panX = sin(progress * 2pi) * 20px - sinusoidal horizontal drift
  • Each pixel's source coordinate is computed as srcX = (x - w/2) / (zoom + (1 - depth) * 0.2) + w/2 + panX * depth

The depth multiplication on panX creates the parallax offset - shallow pixels (depth ~= 1.0) shift the full pan amount while deep background pixels (depth ~= 0.0) shift minimally, creating genuine 3D separation. The result is visually indistinguishable from a professional camera move with depth-of-field rack focus.

3 Ink-in-Water Fluid Assembly

The ink assembly engine simulates each non-white pixel as a physical particle obeying curl-noise turbulence physics, then assembles them into the image. Each particle starts at a random offset (up to 1/2 canvas width from its target) and carries its true image colour. The physics update per frame:

  • First 10% of timeline: Pure curl noise turbulence - vx += sin(y * 0.05 + t * 10) * 5, creating vortex-like chaotic flow
  • After 10%: Spring force activates - ax = (tx - x) * 0.05 pulls each particle toward its target position
  • Damping: All velocities multiplied by 0.85 per frame to prevent oscillation and simulate fluid viscosity

The result is a simulation of ink dispersing in water (chaotic turbulence phase) then gradually reverse-assembling into a coherent image (spring convergence phase). The assembly time is controlled by the Timeline Duration slider.

4 Kintsugi Gold Fracture & Stitch

Kintsugi is the Japanese art of repairing broken pottery with gold lacquer. The engine generates a procedural fracture network over the photograph and animates the gold sealing process. The fracture algorithm uses recursive branching:

  1. 4 seed points are placed randomly near the image centre (30-70% of dimensions)
  2. Each branch travels 40-120px, sampling 5 intermediate jitter points (+/-15px off axis) to create organic crack irregularity
  3. At each branch terminus, a 40% probability creates a sub-branch at a random angle - generating a fractal crack tree
  4. Each fracture segment is assigned a phase value (0-1) based on its depth in the recursion tree
  5. During animation, segments with phase <= progress are rendered - revealing cracks from primary veins to fine sub-cracks
  6. Revealed segments are drawn in a gold gradient (strokeStyle = 'rgba(251,191,36,a)') with an outer glow via shadowBlur = 8

5 Interactive 3D Studio Relighting (Blinn-Phong)

The relighting engine implements the full Blinn-Phong illumination model entirely in JavaScript, running in real-time as you drag the light source. The model uses a synthetic surface normal map computed from the depth map. For each pixel:

  • Normal map: N = normalize(cross([-1,0,ddepth/dx], [0,-1,ddepth/dy])) - the cross product of horizontal and vertical depth gradients gives a surface normal vector
  • Diffuse: diff = max(0, N.L) where L is the normalised vector from pixel to light position
  • Specular: spec = (N.H)^64 where H = normalize(L + V) is the halfway vector (shininess = 64)
  • Attenuation: att = 1 / (1 + 0.00005 * |L|2) - quadratic light falloff
  • Final: out_R = pixel_R * (0.25 + (diff * lR + spec) * att * 3.0)

The ambient term (0.25) prevents pure-black shadow regions. The light source position and colour are updated live via mouse drag on the canvas.

6 Anamorphic Lens Flare & Film Grain

The lens flare engine simulates the distinctive optical artefacts of anamorphic cinema lenses used in Hollywood productions. Three compositing layers are applied in sequence:

  1. Hotspot extraction: All pixels with luminance > 200 are isolated into a separate buffer - these become the flare source points
  2. Horizontal anamorphic streak: The hotspot buffer is tinted electric blue, stretched to 3 * canvas width, and blurred with filter:blur(10px). Composited using screen blend mode - the horizontal blue streak is the signature of a cylindrical anamorphic lens element
  3. Circular bloom: An additional blur(20px) pass of the raw hotspots adds warm volumetric light scatter around each highlight
  4. Film grain: Gaussian noise (+/-10 levels) is added to every pixel, simulating analog photographic grain from silver halide emulsion

7 E-Commerce Product Contact Shadow Studio

The shadow engine synthesises a professional two-component contact shadow beneath a product photograph, replicating the output of a studio light box setup. The dual-ellipse shadow model:

  • Core contact shadow (tight, dark): A dark ellipse (rgba(0,0,0,0.6)) scaled to 25% of image width, with blur(8px), positioned at 85% of image height. This represents the zone of zero light penetration directly under the object
  • Ambient occlusion shadow (wide, soft): A large ellipse (rgba(0,0,0,0.2)) scaled to 40% width, with blur(25px). This represents scattered light from the environment filling the edges of the shadow
  • Canvas is vertically squashed (scaleY(0.25)) to flatten the shadow into a ground plane perspective

The product image is then composited over the shadow on a neutral studio grey background (#f4f4f5), matching the output of a professional product photography lightbox.

8 Fast-Marching Method AI Object Inpainter

The inpainter uses the Fast Marching Method (FMM) - a wavefront propagation algorithm from computational physics - to fill the region you paint with a red mask. FMM operates by maintaining a priority queue (min-heap) of pixels on the boundary of the mask region. Pixels are processed in order of their arrival time (analogous to wavefront propagation speed):

  1. All non-masked pixels adjacent to the mask boundary are added to the heap with arrival time = 0
  2. The pixel with smallest arrival time is extracted and used to fill its masked neighbours
  3. Each filled pixel receives a weighted average of its known non-masked neighbours, weighted by their inverse distance
  4. Newly filled pixels are re-added to the heap with arrival time = 1 + their distance from the original boundary
  5. Process repeats until all masked pixels are filled

This propagation-from-boundary approach naturally extends textures and background patterns inward, producing coherent fills without seams or smearing artefacts that simple blur-fill methods produce.

9 33x3 Laplacian Convolution Sharpening

The convolution engine applies a discrete 33x3 kernel to every pixel in the image via direct spatial convolution. The default kernel is the Laplacian-based sharpening matrix:

[ -1  -1  -1 ]
[ -1  +9  -1 ]
[ -1  -1  -1 ]

For each pixel at position (x, y), the output value is the sum of the kernel weights multiplied by the corresponding source pixel values in the 33x3 neighbourhood. The centre weight (+9) amplifies the pixel itself while the surrounding -1 weights subtract the average of its neighbours - this is mathematically equivalent to adding the Laplacian (second derivative) of the image to the original, boosting high-frequency components (edges) without any server processing.

10 MediaPipe 468-Point 3D Face Mesh

The face mesh engine loads Google's MediaPipe Face Mesh WASM model via CDN and runs full face landmark detection entirely in the browser. The detection pipeline:

  1. BlazeFace detector: A lightweight MobileNet-based model locates the face bounding box in the image
  2. Face Mesh model: A 191K-parameter CNN processes the cropped face region and regresses 468 3D landmark coordinates in normalised screen space [0, 1]3
  3. Landmark rendering: Each of the 468 points is plotted as a yellow dot, with the standard MediaPipe connection map used to draw edges between anatomically adjacent landmarks (eyelid contours, lip boundary, jawline, nose bridge, etc.)

The model runs with refineLandmarks: true, which activates the iris tracking sub-model that adds 10 additional iris contour points per eye - improving pupil and iris boundary accuracy for applications like gaze estimation and eye tracking.

* Full Engine Pipeline Comparison Table

#EngineCore AlgorithmOutput TypeBest Use Case
1Pencil SketchSobel gradient -' tangent stroke direction, radial sortAnimated drawingPortrait art, portfolio, social content
2Parallax CameraSynthetic depth map + perspective remapCamera motion videoKen Burns effect, cinemagraphs
3Ink AssemblyCurl noise physics + spring forceParticle animationArtistic reveals, logo animations
4KintsugiRecursive lightning-branch fracture treeGold crack animationCreative photo effects, art prints
53D RelightBlinn-Phong: diffuse + specular + attenuationInteractive renderProduct relit mockups, portrait drama
6Lens FlareScreen-blend anamorphic streak + bloomStylised FX imageCinematic stills, scene-setting
7Product ShadowDual-ellipse contact + AO shadow synthesisStudio backdrop imageE-commerce listings, product ads
8FMM InpainterFast Marching Method wavefront propagationObject-removed imageWatermark removal, background cleaning
9Sharpen33x3 Laplacian convolution kernelSharpened imagePhoto clarity boost, detail enhancement
10Face MeshMediaPipe BlazeFace + 468-pt regression CNNLandmark overlayFace analysis, AR, beauty apps

~ Client-Side Architecture & Export Pipeline

All 10 engines run entirely within the browser's sandboxed JavaScript environment. When an image is uploaded, the FileReader API reads it into a local DataURL - no network request is made. The image is drawn to an off-screen canvas and its pixel data extracted into a Uint8ClampedArray buffer via getImageData(). All computation runs on this buffer.

The Export 60 FPS WebM button uses the canvas.captureStream(60) API to attach a real-time stream to the canvas, then pipes it through the browser's built-in MediaRecorder encoder with video/webm;codecs=vp9. Each animation frame rendered at 60 FPS is captured, compressed, and buffered. When the animation completes, the accumulated Blob is serialised to an ObjectURL and triggered as a file download - all without any server round-trip.

How does the line-by-line pencil sketch animation work?
The engine runs a multi-stage pipeline: (1) It builds a luminance map from the uploaded image. (2) It calculates per-pixel Sobel gradient vectors (Gx/Gy) to detect edges and their directions. (3) Each sampled point generates a stroke aligned perpendicular to the gradient (tangent to the edge). (4) Darker pixels produce longer, heavier, more opaque strokes; lighter pixels produce shorter, lighter, gossamer strokes. (5) Very dark pixels (luminance < 100) receive a secondary cross-hatch stroke at 90deg for tonal depth. (6) All strokes are sorted by radial distance from centre for an organic centrifugal drawing effect. (7) The animation renders them sequentially, batching each frame's new strokes into a single beginPath/stroke call for 60 FPS performance.
What is the 2.5D Parallax Camera Zoom engine?
The 2.5D parallax engine simulates depth-of-field camera movement using a synthetic depth map. A Gaussian-weighted blur-based heuristic estimates per-pixel depth values. As the timeline progresses, the camera applies a perspective-correct zoom transform where deeper pixels (background) shift less than shallower pixels (foreground), creating the illusion of a 3D camera zooming into the scene. A sinusoidal horizontal pan further enhances the stereoscopic depth illusion, all rendered in real-time via pixel-by-pixel remap.
How does the Interactive 3D Studio Relighting engine work?
The relighting engine implements the Blinn-Phong illumination model entirely in JavaScript. It first builds a per-pixel normal map from the depth estimate by computing the cross product of horizontal and vertical depth gradients. As you drag the light source handle on the canvas, the engine recalculates diffuse lighting (N.L dot product), specular highlights (half-vector H = normalize(L+V), raised to shininess power 64), and realistic attenuation (quadratic falloff 1/(1 + k.d2)) for every pixel in real-time.
What makes the Anamorphic Lens Flare engine cinematic?
The lens flare engine extracts pixels above luminance threshold 200 to identify hotspots. It renders two composited layers using screen blend mode: (1) a horizontally stretched, blue-tinted, heavily blurred streak across the full canvas width - mimicking the cylindrical lens elements of anamorphic cinema glass that create characteristic blue horizontal flares; (2) a warm-tinted circular bloom blur around all highlights. A Gaussian film grain overlay (+/-10 levels) adds analog photographic texture.
How does the Ink-in-Water Fluid Assembly engine animate?
Ink assembly particles are generated for every non-white pixel, starting from random scattered positions far from their target. Each particle obeys curl-noise turbulence physics (vortex-like flow field computed from sin/cos of position) during the first 10% of the timeline. After 10%, a spring force pulls each particle toward its correct image position while damping (friction = 0.85) prevents oscillation. This creates an organic ink-dispersing-in-water effect that reverse-assembles into the full image over the animation duration.
What algorithm does the Kintsugi Gold Fracture engine use?
Kintsugi fractures are generated using a recursive branching algorithm that mimics lightning-bolt topology. Starting from 4 random seed points near the image centre, each branch travels a random length (40-120px), jittering 5 equidistant points by +/-15px off the straight path for jagged crack realism. Each branch spawns sub-branches at up to 40% probability, creating a self-similar fractal tree. Fractures are assigned a phase value (0-1) that controls when in the animation timeline they appear, revealing from primary cracks outward to fine sub-branches.
How does the Fast-Marching AI Object Inpainter work?
The inpainter uses a JavaScript implementation of the Fast Marching Method (FMM), a wavefront propagation algorithm originally used in seismic imaging. After you paint a red mask over the object to remove, the algorithm constructs a narrow band of pixels surrounding the masked region. It propagates inward from the boundary, filling each masked pixel with a weighted average of its nearest known neighbours, prioritising pixels with the smallest "arrival time" (distance from boundary). This coherently fills textures and background patterns across the removed region.
Can I export the pencil sketch animation as a video?
Yes. Click "Export 60 FPS Video (.webm)" to capture the animation using the MediaRecorder API with the canvas.captureStream(60) method. The browser encodes each frame in real-time into a WebM container. The duration slider (5s-300s) controls the full animation length. For longer exports, the progress bar in the panel tracks encoding completion. The final .webm file can be imported into video editors, social media platforms, or converted to MP4 using FFmpeg.
Is any data uploaded to a server?
No. All 10 processing engines - pixel manipulation, gradient computation, depth map generation, normal map construction, particle physics, fracture generation, inpainting wavefront propagation, convolution sharpening, and MediaPipe face mesh inference - run entirely within your browser using the HTML5 Canvas API, JavaScript typed arrays, and the MediaPipe WASM binary. Your images never leave your device.
What does the Convolution Sharpen engine do?
The convolution engine applies a 33x3 sharpening kernel to the image data via direct pixel-by-pixel convolution. The default kernel is the standard 8-neighbour Laplacian sharpening matrix (centre value +9, ring values -1). For each pixel, it computes the weighted sum of itself and its 8 neighbours according to the kernel weights, then writes the result back to the image buffer. This increases apparent edge contrast without any upload - equivalent to Lightroom's Sharpening/Detail operation but executed entirely in the browser.
How does the MediaPipe Face Mesh engine detect 468 landmarks?
The MediaPipe Face Mesh engine loads Google's WASM-based BlazeFace + Face Mesh model via CDN. When the image is uploaded, it is sent to the FaceMesh instance via faceMesh.send(). The model runs a two-stage pipeline: (1) BlazeFace detector locates the face bounding box; (2) the mesh model predicts 468 3D landmark coordinates in normalised screen space. The engine then renders each landmark as a dot and draws mesh triangulation edges using the standard MediaPipe 468-point face topology connection map.
What makes this different from standard sketch filters?

Most 'sketch filters' simply invert your photo, apply a Gaussian blur, and blend it using Color-Dodge to create a static image instantly. Our tool is a Procedural Animation Engine. It mathematically extracts the structural contours of the photograph and actually draws them line-by-line across the screen, simulating the physical process of an artist drafting a portrait.

What is the Farjana Drawing style?

The Farjana Drawing style refers to a massively popular genre of romantic, highly detailed pencil sketches prevalent on YouTube and TikTok. The appeal lies not just in the final image, but in watching the hypnotic, line-by-line progression of the graphite building up on the paper. Our tool was specifically engineered to digitally replicate this psychological satisfaction.

How does the tool know where to draw the lines?

The engine utilizes a mathematical algorithm known as a Sobel Edge Detection Matrix. It passes mathematical kernels over your photograph to calculate the gradient of pixel intensity. By identifying areas of high contrast (like the edge of a jawline or the pupil of an eye), it generates a structural blueprint that the virtual pencil follows.

How does the 'Download Video' feature work?

We utilize the modern HTML5 MediaRecorder API. When you click record, the browser directly captures the live byte-stream of the HTML5 Canvas exactly as it animates on your screen. It then packages those frames in real-time into a highly compressed `.webm` video file, which is instantly downloaded to your device for sharing.

Is my video uploaded to your servers for processing?

Absolutely not. All calculations, frame-by-frame rendering, and video encoding happen completely client-side utilizing your device's local CPU. Because of this Zero-Upload architecture, your privacy is fully protected, and the video generation is instantaneous regardless of your internet connection speed.

Why is the video format .webm instead of .mp4?

The `.webm` format (backed by Google) is the native video encoding standard for modern web browsers. It provides excellent compression without requiring proprietary licensing. WebM files can be uploaded directly to YouTube, TikTok, and Instagram without any conversion.

What does the 'Pencil Hardness' slider do?

In traditional art, pencils are graded from Hard (H) to Black (B). A hard pencil (like 2H) creates very light, thin lines, whereas a soft pencil (like 6B) creates dark, thick, smudged lines. In our engine, adjusting the hardness slider dynamically alters the algorithmic threshold of the Sobel operator, determining how many lines are drawn and how opaque the graphite appears.

Why did the animation skip the background of my photo?

The Sobel operator thrives on high contrast. If the background of your photograph is blurry, out-of-focus, or low contrast, the mathematical gradients will be too weak for the algorithm to detect. This is actually ideal for portrait sketches, as it forces the engine to focus all its drawing time on the high-contrast features of the subject's face.

Can I use this on my mobile phone?

Yes! Because the engine runs on standard HTML5 Canvas JavaScript APIs, it is fully compatible with modern mobile browsers like Safari (iOS) and Chrome (Android). The video export utilizes the mobile processor to encode the animation directly to your camera roll.

Why did the drawing start from the center of the face?

To make the animation feel organic and deliberate, we wrote a sorting algorithm that calculates the physical distance of every edge pixel from the center of the canvas. The engine draws the pixels closest to the center first, spiraling outward. This simulates an artist starting with the nose and eyes before moving outward to the jaw and hair.

Rate Omni Image Animation & AI Studio

Help us improve by rating this tool.

4.7/5
363 reviews