---
title: "Film look grade — Meleon Skill"
description: "Give any photo a convincing analogue film look on your own computer, free for every photo. Four looks - Kodak Portra 400 warmth, Cinestill 800T night tones with red halation, Fuji Pro 400H pastels and a cinematic teal and amber grade - each with real grain, halation, soft highlight roll-off and a gentle vignette. The framing and content stay exactly as shot. Video clips can be graded the same way with ffmpeg."
url: https://meleon.ai/skills/film-look-grade/
author: "Meleon AI"
---

# Film look grade

> Give any photo a real film look, graded locally in seconds.

- Type: Image Skill
- Category: Social posts & covers
- Version: 1.0.0 (updated 2026-10-16)
- Made by: Meleon AI (official)
- Price: Free to download. Outside costs: None for grading, which runs locally. The optional relight step for a badly lit photo sends one request to an image-edit model with your own FAL_KEY, about $0.07 per photo.
- Runs in: Claude Code, Codex and Cursor
- Page: https://meleon.ai/skills/film-look-grade/
- Download: https://meleon.ai/downloads/film-look-grade.zip
- Manifest: https://meleon.ai/skills/film-look-grade.json

## What it does

Give any photo a convincing analogue film look on your own computer, free for every photo. Four looks - Kodak Portra 400 warmth, Cinestill 800T night tones with red halation, Fuji Pro 400H pastels and a cinematic teal and amber grade - each with real grain, halation, soft highlight roll-off and a gentle vignette. The framing and content stay exactly as shot. Video clips can be graded the same way with ffmpeg.

## Made for

- Creators
- Photographers
- Social teams
- Brands
- Agencies

## Before you start

- You give it: Any photo or clip
- You need: Node 20.9 or newer and sharp (run npm install sharp in the Skill folder) for photos; ffmpeg 5 or newer for video clips.
- Cost per run: None for grading, which runs locally. The optional relight step for a badly lit photo sends one request to an image-edit model with your own FAL_KEY, about $0.07 per photo.
- Makes: Graded JPEG, WebP or PNG at the original size; MP4 for video clips

## Install

Run the command for your agent in a terminal. It downloads https://meleon.ai/downloads/film-look-grade.zip and unzips it into the agent's personal Skills folder.

### Claude Code

```sh
mkdir -p ~/.claude/skills && curl -fsSL https://meleon.ai/downloads/film-look-grade.zip -o /tmp/film-look-grade.zip && unzip -o /tmp/film-look-grade.zip -d ~/.claude/skills
```

Then ask Claude Code to use it: `/film-look-grade`.

### Codex

```sh
mkdir -p ~/.agents/skills && curl -fsSL https://meleon.ai/downloads/film-look-grade.zip -o /tmp/film-look-grade.zip && unzip -o /tmp/film-look-grade.zip -d ~/.agents/skills
```

Then ask Codex to use it: `$film-look-grade`.

### Cursor

```sh
mkdir -p ~/.cursor/skills && curl -fsSL https://meleon.ai/downloads/film-look-grade.zip -o /tmp/film-look-grade.zip && unzip -o /tmp/film-look-grade.zip -d ~/.cursor/skills
```

Then ask Cursor to use it: `/film-look-grade`.

## Example request

```text
/film-look-grade my travel photos in a warm Portra look
```

In Codex, start with `$film-look-grade` instead of `/film-look-grade`.

## Files

Every file in the package, readable before you install:

