pssah4_vault-operator/tools/template-analyzer
Sebastian Hanke 33c0ef9e52 chore(rebrand): bundled skill, relay, tools, leftover prose -> Vault Operator
Cleanup pass for the directories the earlier batches missed:
- bundled-skills/obsilo-guide -> vault-operator-guide (dir + SKILL.md content +
  frontmatter name; trigger regex now matches "vault operator" too, keeps
  "obsilo" so users who still call it the old name during the transition still
  hit the guide). main.js rebuilt (bundled skills are embedded).
- relay/ (Cloudflare Worker sub-project): README + index.ts prose/messages
  rebranded; the worker name `obsilo-relay` and the `relay: 'obsilo'` health-
  check field are KEPT (renaming would orphan existing relay deployments and
  break clients that read the health field).
- tools/template-analyzer/README.md rebranded.
- CHANGELOG.md / README.md leftover prose ("obsilo Releases", `cd obsilo`,
  German possessive "Obsilos" -> "Vault Operators").
- _devprocess/*.md: German possessives + code-snippet identifiers in historical
  ADRs/specs (ObsiloPlugin/ObsiloEmbeddingProvider/ObsiloSettings/...). Audit-
  report filenames (AUDIT-NNN-obsilo-*.md) are left as-is -- renaming them would
  break every link to them; they are archival artifacts.

KEPT (data/protocol identifiers, as before): the `obsilo` surface tag in
docs/code, obsidian://obsilo-chat protocol, .obsilo-vault folders, OBSILO_PUBLIC_TOKEN
secret, obsilo-relay worker name, source_interface defaults.

Build clean, 1356 tests green. Phase B + D complete.

Refs: rebrand to Vault Operator (Phase B+D cleanup)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 01:10:38 +02:00
..
.gitignore Add Template Analyzer Streamlit app, vision prompt, and requirements 2026-03-15 00:19:48 +01:00
README.md chore(rebrand): bundled skill, relay, tools, leftover prose -> Vault Operator 2026-05-13 01:10:38 +02:00

Vault Operator Template Analyzer

Analyzes a PPTX template and generates a Visual Design Language (VDL) Skill document for use in Vault Operator.

Prerequisites

  • Python 3.11+
  • LibreOffice (for slide rendering)
  • OpenRouter API Key (openrouter.ai/keys)

macOS

brew install --cask libreoffice

Linux (Ubuntu/Debian)

sudo apt install libreoffice

Setup

cd tools/template-analyzer
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Usage

Web UI (Streamlit)

streamlit run app.py

Opens a browser with:

  1. OpenRouter API Key input
  2. Model Picker (curated suggestions + live fetch from OpenRouter)
  3. File upload for .pptx
  4. Analyze button
  5. Download the generated SKILL.md

CLI

python analyze.py path/to/template.pptx --api-key sk-or-... --output skill.md

Options:

  • --api-key (required): Your OpenRouter API key
  • --model: OpenRouter model ID (default: anthropic/claude-sonnet-4.5)
  • --output / -o: Output file path (default: {template-name}-skill.md)

How It Works

  1. python-pptx: Extracts shapes, positions, text, placeholders, theme colors, fonts
  2. LibreOffice headless: Renders each slide to PNG for visual analysis
  3. Heuristic classification: Pre-classifies slides by shape patterns (chevrons, grids, etc.)
  4. Claude Vision (via OpenRouter): Analyzes slide images + structural data for semantic interpretation
  5. VDL generation: Produces a SKILL.md with compositions, brand DNA, and shape mappings

Output Format

The generated SKILL.md follows the Visual Design Language format:

---
name: template-name
description: Template Name -- N Slides, M Compositions
trigger: template|name
source: user
requiredTools: [create_pptx]
---

# Template Name -- Visual Design Language

## Brand-DNA
- Primary: #hex | Accent: #hex, #hex
- Heading: Font | Body: Font

## Compositions
### Composition Name (Slides 1, 5, 12)
**Meaning**: What this layout communicates
**Use when**: Content scenario

## Compositions by Narrative Phase
| Phase | Compositions | Rationale |
...

## Design Rules
...

Import the generated file as a User Skill in Vault Operator (Settings > Skills > Import).

Customization

The Claude Vision prompt is in prompts/vision-prompt.md. Edit it to adjust how slides are interpreted -- for example, to add domain-specific composition types or refine classification criteria.