Create anything. Locally.

Generate images, video, worlds, 3D, music, speech, and sound. Train LoRAs. Inspect scenes. Use the Mac app, Linux CLI, or local API.

Downloads Linux QuickStart GitHub source Open source under MIT · release assets listed live
macOS app Linux x86_64 Linux aarch64 CUDA DGX Spark Blackwell OpenAI-compatible API Relay nodes Official plugins

Install paths

One runtime. Multiple hosts.

mere.run runs on Apple Silicon and headless Linux. macOS gets the app and CLI; Linux gets x86_64 packages and an arm64 CUDA build for DGX Spark-class Blackwell hosts.

macOS Apple Silicon

The signed DMG includes the SwiftUI Studio, CLI, optional Codex skill, and Metal runtime.

  • Full app and CLI on Apple Silicon.
  • Signed, notarized, versioned DMG.
  • Best-supported creative workflow.

Linux x86_64 CLI

Portable tarball and Debian package for headless x86_64 systems.

  • Tarball, .deb, runtime libraries, and checksums verified at release.
  • CPU CI baseline; CUDA validated separately.
  • x86 CUDA host testing covers GPUs up to 16 GB VRAM.
For server and workstation Linux lanes that do not need the Mac app shell.
Agent-assisted install

Choose the host. Copy the prompt.

Copy one prompt into your coding agent. It selects the matching release asset, installs in your home directory, and verifies the CLI. A hardware mismatch stops the install.

  • macOS uses the signed DMG and can install the optional use-mere-run skill.
  • Linux x86_64/amd64 uses the portable CLI tarball from GitHub Releases.
  • Linux arm64/aarch64 is the DGX Spark / Blackwell CUDA lane and checks for a real CUDA host first.
agent-install-macos.txt
You are helping me install mere.run locally on this Mac.

Rules:
- Do not use sudo.
- Do not edit shell profiles unless I ask.
- Prefer user-local install paths.
- Read release metadata from https://mere.run/.well-known/mere-run/release.json.
- Stop and explain if the latest macOS DMG URL is missing or the DMG mount fails.

Steps:
1. Resolve the latest macOS DMG URL:
   release_json="$(curl -fsSL "https://mere.run/.well-known/mere-run/release.json")"
   dmg_url="$(printf '%s' "$release_json" | python3 -c 'import json,sys; data=json.load(sys.stdin); print((data.get("downloads") or {}).get("macos_dmg") or data.get("download_url") or "")')"
   test -n "$dmg_url" || { echo "No macOS DMG URL found in release metadata."; exit 1; }
2. Download the DMG to a temporary folder:
   work_dir="$(mktemp -d)"
   dmg_path="$work_dir/mere-run.dmg"
   curl -fL "$dmg_url" -o "$dmg_path"
3. Mount the DMG, or reuse it if it is already mounted:
   hdiutil attach -nobrowse -readonly "$dmg_path"
   volume=""
   for candidate in "/Volumes/mere.run" /Volumes/mere.run* /Volumes/MereRun* "/Volumes/Mere Run"*; do
     if [ -d "$candidate" ] && [ -x "$candidate/.mere-run/install.sh" ]; then
       volume="$candidate"
       break
     fi
   done
   if [ -z "$volume" ]; then
     echo "Mounted the DMG, but could not find the mere.run volume."
     hdiutil info
     exit 1
   fi
4. Verify the mounted volume contains MereRun.app plus .mere-run/install.sh:
   test -d "$volume/MereRun.app"
   test -x "$volume/.mere-run/install.sh"
5. If /Applications/MereRun.app is missing, copy the app there:
   if [ ! -d "/Applications/MereRun.app" ]; then
     ditto "$volume/MereRun.app" "/Applications/MereRun.app"
   else
     echo "/Applications/MereRun.app already exists. Leaving it in place."
   fi
   If the copy is denied, tell me to drag MereRun.app to Applications, then continue with CLI and skill setup.
6. Install the CLI to ~/.local/bin/mere.run:
   mkdir -p "$HOME/.local/bin"
   MERERUN_INSTALL_BIN_DEST="$HOME/.local/bin/mere.run" "$volume/.mere-run/install.sh"
