Metadata-Version: 2.4
Name: video-compose
Version: 0.6.0
Summary: JSON-driven video composition engine for the Trollfabriken FX ecosystem
Project-URL: Homepage, https://github.com/tomastimelock/trollfabriken-video-compose-bootstrap
Project-URL: Repository, https://github.com/tomastimelock/trollfabriken-video-compose-bootstrap
Project-URL: Issues, https://github.com/tomastimelock/trollfabriken-video-compose-bootstrap/issues
Author-email: Trollfabriken <tomasamlov@gmail.com>
License: MIT
Keywords: composition,ffmpeg,json2video,presentation,tvcs,video
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Requires-Dist: click>=8.1
Requires-Dist: numpy>=1.24
Requires-Dist: pillow>=10.0
Requires-Dist: pydantic>=2.0
Provides-Extra: ai
Requires-Dist: anthropic>=0.40; extra == 'ai'
Requires-Dist: cairosvg>=2.5; extra == 'ai'
Provides-Extra: all
Requires-Dist: anthropic>=0.40; extra == 'all'
Requires-Dist: audio-arrange; extra == 'all'
Requires-Dist: cairosvg>=2.5; extra == 'all'
Requires-Dist: chart-fx; extra == 'all'
Requires-Dist: color-fx; extra == 'all'
Requires-Dist: cut-fx; extra == 'all'
Requires-Dist: fastapi>=0.100; extra == 'all'
Requires-Dist: fractal-fx; extra == 'all'
Requires-Dist: geo-map-fx; extra == 'all'
Requires-Dist: jmespath>=1.0; extra == 'all'
Requires-Dist: mathviz-fx; extra == 'all'
Requires-Dist: openai>=1.0; extra == 'all'
Requires-Dist: openpyxl>=3.1; extra == 'all'
Requires-Dist: pandas>=2.0; extra == 'all'
Requires-Dist: playwright; extra == 'all'
Requires-Dist: qrcode[pil]>=7.4; extra == 'all'
Requires-Dist: shape-fx; extra == 'all'
Requires-Dist: slide-render; extra == 'all'
Requires-Dist: sqlalchemy>=2.0; extra == 'all'
Requires-Dist: still-motion; extra == 'all'
Requires-Dist: talk-cast; extra == 'all'
Requires-Dist: text-fx; extra == 'all'
Requires-Dist: uvicorn[standard]>=0.22; extra == 'all'
Requires-Dist: web-overlay; extra == 'all'
Provides-Extra: audio
Requires-Dist: audio-arrange; extra == 'audio'
Requires-Dist: talk-cast; extra == 'audio'
Provides-Extra: chart
Requires-Dist: chart-fx; extra == 'chart'
Provides-Extra: cut
Requires-Dist: cut-fx; extra == 'cut'
Provides-Extra: data
Requires-Dist: jmespath>=1.0; extra == 'data'
Requires-Dist: openpyxl>=3.1; extra == 'data'
Requires-Dist: pandas>=2.0; extra == 'data'
Requires-Dist: sqlalchemy>=2.0; extra == 'data'
Provides-Extra: dev
Requires-Dist: hatch; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: fractal
Requires-Dist: fractal-fx; extra == 'fractal'
Provides-Extra: fx
Requires-Dist: chart-fx; extra == 'fx'
Requires-Dist: color-fx; extra == 'fx'
Requires-Dist: cut-fx; extra == 'fx'
Requires-Dist: fractal-fx; extra == 'fx'
Requires-Dist: geo-map-fx; extra == 'fx'
Requires-Dist: mathviz-fx; extra == 'fx'
Requires-Dist: shape-fx; extra == 'fx'
Requires-Dist: still-motion; extra == 'fx'
Requires-Dist: text-fx; extra == 'fx'
Provides-Extra: geomap
Requires-Dist: geo-map-fx; extra == 'geomap'
Provides-Extra: grade
Requires-Dist: color-fx; extra == 'grade'
Provides-Extra: llm
Requires-Dist: openai>=1.0; extra == 'llm'
Provides-Extra: lottie
Requires-Dist: lottie>=0.6; extra == 'lottie'
Provides-Extra: mathviz
Requires-Dist: mathviz-fx; extra == 'mathviz'
Provides-Extra: qr
Requires-Dist: qrcode[pil]>=7.4; extra == 'qr'
Provides-Extra: server
Requires-Dist: fastapi>=0.100; extra == 'server'
Requires-Dist: uvicorn[standard]>=0.22; extra == 'server'
Provides-Extra: shape
Requires-Dist: shape-fx; extra == 'shape'
Provides-Extra: slide
Requires-Dist: playwright; extra == 'slide'
Requires-Dist: slide-render; extra == 'slide'
Provides-Extra: still
Requires-Dist: still-motion; extra == 'still'
Provides-Extra: svg
Requires-Dist: cairosvg>=2.5; extra == 'svg'
Provides-Extra: text
Requires-Dist: text-fx; extra == 'text'
Provides-Extra: web
Requires-Dist: playwright; extra == 'web'
Requires-Dist: web-overlay; extra == 'web'
Description-Content-Type: text/markdown

# video-compose

JSON-driven video composition engine for the Trollfabriken FX ecosystem.

Define a presentation or video as a **TVCS** (Trollfabriken Video Composition Spec) JSON file and render it to MP4 or PNG frames. The JSON can be authored by hand or generated by an AI via the APISuite `VideoComposeProvider`.

## Quick start

```bash
pip install video-compose[all]
video-compose render my_presentation.json
```

## Spec example

```json
{
  "tvcs": "1.0",
  "output": { "width": 1280, "height": 720, "fps": 30, "formats": ["mp4"] },
  "theme": { "palette": "neon", "background": "#0d0d1a" },
  "segments": [
    { "id": "intro", "type": "mathviz", "duration": 4.0, "effect": "matrix_rain" },
    { "id": "chart", "type": "chart", "duration": 6.0, "chart_type": "bar",
      "data": { "title": "Revenue", "categories": ["Q1","Q2"], "series": [{"name":"2024","values":[420,580]}] } }
  ],
  "transitions": { "default": { "type": "dissolve", "duration": 0.5 } }
}
```

## CLI

```
video-compose render   spec.json            Render to MP4
video-compose validate spec.json            Validate without rendering
video-compose preview  spec.json intro      Render single segment
video-compose schema                        Print full JSON Schema
```

## Optional dependencies

| Extra        | Enables |
|---|---|
| `[mathviz]`  | mathviz-fx background generators |
| `[chart]`    | chart-fx animated charts |
| `[geomap]`   | geo-map-fx choropleth maps |
| `[shape]`    | shape-fx particle/geometric effects |
| `[fractal]`  | fractal-fx generative backgrounds |
| `[audio]`    | talk-cast voiceover + audio-arrange mixing |
| `[data]`     | CSV, Excel, SQL, REST API data sources |
| `[web]`      | web-overlay HTML overlays (requires Playwright) |
| `[all]`      | Everything above |

## Ecosystem

`video-compose` is the composition layer for the Trollfabriken FX suite. It orchestrates:
`mathviz-fx` · `chart-fx` · `geo-map-fx` · `shape-fx` · `fractal-fx` · `text-fx` · `color-fx` · `cut-fx` · `talk-cast` · `audio-arrange` · `slide-render` · `still-motion` · `web-overlay`
