Add Snow to a Photo or Video
Falling snow over your own picture or clip, saved as a looping MP4, a GIF or a PNG. Made on this device; nothing is uploaded.
Pick one picture or one clip. It is opened on this device, never uploaded.
This browser has no WebCodecs, so it can save a GIF or a PNG from a photo but cannot make an MP4 or open a video. Chrome, Edge, Samsung Internet, Safari 16.4+ and Firefox 130+ on a computer can.
Preview
Open a photo or a video: the snow falls on it here.
The snow
Effect
Amount
Flake size
Colour
No part of this picture is that bright, so the glints are placed anywhere. Lower the threshold to keep them on the brightest parts.
Wind
The same seed and settings always give the same snow or sparkles; the seed is in the file name, so you can make the same snow again.
Save
GIF size (long side)
MP4: H.264, 30 fps, long side up to 1080 px (a video keeps its size, up to 1920 px). PNG: the photo's own size, up to 4096 px.
Privacy: the photo or video is read in your browser and never uploaded, and nothing is stored. Frames live only in this page's memory, one at a time while a file is made, and are gone when you close the tab. The only network traffic after loading is an anonymous page count and three fixed event names: snow-open (the first photo or video you open in a visit), snow-save (the first file you save with Snow) and sparkle-save (the first file you save with Sparkles). They carry no file data, no file name and no settings.
How to add snow to a photo
- Open a photo or a video. One picker takes both: a JPEG, PNG or WebP photo, or an MP4 or MOV clip from a phone.
- Set the snow while it falls on the preview: Light, Steady or Blizzard; Small, Mixed or Big soft flakes; wind to the left, none or to the right; the speed; and Depth, which makes near flakes larger, faster and softer and far ones small, slow and faint, so the snow has distance in it.
- Or choose Sparkles under Effect for twinkling glints instead of snow, in white, gold or the photo's own colours.
- Keep a pattern you like with its seed. New seed throws a different snowfall with the same settings.
- Save. From a photo: an MP4 of 3 to 15 seconds that loops, a GIF of 2 to 6 seconds, or a still PNG. From a video: an MP4 of the whole clip with snow over every frame.
How the snow is made
Every flake is drawn by this page's own code: a soft round disc (a white centre fading to clear, softer for near flakes) or, for about one bigger flake in six, a six-armed crystal with two pairs of side branches that turns slowly as it falls. Each one gets, from the seed, a size, a distance, a starting place, a fall speed, a sway and a wind drift. The amounts are counted for a 4:3 picture: Light 70 flakes, Steady 180, Blizzard 480; a wider picture gets proportionally more (up to 1.8 times), a tall one fewer. Sizes are set as a share of the picture's height, so the same seed gives the same snow in the small preview and in the full-size file.
A worked example of the loop: in a 6 s MP4, a flake has to fall through the picture plus a margin above and below (1.12 picture heights) a whole number of times in 6 s. A flake that would fall at 0.15 picture heights a second is set to 0.187 (once in 6 s); one that would fall at 0.5 keeps 0.5 and falls 2 times, waiting out of sight below the frame for the rest of its 6 s. Its sway is rounded to whole swings the same way. So frame 180, the one after the last, would be identical to frame 0, and a player on repeat never jumps.
How the sparkles are made
Each glint is a four-point star drawn by this page: a white-hot centre, four thin curved arms that take the chosen colour towards their tips, and a soft glow. Over its life of 0.7 to 1.8 s its brightness rises quickly to a peak about a third of the way through and fades more slowly, and its size follows the brightness. Few, Some and Many are 20, 50 and 120 glints for a 4:3 picture, but only about half of them are lit at any moment. On bright spots measures every pixel of a 160 px copy of the picture with the Rec. 709 luma weights (0.2126 red + 0.7152 green + 0.0722 blue) and puts glint centres only where the result is above the threshold; at 75 % a white or pale yellow highlight qualifies, mid-grey, skin and grass usually do not. To loop, a 6 s clip is cut into three 2 s periods: every glint lights once per period, at a different spot each time, and the fourth period would repeat the first.
What it cannot do
- The snow is drawn on top. It falls in front of everything in the picture, never behind a person, a roof or a tree, and it does not settle or pile up on anything. Nothing is AI: no part of the photo is changed or invented, the flakes are simply painted over it.
- Short loops cannot have slow snow. To loop, every flake has to cross the picture at least once per loop, so in a 3 s loop no flake takes longer than 3 s to cross. At Speed 1 or 2 in a 3 s loop the snow falls at that minimum speed; choose 6 s or more for slow, drifting snow.
- Video needs WebCodecs, and opens only MP4 or MOV in a codec this browser decodes. That is Chrome, Edge or Samsung Internet 94+, Safari 16.4+ on a Mac, iPhone or iPad, or Firefox 130+ on a computer; Firefox for Android does not have it. H.264 opens in all of them; HEVC (H.265, the iPhone default) only where the browser can decode it, usually Safari. WebM, MKV and AVI are refused. Sound is copied only when it is AAC; other sound is dropped and the page says so first.
- A GIF has 256 colours a frame, so a photo's smooth sky shows steps. Measured 2026-10-29 on a test photo of a smooth blue sky gradient: one column of the photo, top to bottom, held about 250 different colours; the same column of the 720 px GIF held 28, so the sky came out in visible bands (on average 2.3 levels off the photo, out of 255). The MP4 of that photo kept 128. Choose the MP4 when the picture has a big smooth sky.
- It takes time, and a phone is slower. Measured 2026-10-29 in headless Chrome on a 4-core server: a 6 s MP4 at 1080 ร 810 px took 0.7 s with Light snow and 1.0 s with Blizzard, a 15 s Blizzard MP4 2.5 s, a 6 s GIF at 720 px 0.8 s, and snow over a 10 s, 1280 ร 720, 30 fps video with sound 4.0 s. A phone is usually several times slower, and the tab must stay open while it works.
- Sparkles are drawn on top, too, and do not follow moving things in a video. Their spots are chosen from the first frame, so a glint stays where it was put while the picture moves under it.
- On bright spots finds bright pixels, not objects. It does not know a ring from a white wall: anything above the threshold can sparkle, including a bright sky or a white shirt. Raise the threshold to keep only the brightest highlights.
- The caps: an MP4 from a photo is 3 to 15 s at 30 fps, at most 1080 px on the long side; a GIF is 2 to 6 s at 20 frames a second, at most 480 or 720 px on the long side; a PNG keeps the photo's size up to 4096 px. A video can be at most 3 minutes and 2 GB, and is saved at its own size up to 1920 px on the long side, at its own frame rate. A small photo is never scaled up.
Questions
Can I add snow to a video?
Yes, an MP4 or MOV up to 3 minutes long, in a browser that has WebCodecs (Chrome, Edge, Samsung Internet, Safari 16.4 or later, Firefox 130 or later on a computer). Open it, set the snow on the preview of its first frame, and press Save MP4: every frame is decoded on your device, the snow is drawn over it at that frame's own time, and the frames are encoded again as H.264. AAC sound, which is what phones record, is copied into the new file unchanged; other sound cannot be, and the page says so before you save.
Does the snow loop?
Yes, the MP4 and the GIF made from a photo loop without a jump. Every flake is in exactly the same place at the end of the clip as at the start: its fall speed is set so it falls through the frame a whole number of times in the clip's length, and its side-to-side sway makes a whole number of swings. So a 6 s MP4 played on repeat, or set as a looping story, shows one endless snowfall. The test checks every flake's position at the start and the end within half a pixel. Snow over a video runs once, start to end, like the video.
Is my photo or video uploaded?
No. The photo or video is read by your browser, every frame is drawn in this page's memory one at a time, and the MP4, GIF or PNG is written on your device. Nothing is stored and nothing is sent. The only network traffic after the page loads is an anonymous page count and three fixed event names, snow-open, snow-save and sparkle-save, which carry no file data.
Can I add sparkles instead of snow?
Yes. Set Effect to Sparkles and the page draws four-point star glints that grow, peak and fade, each in about 0.7 to 1.8 seconds, then come back at another spot. Colour is White, Gold or From the photo (the colour under the glint, lightened). With On bright spots ticked, glints only appear on pixels brighter than the threshold (75 % by default), such as lights, water, a sunlit window or snow; untick it to scatter them anywhere. The MP4 and GIF loop without a jump, and the seed in the file name gives the same sparkles again.
Why does the GIF look grainier than the MP4?
A GIF can hold only 256 colours in each frame, so smooth areas such as a sky are rounded to the nearest of those 256 and show steps (banding). The MP4 has no such limit. For a story, a message or a website, the MP4 looks better and is usually smaller; the GIF is for places that only take GIFs.