7. Install the bundled use-mere-run Codex skill if it exists:
   skill_source=""
   for candidate in "$volume/MereRun.app/Contents/Resources/skills/use-mere-run" "$volume/.mere-run/skills/use-mere-run"; do
     if [ -d "$candidate" ]; then
       skill_source="$candidate"
       break
     fi
   done
   if [ -n "$skill_source" ]; then
     mkdir -p "$HOME/.codex/skills"
     rm -rf "$HOME/.codex/skills/use-mere-run"
     ditto "$skill_source" "$HOME/.codex/skills/use-mere-run"
   fi
8. Verify the CLI:
   "$HOME/.local/bin/mere.run" --help
   "$HOME/.local/bin/mere.run" model capabilities --recommended
9. Pull the starter image model:
   "$HOME/.local/bin/mere.run" model pull image-zimage-nano
10. Generate and open the first image:
   "$HOME/.local/bin/mere.run" image generate --model image-zimage-nano --prompt "a ceramic mug in soft morning light on a walnut desk" --width 1024 --height 1024 --steps 8 --seed 2026 --output "$HOME/Desktop/mere-first-image.png"
   open "$HOME/Desktop/mere-first-image.png"

At the end, tell me where the app, CLI, skill, model store, downloaded DMG, mounted volume, and image are.

One toolkit. Local.

Create, train, reconstruct, automate, and serve from one local CLI.

CREATE
Images & edits

Generate and edit with Klein, ZImage, Bonsai, HiDream, Krea 2, and Ideogram. Supports reference images, image-to-image, and API edits.

mere.run image generate --model image-krea2-turbo --steps 8
TRAIN
LoRA & validation

Train Klein and Krea 2 image adapters or text adapters from SFT JSONL. Preflight checks the plan before loading a model.

mere.run image train-lora --data ./dataset --output ./style.safetensors --preflight --json
RECONSTRUCT
3D Reconstruction

Turn one image into GLB, OBJ, PLY, or PBR voxels with MLX TRELLIS.2. TripoSR and InstantMesh cover faster drafts.

mere.run vision image-to-3d-trellis2 object.png -o ./mesh
CREATE
Video & subject animation

Generate with LTX 2.3 or Wan, animate masked subjects with SCAIL-2, and use native Cosmos3 Edge for generation, reasoning, and action dynamics.

mere.run video animate "keep the subject dancing" --reference subject.png --reference-mask subject-mask.png --driving-video motion.mp4 --driving-mask motion-mask.mp4
EXPLORE
Persistent worlds

Keep DreamX or Cosmos world state alive across camera-controlled transitions, or run a resident video session for repeated shots.

mere.run world serve --backend cosmos3 --model video-cosmos3-edge-mlx --state-directory ./world-state
RECONSTRUCT
Geometry & VFX

Recover metric depth, normals, point clouds, multi-view geometry, video depth, pose, and optical flow.

mere.run vision geometry plate.png -o ./geo --json
CREATE
Music

Generate tracks, covers, remixes, and realtime sessions. Transcribe a finished mix to instrument-separated MIDI with MuScriptor.

mere.run music transcribe ./song.wav --format midi
CREATE
SFX & video-to-audio

Generate effects with Woosh or add motion-synced audio to video with MMAudio. Includes CLAP scoring and codec round trips.

mere.run sfx video generate "harbor foley" clip.mp4 --model sfx-mmaudio-large-44k-v2
THINK
Chat & code

Run Gemma, Qwen, LFM, DeepSeek, and GGUF coding models with memory-aware presets.

mere.run text code --model text-code-north-mini --prompt "write a Swift parser"
UNDERSTAND
Embeddings & privacy

Build local RAG with Qwen3 embeddings. Anonymize PII before text reaches another tool.

mere.run text anonymize "Alice emailed alice@example.com"
INTERACT
Speech & live ASR

Synthesize with Qwen3, transcribe with Parakeet or Qwen3, and stream microphone transcription with reusable profiles.

