Exactly Grain Film Look

Grain Film Look is a photographic style from Exactly AI that emulates the look of analog film photography. It generates images with natural film grain, warm color shifts, and the organic imperfections characteristic of 35mm and medium format film, ideal for editorial photography, vintage aesthetics, and projects that benefit from an authentic, nostalgic film quality.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Midnight Grocery Aisle Drifter

Authentic 35mm film photograph of a solitary young adult paused in a late-night grocery aisle, candid editorial framing, fluorescent supermarket lighting mixed with direct on-camera flash, warm skin tones, greenish highlights from store lights, subtle halation, visible natural film grain, slight motion softness, imperfect focus, nostalgic color cast, scuffed linoleum floor, overstocked shelves with bright packaging, quiet small-town Americana mood, unpolished analog realism, disposable-camera spontaneity
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
referenceImages: [
{
type: 'reference',
image: 'https://assets.runware.ai/assets/inputs/0945347f-862e-4ad2-8e1c-7537671192f6.jpg'
}
],
model: 'exactly:photo@grain-film-look',
positivePrompt: 'Authentic 35mm film photograph of a solitary young adult paused in a late-night grocery aisle, candid editorial framing, fluorescent supermarket lighting mixed with direct on-camera flash, warm skin tones, greenish highlights from store lights, subtle halation, visible natural film grain, slight motion softness, imperfect focus, nostalgic color cast, scuffed linoleum floor, overstocked shelves with bright packaging, quiet small-town Americana mood, unpolished analog realism, disposable-camera spontaneity',
width: 1264,
height: 848
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"referenceImages": [
{
"type": "reference",
"image": "https://assets.runware.ai/assets/inputs/0945347f-862e-4ad2-8e1c-7537671192f6.jpg"
}
],
"model": "exactly:photo@grain-film-look",
"positivePrompt": "Authentic 35mm film photograph of a solitary young adult paused in a late-night grocery aisle, candid editorial framing, fluorescent supermarket lighting mixed with direct on-camera flash, warm skin tones, greenish highlights from store lights, subtle halation, visible natural film grain, slight motion softness, imperfect focus, nostalgic color cast, scuffed linoleum floor, overstocked shelves with bright packaging, quiet small-town Americana mood, unpolished analog realism, disposable-camera spontaneity",
"width": 1264,
"height": 848
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "694f825c-7b10-4d96-9204-70b5d3bf78b2",
"referenceImages": [
{
"type": "reference",
"image": "https://assets.runware.ai/assets/inputs/0945347f-862e-4ad2-8e1c-7537671192f6.jpg"
}
],
"model": "exactly:photo@grain-film-look",
"positivePrompt": "Authentic 35mm film photograph of a solitary young adult paused in a late-night grocery aisle, candid editorial framing, fluorescent supermarket lighting mixed with direct on-camera flash, warm skin tones, greenish highlights from store lights, subtle halation, visible natural film grain, slight motion softness, imperfect focus, nostalgic color cast, scuffed linoleum floor, overstocked shelves with bright packaging, quiet small-town Americana mood, unpolished analog realism, disposable-camera spontaneity",
"width": 1264,
"height": 848
}
]'runware run exactly:photo@grain-film-look \
referenceImages.0.type=reference \
referenceImages.0.image=https://assets.runware.ai/assets/inputs/0945347f-862e-4ad2-8e1c-7537671192f6.jpg \
positivePrompt="Authentic 35mm film photograph of a solitary young adult paused in a late-night grocery aisle, candid editorial framing, fluorescent supermarket lighting mixed with direct on-camera flash, warm skin tones, greenish highlights from store lights, subtle halation, visible natural film grain, slight motion softness, imperfect focus, nostalgic color cast, scuffed linoleum floor, overstocked shelves with bright packaging, quiet small-town Americana mood, unpolished analog realism, disposable-camera spontaneity" \
width=1264 \
height=848{
"taskType": "imageInference",
"taskUUID": "694f825c-7b10-4d96-9204-70b5d3bf78b2",
"referenceImages": [
{
"type": "reference",
"image": "https://assets.runware.ai/assets/inputs/0945347f-862e-4ad2-8e1c-7537671192f6.jpg"
}
],
"model": "exactly:photo@grain-film-look",
"positivePrompt": "Authentic 35mm film photograph of a solitary young adult paused in a late-night grocery aisle, candid editorial framing, fluorescent supermarket lighting mixed with direct on-camera flash, warm skin tones, greenish highlights from store lights, subtle halation, visible natural film grain, slight motion softness, imperfect focus, nostalgic color cast, scuffed linoleum floor, overstocked shelves with bright packaging, quiet small-town Americana mood, unpolished analog realism, disposable-camera spontaneity",
"width": 1264,
"height": 848
}{
"taskType": "imageInference",
"taskUUID": "694f825c-7b10-4d96-9204-70b5d3bf78b2",
"imageUUID": "a1351011-c0e0-40d2-a0fb-d3454ba94b24",
"imageURL": "https://im.runware.ai/image/os/a03d21/ws/3/ii/a1351011-c0e0-40d2-a0fb-d3454ba94b24.jpg",
"seed": 2002185162,
"cost": 0.195
}Backstage Ballet Warmup Corridor

