Open PerfectLoop · Quick start
Use this guide for advanced repairs, layers, animation, and wallpaper preparation. Original and Result share the current video framing; Result shows the processed loop. Result plays every loop method live in the browser — Natural cut, Crossfade, Offset dissolve, Ping-pong, Smooth ping-pong, and Fade — with framing and layers, and without encoding. The first time a blending or reversing method is shown for a range, its frames are decoded once (Preparing preview); Natural motion plays meanwhile. Repairs and motion interpolation are produced only by the encoder: with those, edits update a draft frame, and Play in Result encodes the full cycle before playing; an unchanged result plays immediately. Original plays the source without rendering. Video transforms stay in Original until you choose Result.
Layer tracks appear only in Layers. Other tabs keep the ordinary video timeline. Tracks use one finished loop, from zero to its processed duration, so a dissolve or Ping-pong can give a different scale from source timestamps.
Select a track to open its layer controls. Drag the clip body to move its active interval without changing its length, or drag an edge to change Show from / Show until. Shorten a full-loop clip before moving it. Edits snap to output frames; Arrow keys adjust one frame, Shift + arrows ten frames, and Home/End move to a boundary. One pointer gesture is one Undo step. Pulling the end to the loop boundary restores Until end of loop.
The Video track spans the complete loop; edit the source range in Edit loop. Track order follows the layer stack, including images below Video. Hidden layers keep their timing. A layer entirely outside the current cycle shows Outside loop; adjust Active time in its controls or lengthen the cycle. Scrubbing updates the large preview. A draft uses the primary source frame; press Play in Result to check processed blends and repairs. Timing edits pause playback and never trigger a render automatically.
- Open Layers and pause the source on a clean frame. Use the timeline or frame-step controls to find it.
- Choose Create patch from frame. The selection window shows the framed source before layers and loop effects.
- Draw a rectangle or freehand lasso. For polygonal lasso, click the corners and choose Close polygon. Use Selection zoom and scroll to reach small details. Feather softens the selected edge in output pixels.
- Choose Create patch. The fragment becomes a fully opaque, static Patch layer at its original output coordinates.
- Set Active time → Show from / Show until, or leave Until end of loop enabled. Times refer to the finished loop, repeat each cycle, and apply to both the live layer preview and encoded output. Render to check the actual join and timing.
Patches can be moved, resized, rotated, hidden, duplicated, and removed like image layers. Opacity is available; movement and spinning are under Optional animation and are off by default. Active-time controls also work for ordinary text and image layers. An explicit end beyond the loop is clipped; a start beyond the loop keeps the layer hidden.
Static patches freeze a fragment. Neither patch type tracks objects or performs smart object segmentation. It works best for stationary details. Changing source framing may require recreating the patch, and loop repairs or dissolves may change the surrounding image. Feathering is baked into the fragment when it is created; redraw the selection to change it. Source pixels and generated patches stay in the browser.
- In Layers, choose Create video patch and draw a rectangle, lasso, or polygon around the stationary region to replace.
- Set Source from / Source to to a clean 0.1–8 second donor fragment from the current video. The selection canvas remains the source frame shown when the dialog opened. Set Feather before creating the patch.
- Set Show from / Show until in finished-loop seconds. One forward donor cycle fits that interval; the panel displays the resulting donor speed. Leave Until end of loop on for a patch that reaches the end.
- Adjust Seam blend (0–40%) to blend the donor's tail into its head without reversing motion. This can create double edges on moving objects; it is not optical flow or object tracking.
- Use Fade in / Fade out to soften a temporary repair's appearance. Fades are capped at half the active interval. Leave them at zero for uninterrupted coverage across the loop boundary. Hide the layer to compare, then render the finished loop.
Video patches capture up to 30 frames per second and retain only the selected region locally. Captured donor frames share a 64 MiB budget, including assets retained for Undo; export sequences have a 256 MiB uncompressed frame budget. Oversized operations stop with an explanation rather than silently reducing quality. Recreate a patch to change its donor range, mask, feathering, or source framing. Donor audio is excluded. MP4, WebM, and GIF use the same frame sampling and fades as the live layer preview. This tool suits fixed regions such as water, smoke, or a stationary reflection; it does not automatically follow a moving subject.
Open Repair loop → Manual repair → Seam pause to shorten a held or slow section near the beginning or end.
- Choose Detect pause for a suggestion, or set Trim start / Trim end yourself. Use the sliders, frame-count fields, or ±1 buttons. Detection fills the controls and leaves the actual trim unchanged until you apply or preview it.
- Check the highlighted source sections in Original. The summary shows the frame step and proposed duration.
- Enable Keep duration to slow the remaining motion and preserve the finished cycle length. Leave it off to shorten the cycle instead.
- Choose Apply trim, or Preview seam to apply the values and repeatedly play the last second → first second. Press it again to stop; choose Result and ordinary playback to review the full cycle.
- Reset pause trim restores the range and speed used before that trim. Undo/Redo also work.
The method, framing, and layers are retained. A method's intentional slowdown, such as a Smooth ping-pong turn, is separate from a pause in the source. Detection may decline a suggestion when footage is static, the slow section is too long, or trimming creates a worse join. Adjust manually and inspect the result in motion.
Analyze & repair also tests pause trimming for unshifted Natural cut loops. It checks the rendered motion before offering Apply; when a slowdown dominates the seam defect, a verified trim is preferred over adding a dissolve. See detection details.
| Method | How it works |
|---|---|
| Natural cut | Joins the selected end directly to the start. Best when the source motion already repeats. |
| Crossfade | Blends the end into the start using an adjustable overlap. |
| Offset dissolve | Uses the dissolve cycle and moves the transition inside the clip. |
| Ping-pong | Plays to the end, then backward to the start. Each cycle is nearly twice as long as a forward pass, without duplicate turning-point frames. |
| Smooth ping-pong | Slows the forward and backward motion into each turn for a softer reversal. |
| Fade through black | Hides the boundary with matching black frames and a visible fade. |
Dissolves can introduce ghosting, and ping-pong methods reverse motion. Choose the method that suits the footage, then check the join in motion.
Both ping-pong methods work with MP4, WebM, and GIF. GIF has no playback-direction flag, so one cycle stores the forward and backward frames. Loop forever repeats that entire cycle; turning it off plays the forward-and-backward cycle once.
Open Repair loop → Analyze & repair. Keep duration preserves the finished cycle's exact frame count; a forward seam blend may slightly adjust playback speed to compensate for overlap. Allow trimming permits at most 20% shortening and never lengthens the loop.
Auto repair renders the current result, samples frames on both sides of the boundary, and scores small image tiles so a large static background cannot hide a local jump. It tests applicable brightness/alignment corrections, forward seam blending, a better nearby cut, and a feathered local video patch. Local patches currently use the selected source range (up to eight seconds), stay below existing overlays, and must fit both capture and full-resolution export memory budgets. Reverse and shifted methods retain their intended motion; they are not automatically converted to forward loops.
For an unshifted Natural loop without brightness/alignment repair, Auto repair also tries Local background restoration. It samples 17 source frames and only borrows colors that recur in at least 75% of the interior samples. A feathered mask targets changing boundary details; the generated patch fades away within 0.4 seconds of each side of the seam and is transparent throughout the middle. It leaves playback speed and duration unchanged. Moving backgrounds, large masks, insufficient exposed background, and excessive memory requirements are rejected. This can soften the disappearance of a small transient object; it does not track bubbles or invent hidden background. The usual motion and detail checks still apply, so removing an object may be rejected if it suppresses too much visible motion.
Candidates must materially reduce sampled seam error without failing the detail, motion, or duration checks. These are image-based screening heuristics, not semantic object recognition, optical flow, or a guarantee against ghosting. The highest-ranked result is shown beside Before, with the detected region outlined and a What was tested report. Play both from the seam starts a comparison near each loop boundary. Nothing changes until Apply repair; Keep original or Escape discards the proposal. If no candidate passes, Apply is disabled.
Applying changes one Undo step and opens the already-rendered result as Result. Generated patches remain editable in Layers; Undo/Redo preserves their assets. Rejected and cancelled patches release their provisional frames. Source videos, analysis frames, and comparison renders remain local to the browser.
Open Repair loop, select the timeline range (or Use the full video), and choose Analyze loop. The analysis samples up to 25 framed source images before layers and loop effects. It recommends brightness correction and, only when a small translation improves the boundary reliably, alignment. A better nearby cut may also be suggested; applying it requires a new analysis.
- Flicker estimates brightness from relatively stable pixels and smooths its curve across the cycle boundary. It can help slow exposure fluctuations; fast or local flicker and intentional lighting changes still need visual review.
- Alignment gradually shifts the ending and applies a small fixed crop throughout the clip to avoid empty borders. This is translation correction, not object tracking, optical flow, or reconstruction of changing shapes.
- Seam blending uses the existing forward crossfade. The overlap shortens the cycle and may produce ghosting; it never reverses water, smoke, or other motion.
Correction strength controls brightness and alignment; Overlap controls blending. Apply repairs saves the chosen settings for preview and export. Preview result applies them and renders; Preview original shows source motion with the current framing, excluding repair, loop effects, and layers. Compare several repeats. Original and live layer editing do not show repairs. Changing the range, framing, speed, or frame rate clears the applicable correction; layer edits preserve it. Batch candidate exports do not inherit repairs from a different range.
These tools help with small defects and do not guarantee a seamless result for every clip. Analysis, processing, and media remain local to the browser.
Auto find lists every loop it finds throughout Search from / Search to, including clips beginning later in the video. Each is labeled by its seam: Perfect matches the source within grain and compression noise, Good differs by less than half a frame of motion, Fair by up to about one frame, and Rough shows a visible jump. All loops are listed, cleanest first, including repeats of the same motion; Rough loops are hidden only when the range has a perfect or good loop. Those fields and the timeline handles edit the same search area; playback and frame stepping in Auto find also use that area. Loops of any length from one second up to the whole search range are found. With the Spotify Canvas preset, selecting a loop shorter than three seconds sets Cycles in video so the export lasts 3–8 seconds. Selecting a candidate sets the separate render in/out points with Natural cut and plays the loop on repeat at once, while preserving the search area. Compare & choose method in Edit loop renders every available method and applies a recommendation; it takes longer, so it runs only when you ask. Method buttons show fit estimates; expand Method comparison for duration and transition measurements. You can change the method manually. Changing other search options clears previous results. Search edits support Undo/Redo.
The Source preview keeps the original video's proportions. Result shows the rendered output, including its framing, at a smaller resolution. In Edit loop, drag the video to open a live layer draft and reposition it within the output frame. Drag a square corner handle to resize it from 25% to 400%, or drag just outside a corner to rotate it freely. Holding Alt while dragging a square also rotates; Shift snaps rotation to 15° increments. Smaller sizes and rotation can expose the border color. Reset restores 100% scale, centered positioning, and 0° rotation. Video scale and Video rotation in the Layers → Video controls accept numeric values. These settings apply to rendered previews and exports. Render again after changing settings.
The editor outline follows the full object, including parts outside the cropped output. Fit view fits its real corners and the output frame on screen; the view zoom buttons only change the editor camera. The marked Output frame contains the exported pixels. Rotating with the handles keeps that output frame fixed, including when Original aspect was selected. Original and Result retain their normal view.
The Layers tab opens a live layer draft with output framing. Movement speed chooses 1–10 complete passes per processed loop cycle. The four screen directions follow the frame axes. Rotating a text or image layer adds Along rotation and Against rotation to Movement; these follow the element's angle in either direction. An angled path exits the frame before returning at the opposite end, so it repeats without a visible jump. Resetting Rotation to 0° (or a full turn) converts these choices to Left to right or Right to left. Result and exports include the same layers and motion; video repeats repeat the entire composed cycle, and GIF Loop forever repeats that cycle automatically.
Rotation animation spins text or images clockwise or counterclockwise around their center. Rotation speed chooses 1–10 complete turns per processed loop. Rotation sets the starting angle. Spin can be combined with any Movement choice; Along rotation and Against rotation use the starting angle, so the travel path stays straight while the element spins.
Both speed sliders use whole passes or turns so the loop ends at its starting position and angle. Their calculated rates use one processed cycle: movement passes per second and rotation degrees per second. Changing the range, loop method, playback speed, or frame rate updates those rates; video repeats repeat the same animation. Static hides its speed slider and retains the value for when animation is enabled again.
Images are read locally as PNG, JPEG, WebP, or GIF; animated images use their first frame. In Layers, click anywhere inside a text or image rectangle to select and move it, including spaces between letters and the outline outside the output frame. Drag a square corner to resize it with its proportions preserved and the opposite corner fixed. Images can be sized from 1% to 400% of the output width, subject to the existing sprite memory limit. Drag just outside a corner to rotate around the visible content center. Its selection outline follows its current movement and rotation; transforms retain the animation settings. Video dragging is locked while Layers is open; select Video there to adjust framing controls. Corner handles support arrow keys: squares resize and rotation handles change the angle by 1°, or 15° with Shift. Each drag forms one Undo step. Layers and image assets remain in this page session and support Undo/Redo. Up to eight layers are supported.
Text layers include Inter, Noto Serif, Roboto Mono, Oswald, Lobster, and Pacifico, all with Latin and Cyrillic support, alongside generic system families. These fonts are bundled with the editor and load when selected. Use device fonts adds the installed font faces provided by the browser, including bold and italic variants, after you grant permission. Device font enumeration requires a supporting browser such as desktop Chrome or Edge and a secure origin (HTTPS or localhost); other browsers can use Upload fonts instead.
Upload fonts accepts one or more TTF, OTF, WOFF, or WOFF2 files, up to 20 MB per file. Font files stay on your device and remain available for this page session, including after Undo/Redo or opening another video. Preview and export wait for the selected font to load before measuring or rendering the text. See bundled font licenses and sources.
Text colors use an embedded picker with hue, saturation, brightness, HEX, RGB, and color opacity controls, so selecting a color stays inside the editor. Text fills support solid colors and linear, radial, or conic gradients. Add any number of color stops, edit their positions and opacity, and set the gradient angle or center and radius. Equal stop positions create hard color transitions. One gradient covers the whole text block, including multiple lines, and moves and rotates with the text in the live layer preview, Result, and exports. Layer Opacity applies to the entire text layer in addition to each color's opacity. Picker drags form one Undo step.
The displayed Finished loop duration includes the loop method, speed, overlap, and repeats. In/out points describe the source range; a dissolve shortens it, while ping-pong extends it.
| Preset | Intended use |
|---|---|
| Spotify Canvas | Silent MP4 at 576 × 1024 and 30 fps, with checks for the finished 3–8 second loop. |
| Vertical music visual | Short portrait visuals, with a suggested duration of up to 15 seconds. |
| iPhone wallpaper | A suggested two-second cycle, phone-size previews, key-photo selection, and Live Photo or ordinary wallpaper downloads. |
| Custom | Your own output dimensions, format, timing, and frame rate. |
The Toggle aspect-ratio guide button shows the selected output ratio (for example, 9:16 or 1:1). Original and Result use the same video framing, so moving, scaling, or rotating the video keeps its position when comparing. During Find the guide is a centered proportion reference over the source. In Original, Result, and live layer editing, the outline follows the full output frame, including editor zoom. Guides are an overlay and are not exported.
Select Custom under Aspect ratio to enter Width and Height directly. Use even dimensions from 16 to 3840 pixels.
MP4 uses H.264 with optional AAC audio. The paired MOV inside a Live Photo uses the separate HEVC compatibility profile described below. WebM uses VP8 with optional Opus audio. GIF exports are silent and contain one loop cycle; Loop forever controls whether playback repeats continuously or stops after that cycle. Video cycle counts and file-size targets do not apply to GIF.
Muting the preview does not remove export audio. Choose the audio-removal option in Video settings to create a video with no audio stream.
Review Spotify's Canvas guidelines before submitting a Canvas.
Select iPhone wallpaper in Destination preset. Choose a phone size or enter custom dimensions, then open a video or choose Open photo to make a gentle two-second zoom loop from a JPEG, PNG, or WebP photo. The preset suggests a two-second selection; Fit to a 2-second cycle adjusts the source range for the loop method and speed. Text and image layers, movement, rotation, and framing work with wallpaper exports.
Choose Result to play the processed clip. Lock Screen layout and Home Screen layout show the selected Key photo behind approximate phone controls and icons. They are static layout checks; before a current render, they show a labeled draft. Phone frames, clocks, and icons never appear in downloaded media.
iOS creates its own short Lock Screen wake animation from motion near the key photo. It can select only a small part of the clip, change its speed, and interpolate or drop frames. The browser's full-video playback does not simulate that effect or establish its smoothness. Choose a key photo near the movement you want to highlight, then check the result on the target iPhone.
PerfectLoop creates the paired JPEG/MOV, timed frame and key-photo metadata, and native .pvt package on this site, without a third-party converter. Live Photo exports use silent HEVC Main, 8-bit video at 60 fps, scaled down to at most 720 × 1560 while preserving the selected aspect ratio. They do not upscale smaller output sizes. The full kit's MP4 and JPG use this same size; standalone Video · MP4 and Still wallpaper · JPG keep your selected dimensions.
The generated timing records describe the exported frames with identity geometry and their actual timestamps. They are not measurements of the source camera's motion. PerfectLoop does not copy donor sensor recordings or add a fake camera identity or GPS location.
Browsers with directory access offer Live Photo · PVT package by default: select a destination folder, and the site saves the real package directly without an archive. Existing packages are preserved, and interrupted writes remove the partial package. If cleanup fails, the error identifies the folder to remove.
Safari, including iPhone, and browsers without directory access use Live Photo · ZIP. A .pvt is a package folder, so downloading an ordinary file with that extension cannot replace the folder's structure. Creation and export work in a compatible browser on a phone or computer; saving the finished result into Apple Photos is a separate system import step.
On iPhone/iPad, try saving the ZIP to Files, choosing Uncompress, opening live-photo.pvt, and using Save to Photos if the system offers it. This action depends on iOS and is not guaranteed. On a Mac, import the package or its paired files together into the built-in Photos app, verify one Live Photo, then sync with iCloud Photos or share that asset from Photos via AirDrop. The full kit also includes an MP4 and still JPG at the compatibility size.
Import and wallpaper eligibility are experimental: native package support does not guarantee an import action is available in Files, and correct metadata does not guarantee modern iOS will animate the result as Lock Screen wallpaper. PerfectLoop has not verified these outcomes on a physical iPhone. Home Screen wallpaper stays still; iOS controls Lock Screen motion. Two seconds is preparation guidance, not a universal Apple limit. See format details, import steps, and the device reports behind the compatibility profile.
In Layers, use the up/down arrows to change the single layer stack. Move an image or text below Video in the list to place it behind the source; move it above Video to place it in front. The Video row has the same ordering arrows. The highest row is the frontmost layer. Lower layers appear in the space around a fitted, scaled-down, or rotated video. An opaque video filling the entire frame hides them. Select Video in the layer list to change its scale, rotation, position, or alignment. Video dragging remains locked in Layers.
Align to frame positions the selected layer at the left, center, right, top, or bottom of the output frame, accounting for its rotation. For animated layers this sets the starting position and returns the composition animation to its beginning. Text alignment separately controls lines within a text block. Video alignment and framing controls are in the Video row in Layers. Alignment and stack placement support Undo/Redo and are included in rendered previews and exports.