The tool you need, ready to use

Vintage Film Photo Generator

Choose one photo and a film strip developed on 18 film looks appears right away. Tap a frame you like, set grain, vignette and light leak, then add a capture-date stamp and an instant or film border and save a full-size JPG. Everything runs in your browser, and the photo is never uploaded to a server.

Last updated 2026-10-20All math stays in your browser

Sample photo

Drag the photo left or right, or press the ← and → keys, to compare with the original. You can also drop or paste a photo to open it, and it never leaves this device.

18 film looksEach frame is already developed from your photo. Tap one to develop it on the stage above.

C-41 · Color negative

Slide · Black-and-white · Instant

Eras and effects

Color curve: how much red, green and blue each brightness becomes, from dark (left) to bright (right)

Adjust

Finish

Border

Last updated 2026-10-20Your inputs are not stored

ROBERIN standardThe tool you need,
ready to use.
  • Clear at a glanceInputs and results sit where you expect them.
  • Result firstThe key number comes first; the working only when you need it.
  • Ask lessNo sign-up and no unnecessary details.

Vintage Film Photo Generator: develop one photo on 18 film looks and save a full-size JPG

The Vintage Film Photo Generator gives a photo from your phone or digital camera the color and grain of a film camera. Choose a photo and the 18 frames of the film strip below are developed from it right away. Tap a frame to develop it large on the stage above. You can then set film strength, grain, vignette, light leak, brightness and saturation, add a capture-date stamp and an instant or film border, and drag across the stage to compare with the original.

Everything runs on a canvas inside your browser, and the photo is never uploaded to a server. The saved JPG keeps the original size and is scaled down only when the long side, border included, would pass 4,096 px. The original's photo data (camera, location) is not copied into the saved file.

When it helps

  • Matching the color of many photos: develop a trip or an event on the same film at the same strength, and an album or feed settles into one tone.
  • Keeping the mood of the day: the capture date stored in the photo data is stamped in orange digits at the lower right, and the instant border gives the wide bottom margin of an instant print. No need to type a date by hand.
  • Choosing a direction before you buy film: with film you see nothing until it is shot, developed and scanned. Putting the same scene side by side as Portra 400, Gold 200 and Fujifilm 400 looks helps you decide between a warmer and a cooler palette. They are not the same colors as the real films, as the limits section below explains.
  • Giving an invitation, poster or blog header an old-photo feel: black-and-white or sepia inside a 35 mm film border looks like a frame cut from an old contact sheet.

How to use it

  1. Choose a photo: press Choose photo, drop a photo onto the workspace, or paste a copied image. A sample photo is open at first.
  2. Choose a film: tap one of the 18 frames, laid out like a contact sheet in three rows of six (three per row on narrow screens).
  3. Adjust: film strength sets how much of the film color is mixed in. Then set grain, vignette, light leak, brightness and saturation. Grain and vignette start at a different default for each film, and once you move a slider, that value stays when you switch films.
  4. Finish: turn the date stamp on or off or change the date, and pick a border: none, instant or film.
  5. Compare and save: drag across the stage (or use ← and → on the keyboard) to compare with the original, then press Save JPG. Copy puts the same picture on the clipboard as a PNG.

18 film looks and their color curves

For each film, the tool fixes five points: how much red, green and blue come out for input brightness 0, 64, 128, 192 and 255. It joins them with the monotone cubic interpolation of Fritsch and Carlson (1980). That method never wobbles between points and only ever rises, so a bright tone cannot end up darker than a dark one. The color curve graph on the workspace draws the curve of the film you have selected, and the table below lists the values the tool actually uses.

Curve values (R, G, B) and defaults for each film
FilmTypeBlack 0 →Gray 128 →White 255 →SaturationDefault grain
Original colorNo color correction0·0·0128·128·128255·255·255×10
Gold 200 lookKodak color negative · ISO 2008·4·0140·132·116252·248·232×1.0822
UltraMax 400 lookKodak color negative · ISO 4006·2·4140·128·118254·250·238×1.1524
Portra 400 lookKodak color negative · ISO 40014·12·14136·132·128248·246·242×0.9518
Ektar 100 lookKodak color negative · ISO 1000·0·0132·128·126255·253·250×1.38
Fujifilm 400 lookFujifilm color negative · ISO 4006·8·12124·136·134248·251·248×1.0620
Velvia 50 lookFujifilm slide film · ISO 500·0·6126·126·132255·255·255×1.456
Provia 100F lookFujifilm slide film · ISO 1000·0·2128·128·130254·254·254×1.127
Tri-X 400 lookKodak black-and-white negative · ISO 4004·4·4128·128·128252·252·252B/W32
SepiaBlack-and-white toning26·16·8164·134·100250·232·198B/W20
InstantInstant film feel30·34·46140·142·138240·238·226×0.856
Cross processProcessing effect0·10·52122·146·120255·250·182×1.218
1970sEra and mood effect42·28·12162·138·102246·226·192×0.922
1980sEra and mood effect14·4·26140·122·144252·242·250×1.1518
1990sEra and mood effect8·16·22134·138·128252·248·232×1.0520
CinemaEra and mood effect0·8·26128·128·134255·246·222×1.0514
FadedEra and mood effect46·46·54142·142·144236·236·232×0.816
Sun-bleachedEra and mood effect72·62·48170·158·136246·236·214×0.612

