Heart Locket GIF Maker

Make an animated heart locket from two photos, encoded on your own device.

Heart locket

Your photos never leave this page. They are read from your device, composed and encoded into a GIF here, and discarded when you close the tab. Nothing is uploaded.

Getting the face right. Each half is a tall, narrow slot, so use a close-up where the face fills most of the photo — portrait orientation, at least 400 px, is ideal. On load the tool tries to find and centre the face automatically; then drag the preview to reposition and use Zoom until just the face fills the heart.

Preview
Choose two photos to begin.

This is the finished GIF, animating and looping exactly as the downloaded file will.

What this tool does

Choose two photos and the locket opens to reveal them, one in each half. Add an engraving, pick a metal, and download a real animated GIF. The whole animation - drawing the frames, reducing the colours and writing the GIF file - happens in this page, so your photos are never uploaded.

Composes two photos into the halves of an opening heart locket and animates it opening.

Encodes the result as a looping animated GIF in the page, with an optional engraving on the closed lid.

How to use it

  1. Choose a photo for each half of the locket.
  2. Frame each face: the tool auto-centres it on load, then drag the preview or use the Zoom slider until just the face fills the heart.
  3. Add an engraving if you want one, and pick a metal.
  4. Adjust the size and opening speed.
  5. Download the GIF.

Why use this maker

A locket animation is a personal gift or post, and building one in an editor takes skill. Two photos and an optional engraving produce a ready GIF.

Why we built it

We built the heart locket GIF maker to encode the GIF on your own device, because people put family photos into this kind of tool. Make other animations with the GIF maker and crop faces first with the circle crop tool.

Related tools worth a look: the Emote Resizer and the Paint by Numbers Generator.

Who this tool is for

  • Anyone making a keepsake or a gift
  • Couples and families
  • Social media users

When to use it

  • Making a gift, anniversary or tribute.
  • Posting a sentimental animation.
  • Combining two photos in one design.
  • Creating profile art.

Why it matters that nothing is uploaded

The photos people put into this are not incidental.

A heart locket is made for photographs of the people closest to you - a partner, a child, someone who has died. Those are not files anyone should be handing to an unfamiliar website without thinking about it.

Nearly every tool of this kind works by uploading both photographs to a server, assembling the animation there, and sending back a link. That means copies of your photographs exist on someone else's machine, governed by their retention policy, their security, and whatever their terms say about what they may do with uploaded content.

This one has no server component. The frames are drawn on a canvas in this page, the colours are reduced here, and the GIF file itself is written here by an encoder built into the page. There is no upload step to opt out of.

A practical consequence: it works offline once the page has loaded, and there is no queue or file size limit.

How a GIF actually stores an animation

Which explains most of the compromises below.

GIF is an old format, and its constraints are unusual compared with anything modern. The one that matters most: a GIF frame can contain at most 256 distinct colours, chosen from a table stored in the file. A photograph typically contains tens of thousands.

So every frame has to be reduced to a palette. This tool builds one palette from all the frames together, by repeatedly splitting the set of colours along whichever axis it spreads widest and averaging each resulting group. That gives 256 colours chosen to suit the images actually present.

Using one shared palette rather than a fresh palette per frame is deliberate. Per-frame palettes fit each frame slightly better, but because each is computed independently, colours shift a little between frames - which on skin tones reads as a visible flicker through the whole animation. A single palette is marginally less accurate and much steadier.

Frames are compressed with LZW, which finds repeated sequences of palette indices and stores each as a short code. It works extremely well on flat colour and poorly on photographic detail, which is why a locket with large areas of metal compresses far better than one where the photos fill the frame.

What drives the file size
FactorEffect
Size in pixelsLargest single factor - area grows with the square
Photographic detailCompresses poorly; flat colour compresses very well
Number of framesRoughly proportional
Colour countModest - the palette itself is only 768 bytes

Timing

GIF stores a delay per frame, in hundredths of a second, and loops from the last frame straight back to the first. An animation with a uniform delay therefore restarts the instant it finishes, which for a locket reads as a flicker rather than as something opening and being looked at.

So the first frame - the closed locket, with the engraving - is held, and the last frame, fully open, is held for longer still. What you get is a beat on the closed locket, a smooth opening, and a pause on the photographs before it starts again.

The opening itself eases out rather than moving at a constant rate, so the lid slows as it reaches full open instead of stopping dead. It is a small thing, and it is most of the difference between an animation that looks made and one that looks generated.

Choosing photographs

Each half of the locket is a tall narrow shape, so every photo carries its own framing. When a photo loads, the tool tries to find the face and centre it automatically; from there you can drag the small preview to move the photo, or use the zoom slider to fill the heart with just the face. A portrait orientation still works best, because it matches the shape of the slot; a wide landscape gives you less to work with.

Faces should be reasonably large in the original. The visible area of each half is only a few hundred pixels across at most, and while zoom lets you crop in, a face that occupies a tiny part of a low-resolution photo will be soft once enlarged and reduced to a shared palette. Aim for a clear photo of at least 400 pixels on its short side.

Bright, clear photographs survive palette reduction better than dark ones. Shadow detail is the first thing to go when 256 colours have to cover two photographs and a metal locket at once.

What you give it, and what you get back

Input and output of Heart Locket GIF Maker
ItemDetails
InputTwo photos and optional engraving text.
OutputA looping animated GIF.
OptionsFace centring where the browser supports it.

Issues you may run into

Common problems with Heart Locket GIF Maker
What you seeWhy it happensWhat to do
Faces are off-centreFace detection is not available.Crop the photos first.
File is largeGIF files are heavy.Use smaller photos.
A single photo is wantedTwo photos are used.Repeat one photo in both halves.

Assumptions and limitations

Frequently asked questions

How do I make a heart locket GIF?

Choose a photo for each half, optionally add an engraving, pick a metal and size, then download. The locket animates open to reveal both photos, and the GIF loops.

Are my photos uploaded anywhere?

No. The frames are drawn, the colours reduced and the GIF file written entirely in this page on your own device. There is no server involved, which is also why it works offline and has no file size limit.

Why do the colours look slightly flat?

GIF allows at most 256 colours in the whole file, and here they are shared across every frame and both photographs. That is a real constraint of the format, not a quality setting. A shared palette is used deliberately, because per-frame palettes make colours shift between frames and skin tones visibly flicker.

What size should my photos be?

Aim for a clear photo at least 400 pixels on its short side; larger is reduced automatically. Portrait orientation suits the tall, narrow half best. You do not have to pre-crop them - the tool frames each face for you and gives you drag and zoom to adjust.

Why is the file so large?

GIF compression works by finding repeated runs of colour, which photographs do not have. Reduce the output size if the file matters - halving the dimensions cuts the pixel count to a quarter.

Can I use it on Instagram or WhatsApp?

Both convert GIFs to video on upload, so the animation will usually play but the file you send is not the file that arrives. Messaging apps that keep GIFs intact will show it exactly as downloaded.

How many colours can a GIF have?

256 per colour table. This tool builds one table from all the frames together by median cut, splitting the colour set along its widest axis repeatedly, so the 256 are chosen to suit your particular photographs.