mere.run speech listen --jsonl
SEE
Vision & OCR

Caption, inspect, ground, segment, and OCR images with Falcon Perception, SAM 3.1, Infinity, and LightOn OCR.

mere.run vision ocr ./scan.png --quiet
SEE
Tracking

Track prompted objects in video files or a live camera feed.

mere.run vision track-live --prompt "a person" --output ./live.mp4
ANALYZE
Face & identity

Detect and analyze faces locally, then produce identity embeddings for matching workflows without uploading source media.

mere.run vision face detect ./portrait.png --include-embeddings --json
MANAGE
Models & runtime

Inspect runtime status, estimate memory fit, pull or garbage-collect models, install verified adapters, and run installed-model quality gates.

mere.run adapter pull scail2-lightx2v-4step
SERVE
API & Open WebUI

Serve OpenAI-compatible chat, embeddings, images, edits, speech, and transcription, then connect a local Open WebUI.

mere.run open-webui quickstart --pull
AUTOMATE
Portable graphs

Author immutable workflow graphs, preflight them, then run the same plan locally, over SSH, or through Relay with durable material references.

mere.run graph run workflow.json --inputs-json inputs.json --run-dir ./runs/local
OPERATE
Executors & run lifecycle

Inspect local, SSH, and Relay executors; watch, fetch, cancel, or retry remote runs; and preserve artifacts and provenance locally.

mere.run run watch relay://fleet/<run-id> --json-stream
GUIDE
Setup, guides & agents

Use packaged offline cookbooks, guided machine setup, masked persistent configuration, and optional local coding-agent onboarding.

mere.run guide --list
mere.

Commands are grouped by modality and designed for scripts.

~/projects · zsh
$ mere.run model pull image-3d-trellis2-4b --preflight --json download size, disk, and license reported before any bytes move
$ mere.run vision image-to-3d-trellis2 ./object.png --seed 43 -o ./mesh sealed PBR mesh · GLB + OBJ + PLY + PBR voxels + run manifest
$ mere.run image train-lora --data ./dataset --output ./style.safetensors --preflight --json typed plan first; drop --preflight to train with loss CSV and checkpoints
$ mere.run video cosmos3 "navigate the room" --mode text-to-video --output ./world.mp4 native Cosmos3 Edge generation and action dynamics
$ mere.run music transcribe ./mix.wav --format midi -o ./mix.mid MuScriptor instrument-separated MIDI from a full mix
$ mere.run graph run workflow.json --inputs-json inputs.json --run-dir ./runs/local immutable graph → portable execution → durable artifacts
AGENT NATIVE

Plan it.
Run it. Inspect it.

--preflight --json reports downloads, memory fit, and the exact work before loading a model. Immutable graphs run through local, SSH, or Relay executors while approved runs keep artifacts, diagnostics, and next actions on disk.

  • Preflight for training, video, SFX, tracking, serving, and model pulls
  • Reusable JSON run plans
  • Searchable run directories with manifests, checksums, and provenance
  • Model recommendations based on the machine
  • Resident API models with admission control and continuous batching
  • Portable graphs with watch, fetch, resume, and material provenance
agent session · preflight → approve → execute → inspect
$ mere.run image train-lora --data ./dataset -o ./style.safetensors --preflight --json "status": "ok" · "24 usable pair(s), ready to train." · plan typed out, nothing loaded
> plan looks right — approved
$ mere.run image train-lora --data ./dataset -o ./style.safetensors 144 layers injected · 250/250 steps · adapter + 4 checkpoints + loss CSV saved
$ mere.run run inspect ./run --json "status": "ok" · 41 artifacts · diagnostics + next actions
macOS Studio

The CLI,
with controls.

Studio uses the same runtime and model store as the CLI. Check whether a model fits, start a run, watch its progress, and find the outputs on disk.

  • Fit and download size before pulling
  • Load, pin, TTL, and runtime controls
  • Generation progress and run history
  • Included in the signed macOS DMG

Models sheet shown here: 47 installed, 63 known.