Reading the table is simple. If black 0 maps to a number above 0, blacks lift to gray and the picture looks faded. If red is higher than blue at gray 128, the color is warm, and if it is lower, the color is cool. If white 255 maps below 255, the brightest tones are pressed down and look softer. The saturation factor sets how strong the color becomes after the curve, and black-and-white films are turned to gray first and then run through the curve.

For the films that carry a real film name, the direction of the curve follows what the maker says about the film in its own material.

What the maker says, and what this tool's curve does
FilmMaker's description (gist of the original)What the curve does
Portra 400Kodak: spectacular skin tones and exceptional color saturationLifts blacks a little and lowers contrast to soften skin, with saturation almost unchanged
Ektar 100Kodak: the finest-grain color negative film available today, ultra vivid colorSaturation ×1.3, with the smallest default grain
Gold 200Kodak: versatile medium-speed daylight film for everyday photography, fine grain and vibrant saturationRaises red and lowers blue for a warm, slightly yellow color
UltraMax 400Kodak: high-speed daylight film, fine grain and vivid saturationA little more contrast and saturation than Gold 200
Tri-X 400Kodak: high-speed panchromatic black-and-white negative, classic grain structureConverts to black and white, raises contrast and makes the grain coarser
Velvia 50Fujifilm: world-class levels of image color saturation and vibrancySaturation ×1.45, with high contrast
Provia 100FFujifilm: ultrafine grain (RMS 8), medium color saturation and contrastSaturation ×1.12, with only a little contrast
Fujifilm 400Fujifilm: fine grain for a high-speed film, excellent skin-tone reproductionSlightly raised greens and blues for a fresher palette

How one picture is built

  1. Brightness: a gamma of 2−brightness/100 is applied. Black 0 and white 255 stay put and only the midtones move, so highlights don't blow out to white.
  2. Film curve: a black-and-white film first turns the picture gray (0.299 red + 0.587 green + 0.114 blue). Red, green and blue then each go through their own curve.
  3. Film saturation: brightness stays the same while the intensity of the color is changed by the film's saturation factor.
  4. Strength: the color after the film and the color before it are mixed by the strength setting.
  5. Saturation adjustment: color is pushed further or pulled back by the saturation slider. At −100 the picture is black and white.
  6. Light leak, grain, vignette: an orange glow is laid in from the upper right and lower left, a noise pattern that is always the same is laid over the picture as grain, and the edges are darkened.
  7. Date stamp and border: the date is stamped at the lower right in seven-segment digits, and the chosen border is added.

result = brightness-adjusted original + (film color − brightness-adjusted original) × strength

Example: a gray (128, 128, 128) developed as Gold 200 style comes out of the curve as (140, 132, 116), and after saturation ×1.08 as (140.6, 132.0, 114.7). At 100% strength that is (141, 132, 115). At 60% strength red becomes 128 + (140.6 − 128) × 0.6 = 135.6, giving (136, 130, 120).

The sizes of grain, vignette, light leak, date and border are all set in proportion to the photo size. That is why the grain and the date look the same relative size in the small on-screen preview and in the file saved at full size. The grain pattern is also generated from a fixed seed, so it does not flicker and change as you move a slider.

Grain and the Print Grain Index (PGI)

In its film data sheets Kodak gives the Print Grain Index (PGI) to describe how coarse grain looks in a print. According to the data sheet, PGI is a scale matched to what the eye perceives: 4 units is a difference that 90% of observers notice, and 25 is roughly where grain starts to be visible. The values are for a print viewed at 14 inches (about 36 cm), and the same film gets higher numbers the larger the print.

PGI by print size for Kodak 135-format film (24 × 36 mm)
Film4 × 6 in8 × 10 in16 × 20 inThis tool's default grain
Ektar 100less than 2538668
Portra 40037598918

For films with a published PGI, the default grain is (PGI − 15) × 0.8, with anything under 25 counted as 25. That gives 8 for the Ektar 100 look and (37 − 15) × 0.8 = 17.6, rounded to 18, for the Portra 400 look. No current official PGI figure could be confirmed for Gold 200 and UltraMax 400, and the Fujifilm films quote RMS granularity instead, so their defaults are set from film speed together with the maker's own grain description. Fujifilm calls FUJIFILM 400 fine-grained for a high-speed film, for example, so it sits below the Gold 200 look. Kodak states that PGI is a different scale from RMS granularity, so the two cannot be compared.

As the PGI table shows, grain becomes easier to see the larger the print. If you push grain up because it looks weak on a phone screen, it may look coarse on a large screen or a big print, so it is worth opening the saved file at full size once.

Date stamp and borders

