PrintFilm is a five-service production app, not a local model
PrintFilm covers the work around generated media. A creator can start with a topic or drama script, split it into shots, create reusable character and scene assets, generate images and video, redo one shot, and compose the result with FFmpeg. The repository also includes a user site, an admin site, task management, orders, model routing, and an API under /api/v1.
The documented Docker stack runs 5 services: PostgreSQL, Redis, a FastAPI backend, the user frontend, and the admin frontend. Default host ports are 15432, 16379, 8000, 8080, and 8081. Public application images come from an Alibaba Cloud registry, while a second Compose file builds the backend and both frontends from source. Persistent volumes hold the database, cache, and generated media.
That scope suits a small studio or service operator better than a lone creator testing prompts. Projects continue in the background, shot history stays available, and the admin side handles users, tasks, models, and optional billing. It also creates more failure surfaces than a desktop generator: database migrations, queues, storage, secrets, remote inference, and media composition all need monitoring.
v0.2.0 depends on TokenFree for real generation
The open-source configuration routes text, image, and video work through TokenFree's OpenAI-compatible API. ARK_MOCK=true lets you inspect the interface without a key, but the README says it cannot produce real images or video. Default model names point to Kimi, Seedream, and Seedance choices available through that upstream service. The key can live in environment configuration or be saved through the admin interface.
This is self-hosted application code, not self-hosted inference. Your database, interfaces, tasks, and media can run on your machine, while prompts and generation inputs still leave for the configured provider. Before using private scripts or client assets, review that provider's terms, data handling, regional availability, quotas, and pricing. PrintFilm's MIT license does not govern the upstream models or service.
What happened when we ran it
Our sandbox entered ./backend/ at commit cdcd1f7 and installed 102 packages in 28 seconds. The environment used 162 MB, while the checkout contained 757 files, about 107,205 source lines, and 52.7 MB. The build passed in 6 seconds in a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets.
Pytest failed after 40 seconds. The summary reported 537 passed, 4 failed, 5 warnings, and 73 collection/setup errors out of 614. Many errors ended with ConnectionRefusedError for PostgreSQL at 127.0.0.1:15432, including task executor and poller cases. The log establishes that no database service answered there; it does not show why that service was unavailable.
One of the 4 failures also ended at the refused database connection. The other 3 were arithmetic assertions in video estimates. One expected the 720p increment to equal 336 but observed 773 - 353. Two expected an HD estimate of 756 to equal 336 * 2. These are independent of the connection-error wording in the supplied summary, so a running database alone would not account for the whole failed suite.
Pip-audit reported 40 known vulnerabilities. The repository has a Dockerfile and tests directory, but our scan found 0 CI workflow files. We did not start the complete Compose stack, connect TokenFree, generate a shot, or judge final media quality. The measured result covers the backend install, build, test command, and dependency audit only.
Billing estimates need a green gate before taking money
Billing is optional and disabled by default. When enabled, PrintFilm can freeze an estimate, record upstream usage, settle the actual amount, and refund the unused balance. The documentation describes wallet ledgers, payment callbacks, per-task usage events, provider quota conversion, and fallback estimates when upstream usage is missing. That is real financial state, even if each individual generation costs little.
The three failed estimate assertions therefore matter more than ordinary display bugs. They involve 720p or project-HD video values used around fragment and regeneration paths. The log does not tell us whether the implementation or the expected values are correct. It does tell us that the repository's own acceptance equations disagreed at commit cdcd1f7. Keep BILLING_ENABLED=false until the intended price rule is decided, tested, and reconciled against upstream charges.
Chinese documentation is detailed and operationally candid
The README and supporting docs are written in Simplified Chinese, with no English version. For the intended reader, they are strong. The setup names the secrets to replace, explains how an existing account becomes an admin, distinguishes public images from source builds, and documents health checks. Separate guides cover billing, episode structure, shot timing, Seedance parameters, and local middleware.
There are useful warnings buried beyond the quick start. Chinese subtitles need suitable system fonts or FFmpeg can render square boxes. Local development may expose PostgreSQL and Redis on 0.0.0.0, which the deployment guide calls risky. Production object storage adds another credential set. The open-source release also omits the operator's live deployment handbook and internal reports, as the v0.2.0 notes state.
A September 24 push shows activity, while v0.2.0 remains young
GitHub showed 4,081 stars, 3 combined issues and pull requests, and a last push on September 24, 2026. Version 0.2.0 was released on September 17, one week after the repository was created. The three open issues had no useful technical reports when checked, so the low count says little about defect volume or support speed.
PrintFilm is worth a contained trial if its Chinese-first workflow and TokenFree dependency match your operation. Start with mock mode, then a disposable provider key and a non-billing project. The product breadth is impressive for a young repository, but our 537 passing tests do not cancel 4 failures, 73 setup errors, or 40 audit findings.

