Can you self-host an AI generated movie stack tonight?
Most “how to make an AI movie” guides bounce you across five SaaS tabs and a CapCut export. Fine for one clip. Miserable for a repeatable short-drama line. PRINTFILM v0.2.0 is different: open-source studio on your box – topic or script → storyboard → images → Seedance video (voice-over included at render) → FFmpeg final cut.
Repo: github.com/yi1108/printfilm (MIT). Pin 0.2.0 from the English README as of the current docs (re-check the repo tag before you automate upgrades – labels move). Deploy path only: Docker, keys, health, first short, then the traps that actually stop people.
System requirements for PRINTFILM
Use Docker. Desktop on macOS/Windows, or Engine + Compose on Linux. No local GPU for the app – generation leaves via TokenFree’s OpenAI-compatible API (Seedance / Seedream / LLM), per project docs.
| Item | Minimum (practical) | Comfortable |
|---|---|---|
| OS | Linux / macOS / Windows with Docker | Same |
| RAM | Unofficial guess: ~8 GB free for Postgres+Redis+API+two frontends | 16 GB+ |
| Disk | Room for images plus a growing media volume (size not fixed in docs) | SSD with headroom for MP4s |
| CPU | Modern multi-core | Extra cores help FFmpeg compose |
| GPU | Not required for Docker stack | N/A (cloud models) |
| Network | Pull Aliyun ACR; call TokenFree | Stable outbound HTTPS |
Hybrid layout instead? deploy/README.md wants Python 3.12, FFmpeg on PATH, and Node.js. On Linux, missing CJK fonts turn burned-in subtitles into □ until you install something like fonts-wqy-zenhei and recompose.
Download / official source
git clone https://github.com/yi1108/printfilm.git
cd printfilm
cp deploy/.env.docker.example deploy/.env.docker
Public images come from Aliyun ACR under the gcc namespace – no registry login. Pull blocked in your region? Jump straight to docker-compose.full.yml with --build (install section). Don’t start from random forks.
Install PRINTFILM v0.2.0 (Docker)
Edit deploy/.env.docker before the first up. Minimum from the example file:
POSTGRES_PASSWORD– not the sample defaultSECRET_KEY– long random stringOPENAI_API_KEYandARK_API_KEY– both set (see tip)- Optional:
ARK_MOCK=truefor empty UI only
# public images
docker compose --env-file deploy/.env.docker up -d
docker compose --env-file deploy/.env.docker ps
docker compose --env-file deploy/.env.docker logs -f api
Web and admin wait on API health. Endpoints:
- User app:
http://localhost:8080 - Admin:
http://localhost:8081 - API docs:
http://localhost:8000/docs - Health:
http://localhost:8000/api/health
docker compose --env-file deploy/.env.docker -f docker-compose.full.yml up -d --build
That’s the ACR-failure path – full local build, not a “stack is dead” signal.
Pro tip:
OPENAI_API_KEYandARK_API_KEYmust be the same TokenFreesk-...value. One left asreplace-meis still the usual “UI loads, generate dies” failure (401 / model 404 show up even when the other field looks filled).
First-time configuration
Key from tokenfree.com (console → API keys). Snippet shaped like the project’s Docker template – model IDs as of deploy/.env.docker.example; confirm they still exist on your TokenFree plan before you depend on them:
ARK_MOCK=false
OPENAI_API_KEY=sk-your-key
OPENAI_BASE_URL=https://www.tokenfree.com/v1
ARK_API_KEY=sk-your-key
MODEL_LLM=kimi-k2.6
MODEL_IMAGE=seedream-5-0-pro
MODEL_VIDEO=seedance-2-5
BILLING_ENABLED=false
Env is injected at container start, so key edits need:
docker compose --env-file deploy/.env.docker up -d --force-recreate api
Register at http://localhost:8080/auth first. Admin is opt-in: put that already-registered email in ADMIN_BOOTSTRAP_EMAILS, recreate api again. Bootstrap only promotes – it never creates the account.
Later you can also point models through Admin → System settings → Models (TokenFree channel). Back up volumes before host moves if you care about that state.
There’s a quiet moment after containers go green where the stack feels “done,” even though you haven’t spent a single generation credit. That gap is where people call the product broken when the wiring is just unfinished.
Verify the install works
Actually check three things:
curl -s http://localhost:8000/api/health– healthy payload;ark_mockfalse once real keys are live./docsOpenAPI UI loads.- Log into the user app, start one trivial one-scene short. If generation errors, fix keys/models before you blame Docker.
A model 404 means that id isn’t on your TokenFree list – pick what the admin dropdown actually offers (IDs drift; the example file is a starting point, not a contract).
Common install errors and fixes
Image/video: key not configured – still replace-me in env, or empty admin channel. Fix, then --force-recreate api.
Health: ark_mock true – ARK_MOCK=false, non-empty keys, recreate api. README troubleshooting spells this out.
401 / insufficient quota – TokenFree console: key on? balance left?
Web never up – API healthcheck failing (Postgres/Redis, bad SECRET_KEY, wrong env file). ps + logs -f api.
ACR pull timeouts – docker-compose.full.yml ... --build.
Admin still a normal user – bootstrap email set before register, or recreate skipped. Register → promote → recreate.
Why won’t bootstrap invent users? Email registration is the identity source of truth. Auto-creating admins from env would skip verification and leave “ghost” superusers on every redeploy.
Upgrade and uninstall
docker compose --env-file deploy/.env.docker pull
docker compose --env-file deploy/.env.docker up -d
Stop, keep volumes:
docker compose --env-file deploy/.env.docker down
Full wipe (Postgres + media – irreversible):
docker compose --env-file deploy/.env.docker down -v
cd .. && rm -rf printfilm
Export media and dump Postgres first if billing rows or in-admin settings matter to you.
In-repo short-drama notes and Seedance parameter docs help once you leave the happy path; FFmpeg subtitle burn-in is the usual next sharp edge on hybrid hosts.
FAQ
Is PRINTFILM free for AI generated movie output?
MIT code. BILLING_ENABLED=false by default. TokenFree (or whatever you route) still bills tokens. Your cost locally is machine + disk.
Do I need Seedance or FFmpeg installed on the host?
Full Docker: FFmpeg compose stays inside the stack; you never install Seedance locally – video goes out with MODEL_VIDEO=seedance-2-5 as of the example env (confirm current IDs). Hybrid host install is the exception: FFmpeg must be on PATH because the API shells out for the final cut.
Can I run without any API key?
Only ARK_MOCK=true for UI shells. No real storyboard→image→video media. v0.2.0’s documented open build has no fully offline generative path. Need air-gapped models? That’s a different architecture (local ComfyUI-style stacks), not this TokenFree-wired studio – don’t force PRINTFILM into that role.
Clone, set the secrets in deploy/.env.docker, docker compose --env-file deploy/.env.docker up -d, and hold the celebration until /api/health shows mock off and a one-scene short finishes without a key error.