MereRun Studio on macOS: the Models sheet listing installed models with sizes and readiness, runtime settings with TTL and pinning, and the create sidebar navigation.
Mere apps

Apps declare what they need.

The public Mere CLI finds or installs mere.run, then pulls the models an app declares. It can use an existing binary, build from source, or install a verified release.

  • mere setup mere-run prepares the runtime.
  • mere setup mere-run models --app media pulls Media's ASR and embedding models.
  • Inference stays on the user's machine.
mere apps · setup
$ npm install -g @merekit/cli installs the Mere CLI
$ mere setup mere-run --json runtime ready · existing binary, source build, or verified release artifact
$ mere setup mere-run models --app media --json speech-asr-parakeet · text-embed-qwen3-0.6b
$ mere media process ./interview.m4a --transcribe --embed transcript + searchable segments generated locally
Three open-source pillars

Add machines.
Add workflows.

mere.run is the inference runtime. Around it, Relay pools machines, Graph Studio turns portable graphs into visual workflows, and official plugins package production integrations. All three are MIT-licensed, with dedicated product sites and public source.

01 Relay + Nodes

Pool the machines you already have.

Install mere.run node on a Mac or Linux box. It reports its models and availability to your account, then accepts work through an outbound connection.

  • One private compute pool per mere.world account
  • Balanced, fastest, or power-efficient scheduling
  • Node downloads for macOS, Linux x86_64, and Linux arm64
  • Open source under the MIT License
install node approve machine send work
02 Graph Studio

Compose on a canvas. Run on your GPUs.

Author typed image, video, audio, and text workflows visually, then execute the same portable graph on your workstation, over SSH, or through Relay.

  • Easy and Pro modes over one graph document
  • Executor-aware preflight, runs, and artifact inspection
  • Hosted Studio plus an offline desktop app
  • Open source under the MIT License
author preflight run on your GPUs
03 Official plugins

Install the workflow you need.

Plugins handle plans, artifacts, and cleanup around mere.run inference.

  • VFX, realtime music, ShotGrid, redaction, automation, and GPU training
  • Thirteen official plugins in a machine-readable catalog
  • Durable manifests, resumable runs, and explicit cleanup
  • Open source under the MIT License
$ mere.run plugin install mere-vfx-tools

Runs on your hardware.

No hosted runtime or per-call bill.

Data stays on disk.

The runtime does not upload prompts or outputs. This public site records privacy-minimized product analytics.

MIT licensed.

Source on GitHub. Built in Prince Edward Island.

The Showcase

Two scenes.
Every modality.

Two scenes, made end to end with mere.run. The diner covers generation and understanding from one seed. The wharf fox goes from photograph to 3D, world navigation, geometry, relighting, sound, and LoRA training. Everything shown ran on one MacBook Pro.

$ mere.run run list --root ./proofs --json each run keeps its manifest, command, and checksums
Image → 3D · TRELLIS.2 image-3d-trellis2-4b · MLX

One photograph becomes an asset.

SAM 3.1 cut out the wharf fox. MLX TRELLIS.2 turned it into a sealed PBR mesh with shape, texture, and metallic-roughness maps. TripoSR and InstantMesh provide faster drafts.

Generated source plate: a red fox in a yellow raincoat on a foggy wharf.
Source plate · generated locally
The fox cut out from the plate with SAM 3.1, transparent background.
SAM 3.1 cutout · model input
$ mere.run vision image-to-3d-trellis2 fox-cutout.png --seed 43 -o ./fox-mesh
.glb textured, baked atlas206.1 MB · sha256 b7cfc5…
.glb vertex-color geometry62.6 MB · sha256 979ea6…
.obj + .ply + .pbrvox PBR voxels236 + 60.4 + 36.8 MB
2,236,756 triangles 1,021,504 PBR voxels seed 43 512³ O-Voxel pipeline
Web viewer: 402k-triangle copy. Full-resolution files remain checksummed in the run manifest.
Two rendered views of the reconstructed textured fox mesh. drag to orbit · pinch or scroll to zoom
Persistent world · Wan 2.2 + DreamX video-dreamx-world-5b-ar-mlx

