# lemomo-ai/lemo-opuscar architecture

> Architecture diagram of the GitHub repository lemomo-ai/lemo-opuscar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-05). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lemomo-ai/lemo-opuscar
- Repository: https://github.com/lemomo-ai/lemo-opuscar

## Overview

Lemo-Opuscar is a library of code-made film styles and a shared toolkit for coding agents to create films. The main user workflow starts with the agent skill: clarify the topic and materials, choose or customize a style, optionally preview a storyboard, then create picture and sound and render a finished video. The graph also preserves the style gallery and the toolkit’s rendering, audio, and voice capabilities. Some production subsystems are documented but unsampled, so their internal connections are omitted.

Main entry points: [`plugin/skills/lemo-opuscar/SKILL.md`](https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md) (Opuscar skill), [`core/render/page.mjs`](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/page.mjs) (Demo page runtime), [`core/render/video.mjs`](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/video.mjs) (Video renderer), [`styles`](https://github.com/lemomo-ai/lemo-opuscar/tree/main/styles) (Style prompts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_creation["Agent workflow"]
  node_skill["Opuscar skill<br/>[SKILL.md]"]
  node_direction["Direction guide<br/>[DIRECTOR.md]"]
  node_technique["Technique guide<br/>[TECHNIQUE.md]"]
  node_storyboard["Storyboard preview<br/>[SKILL.md]"]
  node_film["Film project"]
end

subgraph group_styles["Style library"]
  node_styleprompts["Style prompts"]
  node_stylecustom["Style customization<br/>[SKILL.md]"]
  node_demos["Code-made demos"]
end

subgraph group_toolkit["Film toolkit"]
  node_renderpage["Demo page runtime<br/>[page.mjs]"]
  node_staticserve["Local page server<br/>[serve.mjs]"]
  node_browser["Browser setup<br/>[browser.mjs]"]
  node_stillrender["Still renderer<br/>[still.mjs]"]
  node_videorender["Video renderer<br/>[video.mjs]"]
  node_slots["Render slots<br/>[slot.mjs]"]
  node_eventexport["Sound events<br/>[events.mjs]"]
  node_readcheck["Text timing check<br/>[readcheck.mjs]"]
  node_audio["Music and effects"]
  node_voice["Speech tools"]
end

subgraph group_gallery["Style gallery"]
  node_gallery["Style gallery<br/>[index.html]"]
end

node_maker(("Film maker"))

node_maker -->|"starts with"| node_skill
node_skill -->|"reads guide"| node_direction
node_skill -->|"reads guide"| node_technique
node_skill -->|"selects style"| node_styleprompts
node_skill -->|"customizes style"| node_stylecustom
node_skill -->|"offers preview"| node_storyboard
node_skill -->|"directs creation"| node_film
node_styleprompts -->|"pairs with"| node_demos
node_film -->|"renders with"| node_videorender
node_film -->|"uses sound"| node_audio
node_film -->|"uses narration"| node_voice
node_videorender -->|"opens page"| node_renderpage
node_videorender -.->|"uses optionally"| node_slots
node_renderpage -->|"serves page"| node_staticserve
node_renderpage -->|"configures browser"| node_browser
node_stillrender -->|"opens page"| node_renderpage
node_eventexport -->|"opens page"| node_renderpage
node_readcheck -->|"opens page"| node_renderpage
node_maker -->|"browses styles"| node_gallery

click node_skill "https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md"
click node_direction "https://github.com/lemomo-ai/lemo-opuscar/blob/main/DIRECTOR.md"
click node_technique "https://github.com/lemomo-ai/lemo-opuscar/blob/main/TECHNIQUE.md"
click node_storyboard "https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md"
click node_styleprompts "https://github.com/lemomo-ai/lemo-opuscar/tree/main/styles"
click node_stylecustom "https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md"
click node_demos "https://github.com/lemomo-ai/lemo-opuscar/tree/main/styles"
click node_renderpage "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/page.mjs"
click node_staticserve "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/serve.mjs"
click node_browser "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/browser.mjs"
click node_stillrender "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/still.mjs"
click node_videorender "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/video.mjs"
click node_slots "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/slot.mjs"
click node_eventexport "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/events.mjs"
click node_readcheck "https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/readcheck.mjs"
click node_audio "https://github.com/lemomo-ai/lemo-opuscar/tree/main/core/audio"
click node_voice "https://github.com/lemomo-ai/lemo-opuscar/tree/main/core/tts"
click node_gallery "https://github.com/lemomo-ai/lemo-opuscar/blob/main/styleboard/index.html"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_skill,node_direction,node_technique,node_storyboard,node_film toneBlue
class node_styleprompts,node_stylecustom,node_demos toneAmber
class node_renderpage,node_staticserve,node_browser,node_stillrender,node_videorender,node_slots,node_eventexport,node_readcheck,node_audio,node_voice toneMint
class node_gallery toneRose
class node_maker toneIndigo
```

## Components

### Agent workflow

- [Opuscar skill](https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md): `plugin/skills/lemo-opuscar/SKILL.md`
- [Direction guide](https://github.com/lemomo-ai/lemo-opuscar/blob/main/DIRECTOR.md): `DIRECTOR.md`
- [Technique guide](https://github.com/lemomo-ai/lemo-opuscar/blob/main/TECHNIQUE.md): `TECHNIQUE.md`
- [Storyboard preview](https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md): `plugin/skills/lemo-opuscar/SKILL.md`
- **Film project**

### Style library

- [Style prompts](https://github.com/lemomo-ai/lemo-opuscar/tree/main/styles): `styles`
- [Style customization](https://github.com/lemomo-ai/lemo-opuscar/blob/main/plugin/skills/lemo-opuscar/SKILL.md): `plugin/skills/lemo-opuscar/SKILL.md`
- [Code-made demos](https://github.com/lemomo-ai/lemo-opuscar/tree/main/styles): `styles`

### Film toolkit

- [Demo page runtime](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/page.mjs): `core/render/page.mjs`
- [Local page server](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/serve.mjs): `core/render/serve.mjs`
- [Browser setup](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/browser.mjs): `core/render/browser.mjs`
- [Still renderer](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/still.mjs): `core/render/still.mjs`
- [Video renderer](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/video.mjs): `core/render/video.mjs`
- [Render slots](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/slot.mjs): `core/render/slot.mjs`
- [Sound events](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/events.mjs): `core/render/events.mjs`
- [Text timing check](https://github.com/lemomo-ai/lemo-opuscar/blob/main/core/render/readcheck.mjs): `core/render/readcheck.mjs`
- [Music and effects](https://github.com/lemomo-ai/lemo-opuscar/tree/main/core/audio): `core/audio`
- [Speech tools](https://github.com/lemomo-ai/lemo-opuscar/tree/main/core/tts): `core/tts`

### Style gallery

- [Style gallery](https://github.com/lemomo-ai/lemo-opuscar/blob/main/styleboard/index.html): `styleboard/index.html`

### Other components

- **Film maker**

## Connections

- Film maker → Opuscar skill: starts with (evidence: `README.md`)
- Opuscar skill → Direction guide: reads guide (evidence: `README.md`)
- Opuscar skill → Technique guide: reads guide (evidence: `README.md`)
- Opuscar skill → Style prompts: selects style (evidence: `README.md`)
- Opuscar skill → Style customization: customizes style (evidence: `README.md`)
- Opuscar skill → Storyboard preview: offers preview (evidence: `README.md`)
- Opuscar skill → Film project: directs creation (evidence: `README.md`)
- Style prompts → Code-made demos: pairs with (evidence: `README.md`)
- Film project → Video renderer: renders with (evidence: `README.md`)
- Film project → Music and effects: uses sound (evidence: `README.md`)
- Film project → Speech tools: uses narration (evidence: `README.md`)
- Video renderer → Demo page runtime: opens page (evidence: `core/render/video.mjs`)
- Video renderer → Render slots: uses optionally (evidence: `core/render/video.mjs`)
- Demo page runtime → Local page server: serves page (evidence: `core/render/page.mjs`)
- Demo page runtime → Browser setup: configures browser (evidence: `core/render/page.mjs`)
- Still renderer → Demo page runtime: opens page (evidence: `core/render/still.mjs`)
- Sound events → Demo page runtime: opens page (evidence: `core/render/events.mjs`)
- Text timing check → Demo page runtime: opens page (evidence: `core/render/readcheck.mjs`)
- Film maker → Style gallery: browses styles (evidence: `README.md`)
