Architecture
The design separates two orthogonal concerns:
models.py — what
Pydantic schemas defining the structure of valid output. Enforced at runtime — the LLM can't return something that doesn't fit.
modes.py — how
The prompt that fills the schema. Adding a new theoretical framework is ~30 lines. The schema doesn't change.
Same video. Multiple theories. One API call.
Analysis modes
--baudrillard
Baudrillard
Which order of simulacra? Where does reality collapse?
--virilio
Virilio
What speed regime governs? Where is the accident?
--hauntology
Hauntology
What futures were cancelled? What refuses to stay dead?
--gaze
Mulvey / Gaze
Who looks and with what power?
--affect
Massumi / Affect
What pre-cognitive intensities move through this?
--levinas
Levinas
Where does the face of the Other emerge?
--foucault
Foucault
What power operates? What is surveilled?
--rhythm
Deleuze / Rhythm
What territorializes? What escapes?
--zizek
Žižek
What ideology passes as nature?
--barthes
Barthes
What is the punctum? What mythologizes?
--benjamin
Benjamin
What is the aura? What does reproduction destroy?
--sublime
Sublime
Where does the image exceed comprehension?
--camera
Camera Lucida
What would this photograph be?
--custom
Custom
Any prompt. Same structured output.
Stack
Python · Gemini 2.5 Flash · Pydantic · Typer · Whisper · FFmpeg
Local fallback via Ollama vision models — same framework, no cloud.