The wharf, explorable.

One world serve session chains nineteen camera moves. Each clip starts from the last frame, so the dock, fox, and fog remain in place as the camera turns and walks.

Starting frame of the world session: the generated fox wharf plate. Start framesource image
Chunks 1–10pivot right · walk 4.8 m
Chunks 11–13yaw left · 18°
Chunks 14–19forward · 3.6 m
$ mere.run world serve --state-directory ./wharf-state · POST /v1/world/session/transitions {"camera":{"motion":"yawLeft"}}
one session · 19 chained transitions each chunk continues the terminal state 512×288 · 24 fps · M4 Max
Geometry & VFX · plate → production MoGe-2 · DA3 · VDA

The same plate, taken apart.

MoGe-2 recovers depth, normals, confidence, intrinsics, and a point cloud from the wharf plate. Depth Anything 3 handles multi-view geometry; Video Depth Anything carries depth through motion. Recovered geometry drives the relight.

metric depth, in metres EXR + PLY + camera JSON
The original generated wharf plate with the fox in a yellow raincoat.
1 · platekrea2 + klein
Metric depth map of the wharf plate.
2 · metric depthmoge2 · .exr
Surface normal map of the wharf plate.
3 · normalsmoge2 · .exr
Per-pixel validity and confidence mask of the recovered geometry.
4 · confidencevalidity mask
Recovered 3D point cloud of the wharf scene viewed from off-axis.
5 · point cloud.ply
Reconstructed textured fox mesh, two views.
6 · meshtrellis2
The wharf plate relit from foggy day to night lamplight.
7 · relightday → night
Portrait with detected body, hand, and face landmarks drawn over it.
Pose

107 landmarks.

Body and face points with confidence scores, ready for compositing.

$ mere.run vision pose portrait.png --json
Dense optical flow field visualized as a color wheel image.
Optical flow

Motion, measured.

393,216 optical-flow vectors for the diner dolly-in, saved as a Middlebury .flo file. Mean motion: 48.4 px.

$ mere.run vision flow a.png b.png -o shot.flo --accuracy very-high
Image + Vision · klein-nano + Falcon Perception
Generated 1950s diner scene with Falcon Perception object detection and segmentation overlays.
waitress · 0.95 jukebox · 0.92 neon sign ×3
Text · Creative gemma4 · 0.85t
"The door exhales a draft of ozone and wet asphalt, yielding to a sanctuary of humming neon and scorched lard. Inside, the air is a thick, amber suspension of tobacco smoke and percolating coffee…"
— mere.run text chat · 512 tokens $ mere.run text chat --prompt "describe a 1950s diner…"
Video · LTX 768×512 · 65f · 24fps

Establishing shot, dolly-in

Generated with LTX on Metal from the diner scene description.

Video → Audio · MMAudio sfx-mmaudio-large-44k-v2

The wharf, heard.

MMAudio added harbor ambience, creaking planks, and gulls to the silent world walk, aligned to the motion. Toggle the track and judge the sync.

$ mere.run sfx video generate "rain-damp harbor ambience, slow footsteps creaking on wet wooden planks, water lapping against pilings, distant gull cries, rope tapping a mast" world-walk.mp4 --model sfx-mmaudio-large-44k-v2 --seed 4242
44.1 kHz · synchformer-aligned weights CC-BY-NC · disclosed in model sources
Audio → MIDI · MuScriptor music-muscriptor-large

The diner song, transcribed.

MuScriptor turned the diner mix into 407 timed MIDI notes across guitars, voice, bass, piano, and drums. Switch between the original and MIDI render while it plays.

0s6s12s18s24s
guitars voice bass piano drums 407 notes · 6 instruments
$ mere.run music transcribe music_diner.m4a --model music-muscriptor-large -o diner.mid
render: diner.mid → GM soundfont gated weights · CC BY-NC 4.0
Music · ACE-Step G major · 88 BPM · 60s

"Honey, stay one more song with me"

Rockabilly with brushed snare, reverb-heavy Telecaster, doo-wop backing vocals, and tenor sax, generated from one prompt and a lyrics file.

