-
Notifications
You must be signed in to change notification settings - Fork 588
Expand file tree
/
Copy pathMakefile
More file actions
80 lines (63 loc) · 3.69 KB
/
Makefile
File metadata and controls
80 lines (63 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
.PHONY: setup install install-dev install-gpu test test-contracts lint clean preflight demo demo-list hyperframes-doctor hyperframes-warm
# ---- One-command setup ----
setup:
@echo "==> Installing Python dependencies..."
pip install -r requirements.txt
@echo ""
@echo "==> Installing Remotion composer..."
cd remotion-composer && npm install
@echo ""
@echo "==> Installing free offline TTS (Piper)..."
pip install piper-tts || echo " [skip] piper-tts install failed — TTS will use cloud providers instead"
@echo ""
@echo "==> Installing HyperFrames runtime (cache-warm via npx)..."
@echo " Pulls the 'hyperframes' npm package into the local npx cache so the"
@echo " first render doesn't pay a 30-60s cold-fetch penalty. ~20MB of disk."
@npx --yes hyperframes --version >/dev/null 2>&1 && echo " HyperFrames CLI cached (npx)" || echo " [skip] HyperFrames cache-warm failed — offline or npm unavailable; first render will fetch on demand"
@python -c "from tools.video.hyperframes_compose import HyperFramesCompose; HyperFramesCompose._npm_resolve_cache=None; c=HyperFramesCompose()._runtime_check(); print(f' HyperFrames runtime_available={c[\"runtime_available\"]}, npm={c.get(\"npm_package_version\") or c.get(\"npm_resolve_error\")}'); [print(f' note: {r}') for r in c['reasons']]" || echo " [skip] HyperFrames check failed — runtime can be set up later"
@echo ""
python -c "import shutil, os; e=os.path.exists('.env'); shutil.copy('.env.example','.env') if not e else None; print('==> Created .env from .env.example — add your API keys there.' if not e else '==> .env already exists — skipping.')"
@echo ""
@echo "Done! Open this project in your AI coding assistant and start creating."
@echo " Optional: add API keys to .env to unlock cloud providers."
@echo " Optional: run 'make install-gpu' if you have an NVIDIA GPU."
@echo " Optional: run 'make hyperframes-doctor' to fully validate the HyperFrames runtime."
@echo " Optional: run 'make hyperframes-warm' anytime to refresh the npx cache to the latest hyperframes version."
# ---- Individual installs ----
install:
pip install -r requirements.txt
install-dev:
pip install -r requirements-dev.txt
install-gpu:
pip install -r requirements-gpu.txt
pip install diffusers transformers accelerate
# ---- Testing ----
test:
python -m pytest tests/ -v
test-contracts:
python -m pytest tests/contracts/ -v
# ---- Utilities ----
preflight:
python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.provider_menu(), indent=2))"
hyperframes-doctor:
@echo "==> Probing HyperFrames runtime (node/ffmpeg/npx + hyperframes doctor)..."
python -c "from tools.video.hyperframes_compose import HyperFramesCompose; r=HyperFramesCompose().execute({'operation':'doctor'}); import json; print(json.dumps(r.data, indent=2)); print('OK' if r.success else f'FAIL: {r.error}')"
hyperframes-warm:
@echo "==> Refreshing the HyperFrames npx cache to latest..."
@echo " Uses --prefer-online so npx picks up new releases since your last run."
npx --yes --prefer-online hyperframes --version
@echo "==> Cache warm complete."
demo:
@echo "==> Rendering zero-key demo videos (no API keys needed)..."
@echo " These use only Remotion components — animated charts, text, data viz."
@echo ""
python render_demo.py
demo-list:
@python render_demo.py --list
lint:
python -m py_compile tools/base_tool.py
python -m py_compile tools/tool_registry.py
python -m py_compile tools/cost_tracker.py
python -m py_compile tools/composition_validator.py
clean:
python -c "import pathlib, shutil; [shutil.rmtree(p) for p in pathlib.Path('.').rglob('__pycache__')]; [p.unlink() for p in pathlib.Path('.').rglob('*.pyc')]"