Motif

One command line over every image model. You name the job; Motif picks the model, prices the run before it spends and hands back the file. It runs on fal today, and the same commands will carry other providers.

npm install -g @howells/motif-cli
Three amber glass bottles and a white bowl on a stone shelf in raking daylight
motif "amber apothecary bottles and a stoneware bowl on a stone shelf"

Three bottles and a bowl, made from the prompt.

Every command

One verb per job. Motif chooses the model and prices the run before it spends anything.

Make

generateMake an image from a prompt
varyVariations of an image
series runA consistent set from a theme
sheetA captioned contact sheet
animateTurn an image into a video
tileA seamlessly tiling texture
meshA textured 3D mesh

Edit

eraseRemove something, fill the gap
cutoutRemove the background
reframeExtend to a new aspect ratio
upscaleMake it larger
restoreFix noise, blur, damage or colour
relightRelight a photo
restyleRedraw in a reference's style
try-onDress a person in a garment
layersSplit into transparent layers
vectorizeTrace to a clean SVG

Understand

segmentMask a named thing
askCaption, count, find or ask
mapDepth, edge, normal or pose
materialPBR maps from a photo
motif generate

Make an image from a prompt

A celadon vase made straight onto a transparent background, with no cut-out step.

motif "a ceramic vase with a pale celadon glaze" --transparent
A pale celadon vase on a transparent background
motif vary

Variations of an image

Three more takes of the same vase. No prompt needed: the picture is the instruction.

motif vary vase.jpg -n 3
A cream ceramic vase on a linen cloth, first variation
The same vase, second variation
The same vase, third variation
motif tile

A seamlessly tiling texture

The tile on the left, the same file repeated nine times on the right. The joins do not show.

motif tile "Cotswold dry stone wall with lichen"
A Cotswold dry stone wall with lichen, generated as a seamless tile

Looks

Add one to any prompt with --look. A look sets the medium, the finish and the framing.

Pigment jars and folded cloth on a scrubbed wooden table in daylight
Quiet editorial--look editorialDaylight, restrained palette, space around the subject.
A watercolour and pencil drawing of a dark green kitchen
Palette drawing--look drawingPencil under flat washes, the drawing still showing through.
An aged printed poster with foxing and worn edges
Period ephemera--look ephemeraPrinted paper that has been handled: foxing, wear, a used press.

Moods

One kitchen, one prompt, one seed. Only the light changes.

The same kitchen by lamplight and candles, the stove lit
motif "a family kitchen with a scrubbed oak table" --look lived-in --mood lamplit --seed 4217

Hold to compare

The big image is the result. The small one sitting on it is what went in. Press and hold the source to see it full size; let go and the result comes back.

A person in a plaster-walled room wearing the rust chore jacket
A rust-coloured chore jacket photographed flat

before--garment

What runs where

Every command runs on fal today, choosing from the number of models shown. Underneath the commands, the SDK can call four providers itself, for making and editing an image, so a prompt can go to Google, OpenAI or Replicate instead.

CommandfalOpenAI, Google, Replicate
generateMake an image from a prompt31modelsMake, edit
varyVariations of an image20modelsMake, edit
animateTurn an image into a video2modelsNot available
eraseRemove something, fill the gap7modelsNot available
cutoutRemove the background6modelsNot available
reframeExtend to a new aspect ratio4modelsNot available
upscaleMake it larger9modelsNot available
restoreFix noise, blur, damage or colour7modelsNot available
relightRelight a photo3modelsNot available
restyleRedraw in a reference's style1modelNot available
try-onDress a person in a garment1modelNot available
layersSplit into transparent layers3modelsNot available
vectorizeTrace to a clean SVG2modelsNot available
segmentMask a named thing7modelsNot available
askCaption, count, find or ask6modelsNot available
mapDepth, edge, normal or pose13modelsNot available
materialPBR maps from a photo2modelsNot available
tileA seamlessly tiling texture2modelsNot available
meshA textured 3D mesh5modelsNot available
series runA consistent set from a themeSame 31 as generateNot available
sheetA captioned contact sheetNo model; made hereNot available

Make, edit means the SDK calls that provider directly, with that provider's own key, and only for those two jobs. Transparent output already works this way, running on OpenAI rather than fal. Everything else goes through fal, which hosts models from Google, OpenAI, ByteDance, Ideogram, Topaz and others under one key.

For agents

Every command answers --format json, prices a run with --dry-run and fails with a coded error.

Price it before it spendsmotif erase "the bottle" shelf.jpg --dry-run
{"cost":0.024,"costBasis":"projected","valid":true}
Wrong verb, exit 2motif remove "the car" street.jpg
Unknown command "remove".
Did you mean: erase, cutout, segment?
Every command, as JSONmotif --describe tasks --format json
{"task":"erase","summary":"Remove something
and fill the gap",
"tiers":["fast","balanced","quality"]}