Honey stay one more song with me
Underneath the chrome and the canopy
Red vinyl shining in the smoky light
Save me from the lonely night
Speech · TTS → ASR qwen3-nano · parakeet

The text, spoken back.

Qwen3 synthesized the narration; Parakeet transcribed it with timestamps. Both ran on device.

[00:00 → 00:08] The door exhales a draught of ozone…
[00:08 → 00:18] Inside, the air is a thick, amber suspension…
[00:18 → 00:27] Outside, the rain hammers the plate glass…
SFX · Woosh DFlow 3.5s · 48 kHz · seed 1963

Mug hits tile.

Woosh generated a ceramic mug shattering on diner tile.

$ mere.run sfx generate "single ceramic coffee mug dropped onto hard diner tile..." --model sfx-woosh-dflow --duration 3.5 --cfg 4.5 --seed 1963
Code · Swift qwen3-coder · streamed
mandelbrot.swift
/// Computes the Mandelbrot set for a given grid of complex points.
func generateMandelbrotSet(
    width: Int,
    height: Int,
    bounds: ComplexPlaneBounds = .default,
    maxIterations: Int = 100
) -> [[Int]] {
    var mandelbrot: [[Int]] = .init(repeating: .init(repeating: 0, count: width), count: height)
    let xStep = (bounds.right - bounds.left) / Double(width - 1)
    let yStep = (bounds.bottom - bounds.top) / Double(height - 1)
    for y in 0..<height {
        for x in 0..<width {
            let cx = bounds.left + Double(x) * xStep
            let cy = bounds.top + Double(y) * yStep
            mandelbrot[y][x] = iterate(cx: cx, cy: cy, max: maxIterations)
        }
    }
    return mandelbrot
}
compiled · rendered · 0.30s
Mandelbrot overview rendered locally
Seahorse Valley zoom rendered locally
Vision · Falcon Perception grounding + masks

Knows what it sees.

The diner image goes back through the vision stack for open-vocabulary grounding and masks.

waitressbox (0.61, 0.28) → (0.74, 0.68) jukeboxbox (0.84, 0.28) → (0.96, 0.65) neon sign3 detections · masks saved
$ mere.run vision ground hero.png --query "waitress"
OCR · Ideogram JSON → LightOn 1024×1024 · seed 1964

A receipt built for OCR.

Ideogram generated the ticket from structured text. LightOn OCR read every line back.

MERE DINER
TABLE SEVEN
_________________________
COFFEE
CHERRY PIE
_________________________
ORDER READY
$ mere.run vision ocr ocr-receipt-ideogram.png --backend lighton --quiet
Ideogram generated diner order ticket reading MERE DINER, TABLE SEVEN, COFFEE, CHERRY PIE, ORDER READY.
Train · a LoRA from scratch image-klein-base-9b · rank 16 · 250 steps

One local training loop, start to finish.

mere.run generated and captioned 24 cyanotypes, checked the plan, trained the adapter, and rendered a held-out fox with and without it. The whole run used one MacBook Pro.

M4 Max · 128 GB wall time 2 h 02 m, machine in use adapter 261.2 MB · sha256 a1df0d…
1 · Dataset — all generated locally

24 generated cyanotypes.

Contact sheet of the 24 cyanotype training images: maritime subjects printed white on Prussian blue.
krea2-turbo · seeds 3001–3024 captions: vision caption (qwen3-vl) via resident local API
2 · Preflight, then the real command

Check the plan before training.

$ mere.run image train-lora --data ./dataset \ --model image-klein-base-9b --rank 16 \ --training-steps 250 --batch-size 2 \ --checkpoint-interval 50 --seed 2121 \ --gradient-checkpointing \ --output cyanotype-wharf-r16-250.safetensors \ --preflight --json { "mere_run_version": "0.21.0", "status": "ok", "summary": "24 usable pair(s), ready to train.", "result": { "dataset": { "usable_pair_count": 24, "missing_caption_count": 0, "duplicate_caption_count": 0 }, "model": { "requested": "image-klein-base-9b", "installed": true }, "plan": { "rank": 16, "training_steps": 250, "learning_rate": 0.0005, "max_resolution": 512, "checkpoint_interval": 50, "expected_checkpoint_count": 5 } } }
# then drop --preflight and run it for real Injected LoRA into 144 FLUX.2 Klein layers. Training (250/250) loss 0.738672 Saving LoRA artifacts... cyanotype-wharf-r16-250.safetensors # checkpoints at steps 50/100/150/200 saved beside it
3 · Loss curve & checkpoints