A candid backstage ballet rehearsal scene rendered with a true analog film aesthetic, one dancer warming up in a narrow corridor lined with costume racks and worn plaster walls, scuffed floor, taped markers, duffel bag and spare slippers nearby, gentle motion in the hands and fabric, soft fluorescent overhead light mixing with warm reflected skin tones, subtle underexposure, organic 35mm grain, halation around highlights, slight color fading, authentic editorial fashion photography mood from the late 1990s, unpolished realism, imperfect framing, natural skin texture, quiet anticipation before performance
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
referenceImages: [
{
type: 'reference',
image: 'https://assets.runware.ai/assets/inputs/4f14d539-4792-4081-b2d3-f8c92e17c231.jpg'
}
],
model: 'exactly:photo@grain-film-look',
positivePrompt: 'A candid backstage ballet rehearsal scene rendered with a true analog film aesthetic, one dancer warming up in a narrow corridor lined with costume racks and worn plaster walls, scuffed floor, taped markers, duffel bag and spare slippers nearby, gentle motion in the hands and fabric, soft fluorescent overhead light mixing with warm reflected skin tones, subtle underexposure, organic 35mm grain, halation around highlights, slight color fading, authentic editorial fashion photography mood from the late 1990s, unpolished realism, imperfect framing, natural skin texture, quiet anticipation before performance',
width: 1264,
height: 848
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"referenceImages": [
{
"type": "reference",
"image": "https://assets.runware.ai/assets/inputs/4f14d539-4792-4081-b2d3-f8c92e17c231.jpg"
}
],
"model": "exactly:photo@grain-film-look",
"positivePrompt": "A candid backstage ballet rehearsal scene rendered with a true analog film aesthetic, one dancer warming up in a narrow corridor lined with costume racks and worn plaster walls, scuffed floor, taped markers, duffel bag and spare slippers nearby, gentle motion in the hands and fabric, soft fluorescent overhead light mixing with warm reflected skin tones, subtle underexposure, organic 35mm grain, halation around highlights, slight color fading, authentic editorial fashion photography mood from the late 1990s, unpolished realism, imperfect framing, natural skin texture, quiet anticipation before performance",
"width": 1264,
"height": 848
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "3e2bbdbf-39f6-4177-9fcf-6b40c14c56a2",
"referenceImages": [
{
"type": "reference",
"image": "https://assets.runware.ai/assets/inputs/4f14d539-4792-4081-b2d3-f8c92e17c231.jpg"
}
],
"model": "exactly:photo@grain-film-look",
"positivePrompt": "A candid backstage ballet rehearsal scene rendered with a true analog film aesthetic, one dancer warming up in a narrow corridor lined with costume racks and worn plaster walls, scuffed floor, taped markers, duffel bag and spare slippers nearby, gentle motion in the hands and fabric, soft fluorescent overhead light mixing with warm reflected skin tones, subtle underexposure, organic 35mm grain, halation around highlights, slight color fading, authentic editorial fashion photography mood from the late 1990s, unpolished realism, imperfect framing, natural skin texture, quiet anticipation before performance",
"width": 1264,
"height": 848
}
]'runware run exactly:photo@grain-film-look \
referenceImages.0.type=reference \
referenceImages.0.image=https://assets.runware.ai/assets/inputs/4f14d539-4792-4081-b2d3-f8c92e17c231.jpg \
positivePrompt="A candid backstage ballet rehearsal scene rendered with a true analog film aesthetic, one dancer warming up in a narrow corridor lined with costume racks and worn plaster walls, scuffed floor, taped markers, duffel bag and spare slippers nearby, gentle motion in the hands and fabric, soft fluorescent overhead light mixing with warm reflected skin tones, subtle underexposure, organic 35mm grain, halation around highlights, slight color fading, authentic editorial fashion photography mood from the late 1990s, unpolished realism, imperfect framing, natural skin texture, quiet anticipation before performance" \
width=1264 \
height=848{
"taskType": "imageInference",
"taskUUID": "3e2bbdbf-39f6-4177-9fcf-6b40c14c56a2",
"referenceImages": [
{
"type": "reference",
"image": "https://assets.runware.ai/assets/inputs/4f14d539-4792-4081-b2d3-f8c92e17c231.jpg"
}
],
"model": "exactly:photo@grain-film-look",
"positivePrompt": "A candid backstage ballet rehearsal scene rendered with a true analog film aesthetic, one dancer warming up in a narrow corridor lined with costume racks and worn plaster walls, scuffed floor, taped markers, duffel bag and spare slippers nearby, gentle motion in the hands and fabric, soft fluorescent overhead light mixing with warm reflected skin tones, subtle underexposure, organic 35mm grain, halation around highlights, slight color fading, authentic editorial fashion photography mood from the late 1990s, unpolished realism, imperfect framing, natural skin texture, quiet anticipation before performance",
"width": 1264,
"height": 848
}{
"taskType": "imageInference",
"taskUUID": "3e2bbdbf-39f6-4177-9fcf-6b40c14c56a2",
"imageUUID": "8441d6fb-61ac-4c55-ba36-e5041d47f647",
"imageURL": "https://im.runware.ai/image/os/a23d05/ws/2/ii/8441d6fb-61ac-4c55-ba36-e5041d47f647.jpg",
"seed": 354063978,
"cost": 0.195
}Autumn Train Platform Farewell