The date stamp copies the way a film camera's back printed the date onto the film with light: orange seven-segment digits, slightly slanted, at the lower right. The digit height is 4.2% of the photo's short side. In English the order is month, day, year, as in 10 20 '26, and a single-digit month or day leaves its first cell blank. The date is looked up in the JPEG photo data (Exif) as the capture time, then the digitized time, then the file time. If none of the three is there, today's date is used.

The instant border takes its proportions from Polaroid Color SX-70 film (overall 107 × 88 mm, image 79 × 77 mm). The side margin (88 − 79) ÷ 2 = 4.5 mm is 5.8% of the short side. With the same margin on top, the remaining 25.5 mm (33%) goes to the bottom. Polaroid says this film takes 10 to 15 minutes to develop fully. The developing effect this tool shows when you switch films is an on-screen effect that finishes in under a second, and it does not appear if reduced motion is turned on in your device.

The film border imitates a scanned strip of 135 film (35 mm wide, with each frame 24 × 36 mm). The top and bottom bands are (35 − 24) ÷ 2 = 5.5 mm, which is 23% of the short side, and sprocket holes and frame numbers are drawn inside them. For a portrait photo the film is turned upright, so the holes run down the left and right.

Common mistakes

  • Full strength plus extra saturation: the Velvia 50 and Ektar 100 looks are already highly saturated, and raising the saturation slider on top makes skies and skin look unreal. For a saturated film, start from 60 to 80% strength.
  • A photo from a messaging app shows today's date: photo data can be removed when a picture passes through a messaging app or social network. Change the date in the date field to the real one, or open the original file.
  • Setting grain on a small screen only: as the PGI table above shows, grain is easier to see the larger you view it. Open the saved file at its real size and check.
  • Posting a bordered photo to a square slot: where photos are cropped to a square, the wide bottom margin of the instant border or the film holes may be cut off.
  • An HEIC photo won't open: this tool works only with images the browser itself can decode, and HEIC support differs from browser to browser. If it doesn't open, convert it to JPG first.

Limits and cautions

  • The 18 films are approximate curves set from what the makers say about each film. They are not a simulation computed from a film's spectral sensitivity or characteristic curve data, and real film color varies with exposure, development, scanning and printing.
  • Kodak, Portra, Ektar, Gold, UltraMax, Tri-X, Fujifilm, Velvia, Provia and Polaroid are trademarks of their respective companies. This tool has no affiliation with those companies, and the names are used only to say which film's feel is being imitated.
  • Calculation uses the browser canvas defaults (sRGB color space, 8 bits per channel). A wide-gamut photo (Display P3, for example) is converted to sRGB, and very saturated colors can come out a little weaker.
  • The saved size is capped at 4,096 px on the long side, border included, and the original's photo data (camera, location, capture date) is not kept in the saved file.
  • Red bleed around bright lights (halation), lens distortion, soft focus, dust and scratches are not drawn.

Basis: the relevant sentences in the data sheets, product pages and standards below were checked on 2026-10-20. The numbers in the film table and in the example are the same as the tool's calculation.

Sources

Frequently asked questions

Is my photo uploaded to a server?

No. The photo is processed on a canvas inside your browser, and the JPG you save is made on the device you are using. This tool does not send photos to a server, and the photo you opened disappears when you close the page.

Are the colors the same as shooting on real Portra 400 or Velvia 50?

No. They are approximate color curves made from what the makers say (Kodak stresses the skin tones of Portra 400, and Fujifilm the very high color saturation of Velvia 50). Real film color varies with exposure, development, scanning and printing, and this tool does not compute from a film's spectral sensitivity or characteristic curve data.

Does saving make the photo smaller?

It saves at the original size. If the long side, border included, would pass 4,096 px, it is scaled down to fit. That cap avoids cases where a phone browser cannot create a very large canvas. JPG quality is 0.92.

Where does the date stamp get its date?

It reads the capture date (DateTimeOriginal) from the JPEG photo data (Exif), and uses today's date if that data is missing. Photos that passed through a messaging app or social network may have had their photo data removed. You can change the date in the date field, and the English version stamps it in month, day, year order.

Why does each film have a different default grain?

Kodak's data sheets give the Print Grain Index (PGI) to show how visible grain is in a print. For 135 film printed at 4 × 6 inches, Ektar 100 is under 25 and Portra 400 is 37. For films with a published PGI this tool sets the default to (PGI − 15) × 0.8, and for the rest it uses film speed together with the maker's grain description. Once you move the grain slider, that value stays when you switch films.

My iPhone HEIC photo won't open.

Whether HEIC opens depends on the browser. This tool only works with photos the browser itself can open, so if it doesn't open, convert the HEIC to JPG first and then open it.

Does the saved photo keep my location?

No. The JPG is redrawn on a canvas, and the original's photo data (camera, location, capture date) is not copied into it. If you want the capture date to stay on the picture, turn on the date stamp.

The small frames on the film strip look slightly different from the stage.

The strip frames are samples developed with the film's defaults (100% strength, brightness and saturation unchanged), and they have no grain drawn. The stage includes your current strength, grain, vignette, light leak, brightness and saturation, plus the date stamp and border.