flmkr 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flmkr-0.1.0/.github/workflows/pr-validation.yml +52 -0
- flmkr-0.1.0/.github/workflows/release.yml +24 -0
- flmkr-0.1.0/.gitignore +78 -0
- flmkr-0.1.0/PKG-INFO +138 -0
- flmkr-0.1.0/README.md +82 -0
- flmkr-0.1.0/dev-notes/FLMKR /342/200/224 TERMINAL UI IMPLEMENTATION SPEC.md" +1743 -0
- flmkr-0.1.0/dev-notes/GOAL-0.md +773 -0
- flmkr-0.1.0/dev-notes/GOAL-1.md +2284 -0
- flmkr-0.1.0/dev-notes/GOAL-2.md +2957 -0
- flmkr-0.1.0/dev-notes/GOAL-3.md +756 -0
- flmkr-0.1.0/dev-notes/GOAL-4.md +773 -0
- flmkr-0.1.0/dev-notes/GOAL-5.md +677 -0
- flmkr-0.1.0/dev-notes/GOAL.md +59 -0
- flmkr-0.1.0/dev-notes/PROGRESS.md +57 -0
- flmkr-0.1.0/dev-notes/SECURITY.md +53 -0
- flmkr-0.1.0/dev-notes/SPEC.md +188 -0
- flmkr-0.1.0/flmkr/__init__.py +20 -0
- flmkr-0.1.0/flmkr/agents.py +530 -0
- flmkr-0.1.0/flmkr/cli.py +429 -0
- flmkr-0.1.0/flmkr/config.py +144 -0
- flmkr-0.1.0/flmkr/editorial.py +155 -0
- flmkr-0.1.0/flmkr/event_store.py +127 -0
- flmkr-0.1.0/flmkr/events.py +113 -0
- flmkr-0.1.0/flmkr/exceptions.py +75 -0
- flmkr-0.1.0/flmkr/llm.py +230 -0
- flmkr-0.1.0/flmkr/mcp_server.py +356 -0
- flmkr-0.1.0/flmkr/models.py +438 -0
- flmkr-0.1.0/flmkr/orchestrator.py +436 -0
- flmkr-0.1.0/flmkr/project.py +334 -0
- flmkr-0.1.0/flmkr/providers.py +779 -0
- flmkr-0.1.0/flmkr/qa.py +513 -0
- flmkr-0.1.0/flmkr/tui.py +445 -0
- flmkr-0.1.0/pyproject.toml +114 -0
- flmkr-0.1.0/tests/conftest.py +57 -0
- flmkr-0.1.0/tests/test_all.py +602 -0
- flmkr-0.1.0/tests/test_e2e.py +299 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: PR Validation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.11", "3.12"]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ matrix.python-version }}
|
|
20
|
+
- run: pip install -e ".[dev]"
|
|
21
|
+
- run: pytest tests/ -v --no-cov
|
|
22
|
+
|
|
23
|
+
lint:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version: "3.12"
|
|
30
|
+
- run: pip install ruff
|
|
31
|
+
- run: ruff check flmkr/ tests/
|
|
32
|
+
- run: ruff format --check flmkr/ tests/
|
|
33
|
+
|
|
34
|
+
typecheck:
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
- uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.12"
|
|
41
|
+
- run: pip install mypy
|
|
42
|
+
- run: mypy flmkr/ --ignore-missing-imports
|
|
43
|
+
|
|
44
|
+
security:
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
- uses: actions/setup-python@v5
|
|
49
|
+
with:
|
|
50
|
+
python-version: "3.12"
|
|
51
|
+
- run: pip install bandit
|
|
52
|
+
- run: bandit -r flmkr/ -ll --skip B101,B608
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
id-token: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
environment:
|
|
15
|
+
name: pypi
|
|
16
|
+
url: https://pypi.org/p/flmkr
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
- run: pip install build
|
|
23
|
+
- run: python -m build
|
|
24
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
flmkr-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
venv/
|
|
23
|
+
ENV/
|
|
24
|
+
env/
|
|
25
|
+
.venv
|
|
26
|
+
|
|
27
|
+
# pytest
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
.coverage
|
|
30
|
+
htmlcov/
|
|
31
|
+
*.cover
|
|
32
|
+
.hypothesis/
|
|
33
|
+
|
|
34
|
+
# mypy
|
|
35
|
+
.mypy_cache/
|
|
36
|
+
.dmypy.json
|
|
37
|
+
dmypy.json
|
|
38
|
+
|
|
39
|
+
# Ruff
|
|
40
|
+
.ruff_cache/
|
|
41
|
+
|
|
42
|
+
# IDE
|
|
43
|
+
.idea/
|
|
44
|
+
.vscode/
|
|
45
|
+
*.swp
|
|
46
|
+
*.swo
|
|
47
|
+
|
|
48
|
+
# FLMKR project
|
|
49
|
+
flmkr-project/
|
|
50
|
+
*.flmkr/
|
|
51
|
+
.flmkr/
|
|
52
|
+
assets/generated/
|
|
53
|
+
assets/video/
|
|
54
|
+
assets/audio/
|
|
55
|
+
assets/images/
|
|
56
|
+
renders/
|
|
57
|
+
previews/
|
|
58
|
+
*.mp4
|
|
59
|
+
*.mov
|
|
60
|
+
*.wav
|
|
61
|
+
*.exr
|
|
62
|
+
*.safetensors
|
|
63
|
+
*.bin
|
|
64
|
+
*.pt
|
|
65
|
+
*.ckpt
|
|
66
|
+
|
|
67
|
+
# OS
|
|
68
|
+
.DS_Store
|
|
69
|
+
Thumbs.db
|
|
70
|
+
|
|
71
|
+
# Secrets
|
|
72
|
+
*.key
|
|
73
|
+
*.pem
|
|
74
|
+
*.env.local
|
|
75
|
+
.env
|
|
76
|
+
**/.env
|
|
77
|
+
**/.env.*.local
|
|
78
|
+
*.xml
|
flmkr-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: flmkr
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: AI Filmmaking Harness — an autonomous, terminal-native agent for planning, generating, validating, editing, and completing films.
|
|
5
|
+
Project-URL: Homepage, https://github.com/dreampixelsforge/flmkr
|
|
6
|
+
Project-URL: Repository, https://github.com/dreampixelsforge/flmkr
|
|
7
|
+
Project-URL: Documentation, https://flmkr.dreampixelsforge.com
|
|
8
|
+
Project-URL: Issues, https://github.com/dreampixelsforge/flmkr/issues
|
|
9
|
+
Author: Dream Pixels Forge
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
Keywords: agent,ai,cli,film,production,video
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Multimedia :: Video
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: aiohttp>=3.10
|
|
23
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
24
|
+
Requires-Dist: cattrs>=24.1
|
|
25
|
+
Requires-Dist: click>=8.1.7
|
|
26
|
+
Requires-Dist: httpx>=0.27.0
|
|
27
|
+
Requires-Dist: mcp>=1.0
|
|
28
|
+
Requires-Dist: orjson>=3.10
|
|
29
|
+
Requires-Dist: pathspec>=0.12
|
|
30
|
+
Requires-Dist: pydantic-settings>=2.5
|
|
31
|
+
Requires-Dist: pydantic>=2.8
|
|
32
|
+
Requires-Dist: rich>=13.9
|
|
33
|
+
Requires-Dist: sqlalchemy>=2.0.36
|
|
34
|
+
Requires-Dist: structlog>=24.4
|
|
35
|
+
Requires-Dist: tenacity>=9.0
|
|
36
|
+
Requires-Dist: uuid-utils>=0.9
|
|
37
|
+
Requires-Dist: watchdog>=5.0
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: bandit>=1.7; extra == 'dev'
|
|
40
|
+
Requires-Dist: coverage[toml]>=7.6; extra == 'dev'
|
|
41
|
+
Requires-Dist: freezegun>=1.5; extra == 'dev'
|
|
42
|
+
Requires-Dist: hypothesis>=6.120; extra == 'dev'
|
|
43
|
+
Requires-Dist: mypy>=1.13; extra == 'dev'
|
|
44
|
+
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
|
|
45
|
+
Requires-Dist: pytest-cov>=6.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: pytest-xdist>=3.6; extra == 'dev'
|
|
47
|
+
Requires-Dist: pytest>=8.3; extra == 'dev'
|
|
48
|
+
Requires-Dist: respx>=0.22; extra == 'dev'
|
|
49
|
+
Requires-Dist: ruff>=0.8; extra == 'dev'
|
|
50
|
+
Provides-Extra: redis
|
|
51
|
+
Requires-Dist: arq>=0.26; extra == 'redis'
|
|
52
|
+
Requires-Dist: redis>=5.2; extra == 'redis'
|
|
53
|
+
Provides-Extra: ui
|
|
54
|
+
Requires-Dist: textual>=1.0; extra == 'ui'
|
|
55
|
+
Description-Content-Type: text/markdown
|
|
56
|
+
|
|
57
|
+
# FLMKR — AI Filmmaking Harness
|
|
58
|
+
|
|
59
|
+
An autonomous, terminal-native AI filmmaking agent that transforms creative ideas into complete audiovisual productions.
|
|
60
|
+
|
|
61
|
+
## What It Is
|
|
62
|
+
|
|
63
|
+
FLMKR is an **agent harness for filmmaking** — not a video generator, not a prompt engine, not a GUI wrapper. It's the environment that allows an autonomous agent to perform complex filmmaking work:
|
|
64
|
+
|
|
65
|
+
- Plan productions from ideas, screenplays, or treatments
|
|
66
|
+
- Create and maintain a Production Bible (characters, locations, style, continuity)
|
|
67
|
+
- Generate shots through provider-agnostic adapters (Agnes, Kling, MiniMax, Runway)
|
|
68
|
+
- Run QA at chunk/shot/scene levels with continuity checking
|
|
69
|
+
- Recover from failures without restarting the entire production
|
|
70
|
+
- Render final films with editorial assembly
|
|
71
|
+
|
|
72
|
+
## Quick Start
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Install
|
|
76
|
+
pip install -e ".[dev]"
|
|
77
|
+
|
|
78
|
+
# Create a new film project
|
|
79
|
+
flmkr create "A woman discovers her autonomous car is taking her somewhere she never asked to go."
|
|
80
|
+
|
|
81
|
+
# Plan the production
|
|
82
|
+
flmkr plan
|
|
83
|
+
|
|
84
|
+
# Run production
|
|
85
|
+
flmkr run
|
|
86
|
+
|
|
87
|
+
# Check status
|
|
88
|
+
flmkr status
|
|
89
|
+
|
|
90
|
+
# Resume after interruption
|
|
91
|
+
flmkr resume
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Architecture
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
CLI/TUI
|
|
98
|
+
↓
|
|
99
|
+
Producer Orchestrator
|
|
100
|
+
↓
|
|
101
|
+
Agents (Story, Character, Cinematography, Generation, QA, Editorial, Sound)
|
|
102
|
+
↓
|
|
103
|
+
Provider Adapters (Agnes, Kling, MiniMax, Runway)
|
|
104
|
+
↓
|
|
105
|
+
Production Bible (persistent state)
|
|
106
|
+
↓
|
|
107
|
+
Event Log (durable, resumable)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Project Structure
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
flmkr/
|
|
114
|
+
├── __init__.py # Package entry
|
|
115
|
+
├── cli.py # Click CLI commands
|
|
116
|
+
├── config.py # Pydantic settings
|
|
117
|
+
├── models.py # Core data models (Bible, Shot, Scene, etc.)
|
|
118
|
+
├── agents.py # Agent framework
|
|
119
|
+
├── providers.py # Provider adapters
|
|
120
|
+
├── orchestrator.py # Producer/Orchestrator
|
|
121
|
+
├── qa.py # QA engine
|
|
122
|
+
├── editorial.py # Editorial/timeline engine
|
|
123
|
+
├── project.py # Project state container
|
|
124
|
+
├── event_store.py # SQLite event log
|
|
125
|
+
├── events.py # Event types
|
|
126
|
+
├── exceptions.py # Error types
|
|
127
|
+
└── tui.py # Rich terminal UI
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Requirements
|
|
131
|
+
|
|
132
|
+
- Python 3.11+
|
|
133
|
+
- SQLite (bundled with Python)
|
|
134
|
+
- Internet connection for provider APIs
|
|
135
|
+
|
|
136
|
+
## License
|
|
137
|
+
|
|
138
|
+
MIT
|
flmkr-0.1.0/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# FLMKR — AI Filmmaking Harness
|
|
2
|
+
|
|
3
|
+
An autonomous, terminal-native AI filmmaking agent that transforms creative ideas into complete audiovisual productions.
|
|
4
|
+
|
|
5
|
+
## What It Is
|
|
6
|
+
|
|
7
|
+
FLMKR is an **agent harness for filmmaking** — not a video generator, not a prompt engine, not a GUI wrapper. It's the environment that allows an autonomous agent to perform complex filmmaking work:
|
|
8
|
+
|
|
9
|
+
- Plan productions from ideas, screenplays, or treatments
|
|
10
|
+
- Create and maintain a Production Bible (characters, locations, style, continuity)
|
|
11
|
+
- Generate shots through provider-agnostic adapters (Agnes, Kling, MiniMax, Runway)
|
|
12
|
+
- Run QA at chunk/shot/scene levels with continuity checking
|
|
13
|
+
- Recover from failures without restarting the entire production
|
|
14
|
+
- Render final films with editorial assembly
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install
|
|
20
|
+
pip install -e ".[dev]"
|
|
21
|
+
|
|
22
|
+
# Create a new film project
|
|
23
|
+
flmkr create "A woman discovers her autonomous car is taking her somewhere she never asked to go."
|
|
24
|
+
|
|
25
|
+
# Plan the production
|
|
26
|
+
flmkr plan
|
|
27
|
+
|
|
28
|
+
# Run production
|
|
29
|
+
flmkr run
|
|
30
|
+
|
|
31
|
+
# Check status
|
|
32
|
+
flmkr status
|
|
33
|
+
|
|
34
|
+
# Resume after interruption
|
|
35
|
+
flmkr resume
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Architecture
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
CLI/TUI
|
|
42
|
+
↓
|
|
43
|
+
Producer Orchestrator
|
|
44
|
+
↓
|
|
45
|
+
Agents (Story, Character, Cinematography, Generation, QA, Editorial, Sound)
|
|
46
|
+
↓
|
|
47
|
+
Provider Adapters (Agnes, Kling, MiniMax, Runway)
|
|
48
|
+
↓
|
|
49
|
+
Production Bible (persistent state)
|
|
50
|
+
↓
|
|
51
|
+
Event Log (durable, resumable)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Project Structure
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
flmkr/
|
|
58
|
+
├── __init__.py # Package entry
|
|
59
|
+
├── cli.py # Click CLI commands
|
|
60
|
+
├── config.py # Pydantic settings
|
|
61
|
+
├── models.py # Core data models (Bible, Shot, Scene, etc.)
|
|
62
|
+
├── agents.py # Agent framework
|
|
63
|
+
├── providers.py # Provider adapters
|
|
64
|
+
├── orchestrator.py # Producer/Orchestrator
|
|
65
|
+
├── qa.py # QA engine
|
|
66
|
+
├── editorial.py # Editorial/timeline engine
|
|
67
|
+
├── project.py # Project state container
|
|
68
|
+
├── event_store.py # SQLite event log
|
|
69
|
+
├── events.py # Event types
|
|
70
|
+
├── exceptions.py # Error types
|
|
71
|
+
└── tui.py # Rich terminal UI
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Requirements
|
|
75
|
+
|
|
76
|
+
- Python 3.11+
|
|
77
|
+
- SQLite (bundled with Python)
|
|
78
|
+
- Internet connection for provider APIs
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
MIT
|