v6.4.0
Usage
Docker Image
Multi-arch (linux/amd64, linux/arm64) images for this release are published to GHCR and Docker Hub.
Pull
GitHub Container Registry (GHCR):
docker pull ghcr.io/lcy362/free-short-video:6.4.0Docker Hub:
docker pull lcy362/free-short-video:v6.4.0Run
Data persistence: the app writes all generated videos, uploads and settings into
/app/.working_dirand/app/.agnes_configinside the container. A plaindocker runwithout a volume loses everything when the container is recreated. Mount these paths to your host so outputs survive restarts and can be exported.
Option A — bind mount to a host folder (recommended; files land directly in the folder):
mkdir -p ~/agnes-data/working ~/agnes-data/config
docker run -d -p 8765:8765 \
-e AGNES_API_KEY=<your-key> \
-v ~/agnes-data/working:/app/.working_dir \
-v ~/agnes-data/config:/app/.agnes_config \
ghcr.io/lcy362/free-short-video:6.4.0Your videos will be in ~/agnes-data/working/ on your machine.
Option B — named Docker volume (no host path needed; survives container recreation):
docker volume create agnes-working
docker volume create agnes-config
docker run -d -p 8765:8765 \
-e AGNES_API_KEY=<your-key> \
-v agnes-working:/app/.working_dir \
-v agnes-config:/app/.agnes_config \
ghcr.io/lcy362/free-short-video:6.4.0Export files from a named volume:
docker run --rm -v agnes-working:/data -v "$PWD":/out busybox cp -r /data/. /out/agnes-exportThen open http://localhost:8765.
Notes
- Prefer Docker Hub? Replace the image with
lcy362/free-short-video:v6.4.0. - The image already declares
VOLUMEfor both paths, sodocker run -p 8765:8765 <image>(no-v) keeps data only while you reuse the same container (stop/start); recreating the container starts fresh. AGNES_API_KEYcan also be set later in the Web UI; it is then stored in the mounted config volume.
npm
Use npx for a one-shot run or install globally:
# Quick run (no install):
npx free-short-video
# Global install:
npm install -g free-short-video
free-short-videoRequires Python 3.10+ and ffmpeg on your system.
On first run, a Python virtual environment is auto-created and dependencies are installed.
What's New
Features & Improvements
- Preview ("dry-run") endpoints for creative and manuscript tasks —
POST /api/creative/preview-scriptandPOST /api/manuscript/preview-splitlet you inspect the generated script or manuscript segments before submitting a full task. Synchronous, no task created. Preview calls share the Chat API rate limiter and have a lightweight in-process concurrency cap (429 + Retry-After) to prevent abuse. (Credit: @Khaled97Sho, PR #33) - Arabic tashkeel for TTS narration — creative and manuscript pipelines now automatically apply Arabic diacritic marks (harakat) to narration text before TTS synthesis, improving pronunciation quality. Tashkeel only affects TTS input; subtitle text and
narration.txtremain clean. (Credit: @Khaled97Sho, PR #33) - Manuscript reference images — per-segment reference images for manuscript tasks are now supported via
reference_images+reference_images_mapparameters, matching the same feature used in creative pipelines. (Credit: @Khaled97Sho, PR #33) - Language-aware narration budget — narration length for non-CJK languages now uses a language-specific characters-per-second rate (Arabic: 4.0, CJK: 5.0, others: 12.0), fixing the "narration too short for non-CJK text" issue. (Credit: @Khaled97Sho, PR #33)
- Configurable CORS origins — the
AGNES_CORS_ORIGINSenvironment variable (comma-separated) allows any companion tool to call the core API cross-origin.AGNES_CORS_ENABLEDcan force-enable or disable; auto-detects when origins are set. - China domestic API domain — the
cndomain inAGNES_DOMAIN_MAPnow correctly points toapi.agnes-ai.cn(the official China service endpoint), updated from the incorrectapihub.agnes-ai.cn(international-site fallback). The frontend domain picker reflects the correct hostname.
Refactoring & Optimizations
split_manuscript_text()extracted as a public utility — the manuscript-splitting algorithm is now available as a standalone function, used by both the manuscript pipeline and the new preview-split endpoint.
Bug Fixes
- Fixed rate-limiter live-lock — a rare synchronous acquire path race condition could stall all pipelines indefinitely. The token bucket's async path is now the primary path, with the sync path hardened to prevent the live-lock. (Credit: @Khaled97Sho, PR #33)
- Fixed image save not persisting —
POST /api/images/generationsnowawaits the image download, ensuring the generated image is actually written to disk before the response. - Fixed GitHub CodeQL alerts #43 and #47 — path-injection and information-disclosure security alerts resolved.
- Fixed PBKDF2-HMAC-SHA256 for config key IDs — config key IDs are now hashed with a proper key-derivation function instead of weaker hashing.
- Fixed Docker Hub Cloudflare WAF blocking — the Docker Hub overview update script now strips
<script>blocks and escapes<in the JSON payload to bypass the WAF XSS rule. - Fixed China domestic site domain —
AGNES_DOMAIN_MAP["cn"]corrected toapi.agnes-ai.cnper the official Agnes model catalog. (Issue #37)
Compatibility notes: The core/audio/tashkeel.py module adds a new optional dependency (mishkal). It is installed by default via requirements.txt; if missing, tashkeel silently falls back to the original text. Existing task state files are forward-compatible; no migration needed.