| name | image-mining |
| description | I mine pixels for atoms. Reality is just compressed resources. |
| license | MIT |
| tier | 1 |
| allowed-tools | ["read_file","write_file"] |
| related | ["visualizer","logistic-container","postal","adventure"] |
| tags | ["moollm","vision","extraction","resources","pixels"] |
Image Mining
"I mine pixels for atoms. Reality is just compressed resources."
"Every image is a lode. Every pixel, potential ore."
Image Mining extends the Kitchen Counter's DECOMPOSE action to images.
Your camera isn't just a recorder โ it's a PICKAXE FOR VISUAL REALITY.
๐ Index
Quick Start
Operation Modes
Extensibility
Protocols
Reference
The Core Insight
๐ท Camera Shot โ ๐ผ๏ธ Image โ โ๏ธ MINE โ ๐ Resources
Just like the Kitchen Counter breaks down:
sandwich โ bread + cheese + lettuce
lamp โ brass + glass + wick + oil
water โ hydrogen + oxygen
Images can be broken down into:
ore_vein.png โ iron-ore ร 12 + stone ร 8
forest.png โ wood ร 5 + leaves ร 20 + seeds ร 3
treasure_pile.png โ gold ร 100 + gems ร 15
sunset.png โ orange_hue ร 1 + warmth ร 1 + nostalgia ร 1
Preferred Mode: Native LLM Vision
"The LLM IS the context assembler. Don't script what it does naturally."
When mining images, prefer native LLM vision (Cursor/Claude reading images directly):
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ NATIVE MODE (PREFERRED) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Cursor/Claude already has: โ
โ โ The room YAML (spatial context) โ
โ โ Character files (who might appear) โ
โ โ Previous mining passes (what's been noticed) โ
โ โ The prompt.yml (what was intended) โ
โ โ The whole codebase (cultural references) โ
โ โ
โ Just READ the image. The context is already there. โ
โ No bash commands. No sister scripts. Just LOOK. โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Why Native Beats Remote API
| Aspect | Native (Cursor/Claude) | Remote API (mine.py) |
|---|
| Context | Already loaded | Must be assembled |
| Prior mining | Visible in chat | Passed via stdin |
| Room context | Just read the file | Python parses YAML |
| Synthesis | LLM does it naturally | Script concatenates |
| Iteration | Conversational | Re-run command |
When to Use Remote API
Use mine.py or remote API calls when:
- Multi-perspective mining โ different models see different things!
- Batch processing โ mining 100 images overnight
- CI/CD โ automated pipelines with no LLM orchestrator
- Rate limiting โ your LLM can't do vision but can call one that does
Multi-perspective is the killer use case: Claude sees narrative, GPT-4V sees objects, Gemini sees spatial relationships. Layer them all for rich interpretation.
Even then, have the orchestrating LLM assemble the context:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ REMOTE API WITH LLM ASSEMBLY โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. LLM reads context files (room, characters, prior mining) โ
โ 2. LLM synthesizes: "What to look for in this image" โ
โ 3. LLM calls remote vision API with image + synthesized promptโ
โ 4. LLM post-processes response into YAML Jazz โ
โ โ
โ The SMART WORK happens in the orchestrating LLM. โ
โ Remote API just does vision with good instructions. โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Native Mode Workflow
python mine.py image.png --context room.yml --characters chars/ --prior mined.yml
The LLM context window IS the context assembly mechanism. Use it.
What Can Be Mined
Image mining works on ANY visual content, not just AI-generated images:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MINEABLE SOURCES โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๐จ AI-Generated Images โ
โ - DALL-E, Midjourney, Stable Diffusion outputs โ
โ - Has prompt.yml sidecar with generation context โ
โ โ
โ ๐ธ Real Photos โ
โ - Phone camera, DSLR, scanned prints โ
โ - No prompt โ mine what you see โ
โ โ
โ ๐ Graphs and Charts โ
โ - Data visualizations, dashboards โ
โ - Extract trends, outliers, relationships โ
โ โ
โ ๐ฅ๏ธ Screenshots โ
โ - UI states, error messages, configurations โ
โ - Mine the interface, not just pixels โ
โ โ
โ ๐ Text Images โ
โ - Scanned documents, handwritten notes, signs โ
โ - OCR + semantic extraction โ
โ โ
โ ๐ PDFs โ
โ - Documents, papers, invoices โ
โ - Cursor may already support โ try it! โ
โ โ
โ ๐บ๏ธ Maps and Diagrams โ
โ - Architecture diagrams, floor plans, mind maps โ
โ - Extract spatial relationships โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Source Examples
Generated Image (has context):
postal:
type: text
to: "visualizer"
body: "Take a photo of that ore vein on the wall"
attachments:
- type: image
action: generate
prompt: "Rich iron ore vein in cavern wall, glittering..."
Real Photo (mine what you see):
postal:
type: text
to: "miner"
body: "Here's a photo of the treasure room"
attachments:
- type: image
action: upload
source: "camera_roll"
file: "treasure-room.jpg"
Screenshot (extract UI state):
resources:
error-type: "permission-denied"
affected-file: "/etc/passwd"
suggested-action: "run as sudo"
stack-depth: 3
Graph (extract data relationships):
resources:
trend: "upward"
peak-month: "december"
anomaly: "march-dip"
yoy-growth: "23%"
All become mineable resources!
Extensible Analyzer Pipeline
"Different images need different tools. The CLI is a pipeline, not a monolith."
The mine.py CLI supports pluggable analyzers that run before, during, or after LLM vision:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ANALYZER PIPELINE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. PRE-PROCESSORS โ
โ resize, normalize, enhance, format conversion โ
โ โ
โ 2. CUSTOM ANALYZERS (parallel or sequential) โ
โ โโโ pose-detection (MediaPipe, OpenPose) โ
โ โโโ object-detection (YOLO, Detectron2) โ
โ โโโ ocr-extraction (Tesseract, PaddleOCR) โ
โ โโโ face-analysis (expression, demographics) โ
โ โโโ leela-customer-models (your trained models!) โ
โ โ
โ 3. LLM VISION โ
โ Receives ALL prior results as context โ
โ Synthesizes semantic interpretation โ
โ โ
โ 4. POST-PROCESSORS โ
โ format, validate, merge into final YAML Jazz โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Example: Multi-Analyzer Pipeline
mine.py fashion-shoot.jpg \
--analyzer pose-detection \
--analyzer face-analysis \
--analyzer leela://acme/gesture-classifier \
--depth philosophical
This runs:
- pose-detection โ Extracts body keypoints, gesture classification
- face-analysis โ Detects expressions, demographics
- leela://acme/gesture-classifier โ Customer's trained model from Leela registry
- LLM vision โ Gets ALL the above as context, synthesizes final interpretation
Leela Customer Models
Pull customer-specific models trained on the Leela platform:
mine.py widget-photo.jpg --analyzer leela://customer-id/defect-detector-v3
mine.py widget-photo.jpg --analyzer ./models/my-classifier.pt
Output merges into the mining YAML:
leela_analysis:
model: "acme-widget-defect-v3"
customer: "acme-corp"
detections:
- class: "hairline_crack"
confidence: 0.91
severity: "minor"
location: "top_left_quadrant"
Adding Your Own Analyzer
def analyze(image_path: str, config: dict) -> dict:
"""Run analysis, return structured data for YAML output."""
return {
"my_analysis": {
"detected": ["thing1", "thing2"],
"confidence": 0.95
}
}
def can_handle(image_path: str, context: dict) -> bool:
"""Return True if this analyzer should run on this image."""
return "manufacturing" in context.get("tags", [])
Register in analyzers/registry.yml:
analyzers:
my-analyzer:
module: "analyzers.my_analyzer"
auto-detect: true
requires: ["torch", "my-model-package"]
Why Pipeline Beats Monolith
| Approach | Pros | Cons |
|---|
| Monolith | Simple | Can't add domain models |
| Pipeline | Extensible, composable | Slightly more complex |
The LLM is great at semantic synthesis, but it can't run your custom pose detection model. The pipeline lets each tool do what it's best at:
- Custom models โ Precise detection, trained on your data
- LLM vision โ Semantic interpretation, narrative synthesis
- Together โ The best of both worlds
YAML Jazz Output Style
"Comments are SEMANTIC DATA, not just documentation!"
YAML Jazz is the output format for mining results. Structure provides the backbone; comments provide the insight.
The Rules
- COMMENT LIBERALLY โ Every insight deserves a note
- Inline comments for quick observations
notes: fields for longer thoughts
- Capture confidence, hunches, metaphors
- Think out loud โ the reader benefits from your reasoning
Example Output
resources:
gold:
quantity: 150
confidence: 0.85
notes: |
Mix of Roman denarii and medieval florins. Centuries of
accumulation. This isn't a king's orderly treasury โ this is
a thieves' hoard. Generations of stolen wealth, piled and
forgotten. The dust layer says nobody's touched it in ages.
danger:
intensity: 0.7
confidence: 0.75
sources:
- "Skeleton in corner โ previous seeker, didn't make it"
- "Shadows too dark for natural torchlight โ something absorbs"
- "Dust undisturbed except ONE trail โ something still comes here"
notes: "This hoard is guarded. Or cursed. Probably both."
nostalgia:
intensity: 0.4
confidence: 0.6
notes: "Who were they? Where did this come from? All gone now."
dominant_colors:
- name: "treasure-gold"
hex: "#FFD700"
Why Comments Matter
An uncommented extraction is like a song without soul. The best mining results read like poetry annotated by a geologist.
When you mine, capture:
- Why you estimated that quantity
- What visual cues led to this inference
- What's uncertain, what surprised you
- Metaphors that capture the essence
How Mining Works
Step 1: ANALYZE (LLM scans for resources)
The LLM looks at the image AND checks what resources are currently requested by the logistics network:
analyze:
image: "treasure-room.jpg"
logistics_context:
active_requests:
- { item: "gold", requester: "forge/", needed: 100 }
- { item: "gems", requester: "jewelry-shop/", needed: 50 }
- { item: "iron-ore", requester: "smelter/", needed: 200 }
analysis_prompt: |
Look at this image. What resources can you identify?
Prioritize resources that match these requests: {requests}
For each resource, estimate quantity available.
Step 2: INSTANTIATE (Resource map attached to image)
The LLM returns a resource mapping that gets stored ON the image:
image:
id: "treasure-room-photo"
file: "treasure-room.jpg"
type: mineable-image
resources:
gold:
total: 150
remaining: 150
per_turn: 10
gems:
total: 45
remaining: 45
per_turn: 5
ancient-coins:
total: 30
remaining: 30
per_turn: 3
rare: true
dust:
total: 500
remaining: 500
per_turn: 50
value: low
analyzed_at: "2026-01-10T14:30:00Z"
exhausted: false
Step 3: MINE (Progressive extraction, N per turn)
Each turn, you can mine resources from the image:
action: MINE
target: "treasure-room-photo"
result:
extracted:
- item: gold
quantity: 10
destination: "forge/"
- item: gems
quantity: 5
destination: "jewelry-shop/"
image_state:
resources:
gold:
remaining: 140
gems:
remaining: 40
exhausted: false
Step 4: EXHAUSTION (Sucked dry!)
After enough mining turns, resources run out:
image_state:
resources:
gold:
total: 150
remaining: 0
per_turn: 10
exhausted: true
gems:
total: 45
remaining: 0
per_turn: 5
exhausted: true
ancient-coins:
total: 30
remaining: 0
per_turn: 3
exhausted: true
exhausted: true
description: |
The treasure room photo has been thoroughly mined.
Every glinting surface has been extracted, every
coin accounted for. The image looks... drained.
Faded. Like a photocopy of a photocopy.
Once exhausted, you can't mine that image anymore!
Demand-Driven Discovery
The LLM prioritizes what the logistics network NEEDS!
logistic-container:
id: smelter
mode: requester
request_list:
- { item: "iron-ore", count: 200, priority: high }
- { item: "coal", count: 100, priority: medium }
analysis:
image: "cave-wall.jpg"
found_resources:
iron-ore: 80
copper-ore: 30
quartz: 50
cave-moss: 100
priority_matching:
- resource: iron-ore
matches_request: true
requester: "smelter/"
highlight: "โญ HIGH PRIORITY โ Smelter needs this!"
The LLM acts as a smart prospector that knows what's valuable based on current demand!
Discovery Modes
| Mode | What LLM Looks For |
|---|
demand | Only resources with active requests |
opportunistic | Requested resources + valuable extras |
thorough | Everything mineable in the image |
philosophical | Abstract concepts, emotions, meanings |
mine:
target: "sunset-beach.jpg"
mode: philosophical
resources:
nostalgia: 15
warmth: 30
passage-of-time: 5
beauty: 20
sand: 10000
Mining Yields
Different image types yield different resources:
๐๏ธ Natural Resources
| Image Type | Yields |
|---|
| Ore vein | iron-ore, copper-ore, gold, gems |
| Forest | wood, leaves, seeds, birds |
| Ocean | water, salt, fish, seaweed |
| Mountain | stone, minerals, snow, air |
| Desert | sand, glass, heat, mirage |
| Sky | clouds, light, space, dreams |
๐๏ธ Constructed
| Image Type | Yields |
|---|
| Building | stone, wood, glass, inhabitants |
| Machinery | gears, pipes, steam, purpose |
| Treasure pile | gold, gems, artifacts, curses |
| Library | books, knowledge, dust, secrets |
๐จ Abstract/Artistic
| Image Type | Yields |
|---|
| Sunset | colors, warmth, nostalgia, time |
| Portrait | personality, mood, secrets, stories |
| Abstract art | shapes, feelings, confusion, inspiration |
| Text/writing | words, meaning, intent, language |
๐ Philosophical (Deep Mining)
Just like the Kitchen Counter goes from practical โ chemical โ atomic โ philosophical:
| Depth | What You Mine |
|---|
| Surface | Objects, materials |
| Deep | Emotions, concepts |
| Sensations | Colors, smells, attitudes, feelings |
| Quantum | Probabilities, observations |
| Philosophical | Meaning, existence, narrative |
deep_mining:
target: "sunset.png"
depth: philosophical
yields:
- item: "the-passage-of-time"
quantity: 1
type: abstract
- item: "mortality-awareness"
quantity: 1
type: existential
warning: "This may cause introspection"
- item: "beauty-that-fades"
quantity: 1
type: poetic
๐จ Sensation Mining
Extract colors, smells, textures, moods:
sensation_mining:
target: "farmers-market.jpg"
depth: sensations
yields:
- item: "tomato-red"
quantity: 40
type: color
hex: "#FF6347"
- item: "basil-green"
quantity: 25
type: color
hex: "#228B22"
- item: "fresh-bread-aroma"
quantity: 10
type: smell
intensity: warm
- item: "ripe-fruit-sweetness"
quantity: 30
type: smell
- item: "weekend-morning-calm"
quantity: 5
type: attitude
- item: "abundance"
quantity: 20
Use these in crafting:
- Combine
tomato-red + canvas โ painted artwork
- Combine
fresh-bread-aroma + room โ ambiance modifier
- Combine
weekend-morning-calm + character โ mood buff
The Mineable Property
Any object or image can have a mineable property:
object:
name: Ancient Ore Painting
type: artwork
description: |
A painting of a rich ore vein. But wait...
is that actual ore embedded in the canvas?
mineable:
enabled: true
yields:
- item: iron-ore
quantity: [5, 15]
- item: copper-ore
quantity: [2, 8]
- item: artistic-essence
quantity: 1
rare: 0.3
exhaustion:
max_mines: 3
diminishing: 0.5
regenerates: false
side_effects:
- "The painting fades slightly with each extraction"
- "You feel the artist's disappointment"
Mining Tools
Different tools affect mining yields:
๐ท Camera (Default)
tool: camera
efficiency: 1.0
specialty: "Captures visual resources"
can_mine: [images, scenes, visible_objects]
๐ฌ Analyzer
tool: analyzer
efficiency: 1.5
specialty: "Chemical/atomic resources"
can_mine: [materials, substances, compounds]
๐ฎ Oracle Eye
tool: oracle_eye
efficiency: 2.0
specialty: "Abstract/philosophical resources"
can_mine: [emotions, concepts, meanings, futures]
โ๏ธ Reality Pickaxe
tool: reality_pickaxe
efficiency: 3.0
specialty: "Everything, but dangerous"
can_mine: [anything]
warning: "May collapse local reality"
Integration with Logistics
Mined resources flow into the logistics system:
mining_config:
default_destination: "inventory"
routing:
- match: { tags: ["ore"] }
destination: "nw/ore-storage/"
- match: { tags: ["organic"] }
destination: "ne/organic-materials/"
- match: { tags: ["abstract"] }
destination: "sw/concepts/"
postal_delivery:
enabled: true
method: text
Camera Phone Integration
Your phone camera is THE mining interface:
Real Photo Workflow
phone_mining:
capture:
sources:
- camera: "Take new photo"
- gallery: "Upload from camera roll"
- url: "Import from web"
on_capture:
action: analyze
context: logistics_requests
show_preview: true
on_confirm:
action: instantiate
attach_resources: true
on_mine:
per_turn: true
auto_route: logistics
Example: Photo Mining Flow
1. You take a photo of a rock formation:
๐ท *snap*
Analyzing photo for mineable resources...
Checking logistics requests...
Found in image:
โโโ ๐ชจ granite ร 200 (10/turn)
โโโ ๏ฟฝite iron-ore ร 45 (5/turn) โญ NEEDED by smelter!
โโโ ๐ quartz ร 12 (2/turn)
โโโ ๐ฆ fossil ร 1 (rare find!)
[MINE] [CANCEL]
2. You confirm. Resource map attached:
image:
id: rock-formation-001
file: "IMG_2847.jpg"
resources:
granite: { total: 200, remaining: 200, per_turn: 10 }
iron-ore: { total: 45, remaining: 45, per_turn: 5 }
quartz: { total: 12, remaining: 12, per_turn: 2 }
fossil: { total: 1, remaining: 1, per_turn: 1 }
3. Each turn, you mine:
Turn 1: Mined 10 granite, 5 iron-ore, 2 quartz
โ Iron ore sent to smelter (requester)
โ Granite sent to storage
Turn 2: Mined 10 granite, 5 iron-ore, 2 quartz
Remaining: granite 180, iron-ore 35, quartz 8
...
Turn 9: Mined 10 granite, 5 iron-ore (last 5!)
โ ๏ธ Iron-ore EXHAUSTED
Turn 20: Mined last 10 granite
๐ท IMAGE FULLY MINED โ no more resources!
4. Exhausted image:
image:
id: rock-formation-001
exhausted: true
visual_effect: |
The photo appears faded, almost translucent.
Like the minerals were literally pulled out of it.
A ghost of a photograph.
AR Overlay (Future)
ar_overlay:
live_view:
show_resources: true
icons_float: true
indicators:
- resource_type: "icon + label"
- quantity: "number overlay"
- priority: "โญ for requested items"
- exhaustion: "fade as mined"
DECOMPOSE vs MINE
| DECOMPOSE (Counter) | MINE (Camera) |
|---|
| Physical items | Images, scenes, visuals |
| Requires counter | Requires camera/tool |
| Consumes item | May or may not consume |
| Returns components | Returns resources |
| Kitchen-focused | World-focused |
They're complementary!
- DECOMPOSE the physical object on the counter
- MINE the image/representation of anything
Reality Mining (Advanced)
At the deepest level, you're not just mining images โ you're mining reality itself:
reality_mining:
level: transcendent
insight: |
When you mine an image, you're extracting
compressed information. But all reality is
compressed information. Images are just
explicit about it.
implications:
- "Mining a photo of gold doesn't create gold โ it REVEALS gold"
- "The ore was always there, encoded in the pixels"
- "Your camera doesn't capture reality โ it DECOMPRESSES it"
warning: |
At this level, the distinction between
"mining an image" and "mining reality"
becomes philosophical.
Actions
MINE
MINE [target]
MINE [target] WITH [tool]
MINE [target] TO [destination]
SCAN
SCAN [target] # Preview yields without mining
SCAN AREA # Scan visible area for mineable resources
PROSPECT
PROSPECT [direction] # Check for mineable resources in direction
PROSPECT DEEP # Deep scan for rare/hidden resources
Example: Mining the Maze
action: MINE "dark-corridor.png"
result:
yields:
- item: darkness
quantity: 100
type: abstract
note: "Bottled darkness, useful for stealth"
- item: fear
quantity: 15
type: emotion
note: "Crystallized fear, grue-adjacent"
- item: mystery
quantity: 5
type: narrative
note: "Pure narrative potential"
- item: stone-dust
quantity: 50
type: material
rare_find:
- item: "ancient-writing"
quantity: 1
note: "Hidden message in the shadows!"
unlocks: "Secret passage revealed"
The Mining Economy
Resources have value and flow:
resource_economy:
chains:
- ore โ smelter โ ingots โ forge โ tools
- wood โ sawmill โ planks โ workshop โ furniture
- images โ mining โ resources โ crafting โ items
image_value:
unique_photo: high
copy: low
AI_generated: medium
content_creation: |
When you MINE an image, you're not just extracting
resources โ you're creating YAML files for them.
Each resource becomes a game object.
Dovetails With
Character Recognition
"Who's in the picture? Match against your cast list."
When mining images with known characters, the LLM matches visual features against character metadata.
How It Works
- Load character files from
characters/ directory
- Extract visual descriptors โ species, clothing, accessories, typical poses
- Match against figures in the image
- Report confidence, pose, expression, interactions
Context Sources
characters/*.yml โ character definitions with visual descriptors
characters/*/CARD.yml โ character cards with appearance
- Room context โ who's expected here?
- Prior mining โ who was identified before?
Example Output
characters_detected:
- id: palm
name: "Palm"
confidence: 0.95
location: "center-left"
pose: "seated at desk"
expression: "scholarly contentment"
accessories: ["tiny espresso", "typewriter"]
interacting_with: ["kittens", "biscuit"]
notes: "Matches Dutch Golden Age portrait style"
- id: marieke
name: "Marieke"
confidence: 0.92
location: "behind bar"
pose: "waving"
expression: "warm welcome"
accessories: ["apron with LEKKER text"]
- id: unknown-1
confidence: 0.0
location: "background-right"
description: "Figure in shadow, can't identify"
possible_matches: ["henk", "wumpus"]
Tips
- Provide character files in context before mining
- Include signature accessories โ Palm's espresso, Biscuit's collar
- Note relationships โ who stands near whom
- Flag unknown figures for investigation
- Use
--depth characters or the cast-list lens
Multi-Look Mining
"One eye sees objects. Two eyes see depth. Many eyes see truth."
Multi-Look Mining layers interpretations from different perspectives, building up rich semantic sediment like geological strata. Each mining pass adds a new layer of meaning.
The Technique
layer_1_openai:
miner: "gpt-4o"
focus: "objects, materials, colors, mood"
findings:
atmosphere: { intensity: 0.8 }
objects: { quantity: 10 }
layer_2_cursor_claude:
miner: "claude-opus-4"
focus: "character-expression, cultural-markers, narrative-pov"
what_layer_1_missed:
- "The SECOND cat on the windowsill"
- "The apron text is Dutch (LEKKER)"
- "The espresso cup is monkey-sized (intentional)"
deeper_resonance:
theme: "home is where they wave when you walk in"
layer_3_gemini:
miner: "gemini-pro-vision"
focus: "art-history, composition, color-theory"
Why Multi-Look Works
Different LLMs โ and different PROMPTS to the same LLM โ notice different things:
| Miner | Strengths | Typical Focus |
|---|
| OpenAI GPT-4o | General coverage | Objects, counts, colors |
| Claude | Nuance, context | Expression, culture, narrative |
| Gemini | Technical | Composition, art history |
| Human | Domain expertise | What MATTERS to the use case |
The sum is greater than the parts. Each layer adds perspectives the others missed.
The Paintbrush Metaphor
Think of multi-look mining like painting in layers:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IMAGE INTERPRETATION โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Layer N+1 โ Specialized focus (your choice) โ
โ Layer N โ New questions raised by Layer N-1 โ
โ ... โ
โ Layer 3 โ Art history, composition โ
โ Layer 2 โ Character, culture, narrative โ
โ Layer 1 โ Objects, materials, basic resources โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ORIGINAL IMAGE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Each pass reads the PREVIOUS layers before adding its own. The new miner knows what's already been noticed, so it can focus on what's missing or offer alternative interpretations.
Multi-Look Protocol
When mining an image with multi-look:
- Read existing mining data (if any)
- Choose your focus โ what perspective will you add?
- Look at the image with that lens
- Note what prior layers missed โ explicitly!
- Add your layer with clear attribution
- Suggest next focus โ what should Layer N+1 examine?
Focus Lenses
Different passes should use different lenses:
| Lens | What It Sees |
|---|
| Technical | Composition, lighting, depth of field, color theory |
| Narrative | Who took this? Why? What moment is this? |
| Cultural | Language markers, traditions, historical context |
| Emotional | Expressions, body language, mood |
| Symbolic | Metaphors, allegories, hidden meanings |
| Character | Identity, relationships, motivations |
| Historical | Art history references, period markers |
| Economic | Value, ownership, class markers |
| Phenomenological | What does it FEEL like to be there? |
Example: Progressive Revelation
Image: Marieke waving from behind the bar with Palm the monkey
Layer 1 (OpenAI):
- Objects: woman, monkey, cat, bottles, espresso machine
- Mood: warm, welcoming
- Relationships: 3 beings present
Layer 2 (Claude):
- The wave is for a FRIEND, not a stranger
- LEKKER is untranslatable Dutch โ this IS gezelligheid
- There are TWO cats (Layer 1 missed the windowsill one)
- The espresso cup is monkey-sized โ someone made that for Palm
- This is a family portrait disguised as a snapshot
Layer 3 (Art History):
- Composition echoes Dutch Golden Age tavern scenes
- The espresso machine is Art Nouveau (1890-1910 aesthetic)
- Lighting mimics Vermeer's characteristic window glow
Layer 4 (Phenomenology):
- Temperature: warm, heated by espresso machine and bodies
- Smell: coffee, old wood, cat fur
- Sound: the hiss of steam, soft background conversation
- Touch: worn wood bar top, smooth copper
Each layer enriches the total understanding.
Storing Multi-Look Data
Append new layers to the same -mined.yml file:
resources:
atmosphere: ...
objects: ...
exhausted: false
mining_notes: "Initial extraction complete"
layer_2_cursor_claude:
miner: "claude-opus-4"
focus: "character, culture, narrative"
date: "2026-01-19"
character_analysis:
marieke:
expression: "genuine warmth"
notes: "Duchenne smile โ reaches her eyes"
what_layer_1_missed:
- "Second cat on windowsill"
- "LEKKER cultural significance"
exhausted: false
next_suggested_focus: "art history, lighting analysis"
layer_3_art_history:
miner: "human/don"
focus: "art historical references"
When to Multi-Look
Use multi-look mining when:
- Rich images โ complex scenes with many elements
- Narrative importance โ images central to a story
- Comparison needed โ seeing how different perspectives interpret
- Building context โ accumulating knowledge about a location/character
- Training data โ creating rich examples for future mining
The Exhaustion Paradox
Unlike single-pass mining, multi-look mining doesn't exhaust the image โ it deepens it:
pass_1:
resources: { gold: 50 }
remaining: { gold: 0 }
exhausted: true
layer_1:
resources: { gold: 50 }
exhausted: false
layer_2:
resources: { narrative: 1, meaning: 1 }
what_layer_1_missed: ["gold coins are Roman denarii"]
exhausted: false
layer_3:
resources: { art_history: 1 }
references: ["Pieter Claesz vanitas still life"]
exhausted: false
Images are never truly exhausted. There's always another perspective.
Philosophy
"In Minecraft, you punch trees to get wood."
"In MOOLLM, you photograph ore to get resources."
The camera is a cognitive tool that extracts meaning from reality.
Mining is just making that extraction explicit and measurable.
Every image is a compressed representation of resources.
Mining decompresses it.
See YAML frontmatter at top of this file for full specification.