A candid 35mm film-style scene on a small rural train platform in late autumn, a young woman in a mustard wool coat holding a paper suitcase while an older man in a dark cap stands near the carriage door, a moment of quiet goodbye without direct eye contact, scattered amber leaves skimming along the platform, faded station signage, muted green train car with worn paint, breath visible in cool morning air, soft overcast daylight, subtle lens softness, natural film grain, warm color shifts, slight halation around highlights, imperfect exposure, understated editorial composition, authentic analog photography aesthetic, intimate nostalgic mood, rich texture, realistic skin tones, documentary realism
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'exactly:photo@grain-film-look',
positivePrompt: 'A candid 35mm film-style scene on a small rural train platform in late autumn, a young woman in a mustard wool coat holding a paper suitcase while an older man in a dark cap stands near the carriage door, a moment of quiet goodbye without direct eye contact, scattered amber leaves skimming along the platform, faded station signage, muted green train car with worn paint, breath visible in cool morning air, soft overcast daylight, subtle lens softness, natural film grain, warm color shifts, slight halation around highlights, imperfect exposure, understated editorial composition, authentic analog photography aesthetic, intimate nostalgic mood, rich texture, realistic skin tones, documentary realism',
width: 1264,
height: 848
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "exactly:photo@grain-film-look",
"positivePrompt": "A candid 35mm film-style scene on a small rural train platform in late autumn, a young woman in a mustard wool coat holding a paper suitcase while an older man in a dark cap stands near the carriage door, a moment of quiet goodbye without direct eye contact, scattered amber leaves skimming along the platform, faded station signage, muted green train car with worn paint, breath visible in cool morning air, soft overcast daylight, subtle lens softness, natural film grain, warm color shifts, slight halation around highlights, imperfect exposure, understated editorial composition, authentic analog photography aesthetic, intimate nostalgic mood, rich texture, realistic skin tones, documentary realism",
"width": 1264,
"height": 848
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "9411d2e3-ce16-43fa-9051-bf4165a7bf9e",
"model": "exactly:photo@grain-film-look",
"positivePrompt": "A candid 35mm film-style scene on a small rural train platform in late autumn, a young woman in a mustard wool coat holding a paper suitcase while an older man in a dark cap stands near the carriage door, a moment of quiet goodbye without direct eye contact, scattered amber leaves skimming along the platform, faded station signage, muted green train car with worn paint, breath visible in cool morning air, soft overcast daylight, subtle lens softness, natural film grain, warm color shifts, slight halation around highlights, imperfect exposure, understated editorial composition, authentic analog photography aesthetic, intimate nostalgic mood, rich texture, realistic skin tones, documentary realism",
"width": 1264,
"height": 848
}
]'runware run exactly:photo@grain-film-look \
positivePrompt="A candid 35mm film-style scene on a small rural train platform in late autumn, a young woman in a mustard wool coat holding a paper suitcase while an older man in a dark cap stands near the carriage door, a moment of quiet goodbye without direct eye contact, scattered amber leaves skimming along the platform, faded station signage, muted green train car with worn paint, breath visible in cool morning air, soft overcast daylight, subtle lens softness, natural film grain, warm color shifts, slight halation around highlights, imperfect exposure, understated editorial composition, authentic analog photography aesthetic, intimate nostalgic mood, rich texture, realistic skin tones, documentary realism" \
width=1264 \
height=848{
"taskType": "imageInference",
"taskUUID": "9411d2e3-ce16-43fa-9051-bf4165a7bf9e",
"model": "exactly:photo@grain-film-look",
"positivePrompt": "A candid 35mm film-style scene on a small rural train platform in late autumn, a young woman in a mustard wool coat holding a paper suitcase while an older man in a dark cap stands near the carriage door, a moment of quiet goodbye without direct eye contact, scattered amber leaves skimming along the platform, faded station signage, muted green train car with worn paint, breath visible in cool morning air, soft overcast daylight, subtle lens softness, natural film grain, warm color shifts, slight halation around highlights, imperfect exposure, understated editorial composition, authentic analog photography aesthetic, intimate nostalgic mood, rich texture, realistic skin tones, documentary realism",
"width": 1264,
"height": 848
}{
"taskType": "imageInference",
"taskUUID": "9411d2e3-ce16-43fa-9051-bf4165a7bf9e",
"imageUUID": "31512de7-904d-4912-8f1b-18eb197f8c43",
"imageURL": "https://im.runware.ai/image/os/a13d12/ws/2/ii/31512de7-904d-4912-8f1b-18eb197f8c43.jpg",
"seed": 1761830881,
"cost": 0.195
}Winter Seaside Boxing Ring