- [SKILL.md](https://meleon.ai/skills/film-look-grade/files/SKILL.md) (7.0 KB)
- [references/film-stocks.md](https://meleon.ai/skills/film-look-grade/files/references/film-stocks.md) (10.6 KB)
- [references/output-spec.md](https://meleon.ai/skills/film-look-grade/files/references/output-spec.md) (1.9 KB)
- [assets/example-input.jpg](https://meleon.ai/skills/film-look-grade/files/assets/example-input.jpg) (207.9 KB)
- [assets/generation-input.json](https://meleon.ai/skills/film-look-grade/files/assets/generation-input.json) (539 bytes)
- [assets/presets.json](https://meleon.ai/skills/film-look-grade/files/assets/presets.json) (3.1 KB)
- [assets/preview.webp](https://meleon.ai/skills/film-look-grade/files/assets/preview.webp) (281.9 KB)
- [assets/prompt-template.md](https://meleon.ai/skills/film-look-grade/files/assets/prompt-template.md) (574 bytes)
- [scripts/build-relight-input.mjs](https://meleon.ai/skills/film-look-grade/files/scripts/build-relight-input.mjs) (2.3 KB)
- [scripts/grade.mjs](https://meleon.ai/skills/film-look-grade/files/scripts/grade.mjs) (18.8 KB)

## Versions

- 1.0.0 (2026-10-16)

## Instructions (SKILL.md)

Use this skill when someone wants a photo (or a short clip) to look like it was shot on film: warm Portra skin, Cinestill night halos, airy Fuji pastels, or the teal and amber grade of a travel film. The grade is done by `scripts/grade.mjs` on the person's own computer, so it costs nothing per photo and never changes what is in the picture. Only the colour, tone, grain and glow change.

### What you need

- The photo, as a local JPEG, PNG or WebP file (convert HEIC to JPEG first). Or a video clip (MP4, MOV, WebM) for the video path.
- The look they want: `portra-400`, `cinestill-800t`, `fuji-400h` or `teal-amber`. If they describe a mood instead ("warm and nostalgic", "moody night", "soft and airy", "like a travel film"), pick from the table in `references/film-stocks.md`. If they are unsure, render all four and let them choose.
- Optional: how strong (0 to 1, default 1) and how much grain (0 to 2, default 1).

If the photo is missing, ask for it. Never invent or replace the photo.

### What you make

- One graded image, the same size and framing as the original, as JPEG (default), WebP or PNG. Location data and other metadata are stripped.
- With `--all`, one file per look so the person can pick.
- For a clip: one graded MP4 (H.264, same size and length, audio kept).

### How to run it

1. **Look at the photo first** (open it with your image tool). Note the light (daylight, golden hour, overcast, night, mixed indoor), the skin tones, and anything a grade can't fix. Read `references/film-stocks.md` and pick the look. Say which look you chose and why in one line.
2. **Badly lit photo? (optional, paid)** A grade can't rescue a face lost in deep shadow, a blown-out sky over half the frame, or heavy night noise. Only then, offer the relight step and its cost (about $0.07) and wait for a yes:
   - If the photo shows people, ask the person whether it is their own photo or the people in it agreed to it being edited, and quote their answer in your reply. If they say no or don't answer, skip the relight and grade the photo as it is.
   - Run `node scripts/build-relight-input.mjs --photo <local file or https URL> --out relight.json`. A local file is embedded in the request, so nothing has to be uploaded publicly. If you did upload a person's photo to get a public URL, delete it once the result is back.
   - POST the `input` from relight.json to fal model `openai/gpt-image-2/edit` (`https://queue.fal.run/openai/gpt-image-2/edit`) with the user's own FAL_KEY in the `Authorization: Key ...` header, then poll the returned `status_url` and fetch `response_url`; the image is at `images[0].url`. The Skill never stores keys. Without a key, paste the prompt from `assets/prompt-template.md` and the photo into any GPT-Image-class image editor. The alternative on fal, `fal-ai/nano-banana-pro/edit`, costs about $0.15 per image and takes the same `prompt` and `image_urls`, with `aspect_ratio: "auto"` and `resolution: "1K"` instead of `image_size` and `quality`.
   - Put the relit photo beside the original. If faces, text or objects changed, discard it and grade the original instead.
3. **Grade it.** Photos need Node 20.9 or newer and sharp: run `npm install sharp` in the Skill folder once. Then:
   - `node scripts/grade.mjs --input photo.jpg --preset teal-amber --output photo-film.jpg`
   - To compare looks: `node scripts/grade.mjs --input photo.jpg --all --output-dir graded/`
   - Softer: add `--strength 0.6`. Less grain: `--grain 0.5`. No grain: `--grain 0`.
   - A video clip: `node scripts/grade.mjs --input clip.mp4 --preset cinestill-800t --output clip-film.mp4` (needs ffmpeg). SDR clips only: an HDR clip (most phones record HDR by default) is refused with a message; export an SDR copy first (see `references/film-stocks.md`).
   - `--list` prints the looks. `--all` goes with `--output-dir` only (no `--output` or `--preset`). The defaults (strength 1, grain 1, seed 7) are the settings that made `assets/preview.webp` from `assets/example-input.jpg` with `teal-amber`.
4. **Check it** against `references/output-spec.md`: view the original and the graded file side by side. Skin should look like skin (not orange, grey or green), whites should roll off softly, and the grain should look like film, not digital noise.
5. **If it fails, at most 3 attempts.** Change one thing per attempt and say what you changed: first the strength, then the grain, then a different look (or one preset value, using the fixes in `references/film-stocks.md`). View each result beside the original. Then return the best one and say what still differs from what they asked for.
6. **Return** the graded file, the look and settings you used, and the command, so they can grade the rest of the set the same way.

### Files

- `references/film-stocks.md`: what each film stock looks like, which photos it suits, every preset value explained, and fixes for common problems (skin tones, night, snow, product colours, sets of photos, video).
- `references/output-spec.md`: sizes, formats and the pass/fail checklist.
- `assets/presets.json`: the four looks. Copy one under a new name to make a custom look.
- `assets/prompt-template.md`: the relight prompt for the optional paid step.
- `assets/generation-input.json`: the grade defaults and the relight model, settings and approximate cost.
- `assets/example-input.jpg` and `assets/preview.webp`: a phone photo and the same photo graded with `teal-amber` at the defaults.
- `scripts/grade.mjs`: grades a photo (sharp) or a clip (ffmpeg). It calls no API.
- `scripts/build-relight-input.mjs`: prints the relight request for the optional step. It calls no API.

## Related

- [Viral video thumbnail](https://meleon.ai/skills/viral-video-thumbnail.md): Turn a portrait into a bold video thumbnail.
- [Carousel story set](https://meleon.ai/skills/carousel-story-set.md): Turn one product photo into a five-slide Instagram carousel.
- [Product ad headline](https://meleon.ai/skills/product-ad-headline.md): Turn a product photo into a finished ad with exact headline text.
- [All Meleon Skills](https://meleon.ai/skills/) (index as JSON: https://meleon.ai/skills.json; site guide: https://meleon.ai/llms.txt)
