Photo Oracle
Overview
Photo Oracle turns local personal photo folders into a read-only memory deck. Its primary daily entry is Daily Fortune / 今日照片签: one photo from the user's own past becomes a playful symbolic compass for today.
Photo Oracle is an entertainment and reflective-memory tool, not a psychological assessment, medical service, or predictor of future events. Its interpretations are prompts grounded in visible photo evidence and user-provided context; they are not facts about a person's hidden traits or mental state.
First Checks
- Confirm Python 3.11+ is available.
- Run
python scripts/oracle.py --helpfrom this skill directory, or use the absolute path to this skill'sscripts/oracle.py. - Ask for one or more local source folders and a state folder outside every source folder.
- Explain that source photos are read-only and that only staged proxy/contact-sheet images selected by the workflow may be viewed by the current host model.
- If the user does not consent to model image reading, only index metadata and do not generate visual interpretations.
Do not modify, delete, move, rename, or edit source photos. Do not write cache, database, contact sheets, reports, or hidden files inside source folders or synced photo folders.
Do not scan, hash, index, record, stage, or analyze video files. Video extensions are skipped completely even when they appear inside an authorized source directory.
Workflow Decision
- First use or no state directory: run
init, thenscan, thencandidates --mode opening, thenstage. - "Today draw one" or "今日照片签": run
fortune --state-root ...; each library has one official Daily Fortune per local day. - Same-day reroll requests: return the existing Daily Fortune, refuse only the official reroll, and immediately offer explain, action, echo, or night-review continuations.
- "Continue": offer time branch, surprise branch, question mode, or fortune continuations; never refuse just because the daily anchor was already drawn.
- "Question": use the three-card spread from
references/spread-catalog.md. - "This month": use monthly constellation rules from
references/spread-catalog.md. - User says none resonate: acknowledge sampling missed, then offer simple calibration: older, more people, more places, more daily life, or more surprise.
CLI Quick Reference
python scripts/oracle.py init --name "Personal Library" --state-root "E:\PhotoOracleData" --source "D:\Pictures"
python scripts/oracle.py scan --state-root "E:\PhotoOracleData"
python scripts/oracle.py status --state-root "E:\PhotoOracleData"
python scripts/oracle.py fortune --state-root "E:\PhotoOracleData"
python scripts/oracle.py fortune --state-root "E:\PhotoOracleData" --continue explain
python scripts/oracle.py candidates --state-root "E:\PhotoOracleData" --mode opening --count 32 --output "E:\PhotoOracleData\staging\opening.json"
python scripts/oracle.py stage --state-root "E:\PhotoOracleData" --candidates "E:\PhotoOracleData\staging\opening.json"
Use record-card only with JSON that follows references/schemas.md. Use feedback, exclude, and pending-thread to preserve user choices and unfinished threads.
After stage, read the returned reply-images.json. Return the four Markdown image entries directly in the chat before or beside the card text. Do not only describe the photos in prose, because users may not see images hidden inside tool execution details.
Output Contract
Each card must contain title, observations, context, selection_reason, interpretation, reflection_question, and uncertainty. Observations must be directly visible or metadata-based. Interpretation must be framed as a possible association, not a fact.
Read references/interpretation-contract.md before writing card text.
Hard Boundaries
Do not claim a file timestamp proves viewing history. Only Photo Oracle history can support statements like "not drawn in Photo Oracle for 180 days." On first scan, use bounded language such as "possibly overlooked" or "low explicit-attention candidate."
Do not infer MBTI, mental health, sexuality, religion, politics, income, crime, hidden traits, unconfirmed relationships, or future events. Read references/scientific-boundaries.md and references/privacy-policy.md when a user asks for these.
Daily Fortune is fortune-like reflection, not literal future prediction. It may use playful labels like 小吉 or 转机, but it must not claim that financial, medical, relationship, safety, or other future events will happen.
References
references/source-support.md: formats, HEIC/RAW/Live Photo/iCloud placeholder handling.references/privacy-policy.md: read-only rules, consent, sensitive content, sharing redaction.references/sampling-policy.md: event, time, diversity, low explicit-attention and oracle-unseen rules.references/spread-catalog.md: opening, daily, question, echo and monthly workflows.references/interpretation-contract.md: card fields and wording.references/scientific-boundaries.md: research basis and forbidden claims.references/schemas.md: JSON contracts.