An improvised boxing ring set up on a windswept seaside pier in winter, two amateur fighters sparring while bundled spectators watch from mismatched folding chairs, wool coats, knit caps, peeling paint on wooden planks, choppy gray water beyond, gulls crossing the sky, hand-painted corner signs, breath visible in the cold air, documentary editorial photography, authentic analog 35mm film look, natural film grain, subtle halation, soft contrast, warm color shifts against cool weather, slightly imperfect framing, candid moment, tactile textures, scanned film realism
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'exactly:photo@grain-film-look',
positivePrompt: 'An improvised boxing ring set up on a windswept seaside pier in winter, two amateur fighters sparring while bundled spectators watch from mismatched folding chairs, wool coats, knit caps, peeling paint on wooden planks, choppy gray water beyond, gulls crossing the sky, hand-painted corner signs, breath visible in the cold air, documentary editorial photography, authentic analog 35mm film look, natural film grain, subtle halation, soft contrast, warm color shifts against cool weather, slightly imperfect framing, candid moment, tactile textures, scanned film realism',
width: 1264,
height: 848
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "exactly:photo@grain-film-look",
"positivePrompt": "An improvised boxing ring set up on a windswept seaside pier in winter, two amateur fighters sparring while bundled spectators watch from mismatched folding chairs, wool coats, knit caps, peeling paint on wooden planks, choppy gray water beyond, gulls crossing the sky, hand-painted corner signs, breath visible in the cold air, documentary editorial photography, authentic analog 35mm film look, natural film grain, subtle halation, soft contrast, warm color shifts against cool weather, slightly imperfect framing, candid moment, tactile textures, scanned film realism",
"width": 1264,
"height": 848
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "66e2b7d9-c2ab-4354-9403-3b69a5ad27ce",
"model": "exactly:photo@grain-film-look",
"positivePrompt": "An improvised boxing ring set up on a windswept seaside pier in winter, two amateur fighters sparring while bundled spectators watch from mismatched folding chairs, wool coats, knit caps, peeling paint on wooden planks, choppy gray water beyond, gulls crossing the sky, hand-painted corner signs, breath visible in the cold air, documentary editorial photography, authentic analog 35mm film look, natural film grain, subtle halation, soft contrast, warm color shifts against cool weather, slightly imperfect framing, candid moment, tactile textures, scanned film realism",
"width": 1264,
"height": 848
}
]'runware run exactly:photo@grain-film-look \
positivePrompt="An improvised boxing ring set up on a windswept seaside pier in winter, two amateur fighters sparring while bundled spectators watch from mismatched folding chairs, wool coats, knit caps, peeling paint on wooden planks, choppy gray water beyond, gulls crossing the sky, hand-painted corner signs, breath visible in the cold air, documentary editorial photography, authentic analog 35mm film look, natural film grain, subtle halation, soft contrast, warm color shifts against cool weather, slightly imperfect framing, candid moment, tactile textures, scanned film realism" \
width=1264 \
height=848{
"taskType": "imageInference",
"taskUUID": "66e2b7d9-c2ab-4354-9403-3b69a5ad27ce",
"model": "exactly:photo@grain-film-look",
"positivePrompt": "An improvised boxing ring set up on a windswept seaside pier in winter, two amateur fighters sparring while bundled spectators watch from mismatched folding chairs, wool coats, knit caps, peeling paint on wooden planks, choppy gray water beyond, gulls crossing the sky, hand-painted corner signs, breath visible in the cold air, documentary editorial photography, authentic analog 35mm film look, natural film grain, subtle halation, soft contrast, warm color shifts against cool weather, slightly imperfect framing, candid moment, tactile textures, scanned film realism",
"width": 1264,
"height": 848
}{
"taskType": "imageInference",
"taskUUID": "66e2b7d9-c2ab-4354-9403-3b69a5ad27ce",
"imageUUID": "24dc6df8-99a5-4fcb-9aea-fdd6a5b1547e",
"imageURL": "https://im.runware.ai/image/os/a17d13/ws/2/ii/24dc6df8-99a5-4fcb-9aea-fdd6a5b1547e.jpg",
"seed": 592621060,
"cost": 0.195
}