Loss and checkpoints.

step 10step 130step 2500.880.680.49
Held-out fox prompt rendered with the step-50 checkpoint.
step 50
Held-out fox prompt rendered with the step-100 checkpoint.
step 100
Held-out fox prompt rendered with the step-150 checkpoint.
step 150
Held-out fox prompt rendered with the step-200 checkpoint.
step 200
Held-out fox prompt rendered with the final step-250 adapter.
step 250

Held-out fox, seed 7777, adjacent checkpoints. The style converges without losing the subject.

4 · The verdict — same picture, adapter on

Base Klein vs. the trained adapter.

The slider compares one composition with the adapter off and on. Both use seed 7777 and image-to-image strength 0.7; the checkpoint strip shows the text-to-image progression.

Base Klein 9B render of a fox in a raincoat on a wharf: photographic.
The same wharf image restyled through the trained cyanotype adapter: paper border, Prussian wash, identical composition.
base klein-9b + cyanotype lora
$ mere.run image generate --model image-klein-9b --seed 7777 -i base.png --strength 0.7 --lora ./cyanotype-wharf-r16-250.safetensors
prompt held out of dataset img2img restyle · strength 0.7 run inspect verified
Image · Krea 2 LoRA 1280×720 · 16 steps

Same prompt, with the adapter.

Krea 2 Turbo renders the diner prompt twice: base model, then custom LoRA at scale 2.0. Material, face shape, and miniature texture change.

$ mere.run image generate --model image-krea2-turbo --steps 16 --lora ./custom-style.safetensors --lora-scale 2.0
Seed 7777 · unedited model output
Krea 2 Turbo baseline showing a human night manager counting coins in a rainy 1950s diner booth.
Base Krea
Krea 2 Turbo with a custom LoRA applied, shifting the diner booth scene toward stop-motion puppet texture.
Custom LoRA
Image · Klein LoRA img-to-img 13 adapters · scale 1.5

One image, thirteen adapters.

Klein replays one archival street photo through thirteen private LoRAs. The cyanotype card shows training; the carousel shows finished adapters in use.

$ mere.run image generate --model image-klein-9b --ref-image street-kiss.png --strength 0.55 --lora ./blade-runner-rain.safetensors --lora-scale 1.5
Local LoRA image-to-image outputs · no semantic post-editing
Klein 9B generated diner scene using a Krea diner reference and a dog reference, showing the dog seated alone in a rainy 1950s booth.
Image · Klein 9B references 1280×720 · 12 steps

Scene reference plus subject swap.

Klein 9B combines the Krea diner as an environment reference with a generated dog portrait as the subject, placing the dog in the booth.

$ mere.run image generate --model image-klein-9b --ref-image diner.png --ref-image dog.png --prompt "swap the dog into the diner"
First reference image, baseline Krea diner booth render.
Reference A · Diner
Second reference image, generated brown and white dog portrait.
Reference B · Dog
Embeddings · qwen3-0.6b cosine similarity

Semantic search on device.

Three sentences embedded locally. Unit-vector distance places related descriptions closer together.

real distance plot d = sqrt(2 - 2cos)
A · Scene
rainy 1950s American diner late at night
B · Booth
neon-lit chrome counter and red vinyl booths
C · Outlier
a cat sitting on a windowsill
closer words share more vector direction
A ↔ B
0.510

Diner and booth descriptions are closest.

B ↔ C
0.351

Shared visual language creates some overlap despite the subject change.

A ↔ C
0.293

The unrelated subject is farthest from the diner prompt.

Both runs keep their commands, manifests, checksums, and outputs on disk.