Skip to content

v6.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Aug 06:37
· 7 commits to master since this release

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.3.0

Docker Hub:

docker pull lcy362/free-short-video:v6.3.0

Run

Data persistence: the app writes all generated videos, uploads and settings into /app/.working_dir and /app/.agnes_config inside the container. A plain docker run without 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.3.0

Your 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.3.0

Export files from a named volume:

docker run --rm -v agnes-working:/data -v "$PWD":/out busybox cp -r /data/. /out/agnes-export

Then open http://localhost:8765.

Notes

  • Prefer Docker Hub? Replace the image with lcy362/free-short-video:v6.3.0.
  • The image already declares VOLUME for both paths, so docker 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_KEY can 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-video

Requires 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

  • Complete v6 optimization roadmap (29/29 items) — every batch of the v6 roadmap is now shipped:
    • Performance (batch 2): the final compositing chain is now ffmpeg-based — identical-parameter scene concatenation uses -c copy, audio alignment/volume/silence-padding merge into a single filter pass, and subtitles render through the ASS path with per-entry styles (AGNES_SUBTITLE_ASS, with automatic fallback to the moviepy path). Poetry videos compose all scenes in one pass instead of re-encoding per scene. A dedicated encoding thread pool isolates heavy ffmpeg/moviepy work from API requests, and the token-bucket rate limiter gained a native async path so stopping a task during rate-limit waits is instant.
    • Reliability & engineering (batch 1): task state follows a single-writer principle with per-task locking, resume supports persisted word-level TTS cues (no re-synthesis on resume), video polling is adaptive and multi-scene waits run concurrently, task listing is indexed with limit/offset/status pagination, stale artifacts/error logs are governed, and the frontend stops polling in background tabs with exponential backoff and a connection-loss banner.
    • Frontend & i18n: translations are split into per-language lazy-loaded chunks — the first-screen JS bundle drops from ~721 kB to ~305 kB (gzip 226 kB → 97 kB, -58%). Form submission/confirm/toast flows were unified into shared composables, mobile layout, focus-trap modals, prefers-reduced-motion and form drafts were added.
    • Observability & ops (batch 3): new GET /api/health and GET /api/metrics endpoints, optional rotating file logging (AGNES_LOG_FILE), and a Docker HEALTHCHECK. Runtime settings are now converged through typed pydantic-settings (with .env support) so concurrency limits scale dynamically with API-key count.
    • Immediate defect fixes (batch 0): stop now cancels instantly without retry backoff, event-loop blocking (watermark re-encode, sync downloads) is moved off the loop, multi-key delete works correctly, a frontend v-html XSS vector is closed, and image generation got a duplicate-submit guard.
  • Full 22-language support incl. Arabic — the UI already had 22 languages; this release completes the voice catalog for all of them. Arabic UI is fully supported (PR #32), and 8 UI languages (Turkish, Vietnamese, Thai, Tagalog, Hindi, Persian, Bengali, Urdu) now have edge_tts voice groupings with native-voice name display, script-detection regexes (Thai/Devanagari/Bengali) and per-script subtitle font fallback (new bundled Noto fonts; Persian/Urdu reuse the Arabic reshape+bidi pipeline).
  • Transparent analytics disclosure & privacy controls — the settings panel now shows a clear, collapsible privacy card listing exactly what usage statistics are reported (and what is never uploaded: prompts, manuscripts, poems, API keys and reference images are redacted before reporting). Analytics can be turned off entirely from the panel.
  • Complete error tracebacks in the feedback report — pipeline failures now persist the full traceback into the task state; the diagnostics endpoint and the in-app feedback report include it, so you can paste complete error details (e.g. environment-level [WinError 2]) into GitHub issues without checking the server console.

Refactoring & Optimizations

  • ffmpeg-first compositing chain — the final assembly path for creative/manuscript/anchor/poetry videos was reworked from 3-4 full re-encodes into copy-concat + a single filter pass (with graceful fallback to the previous moviepy path). This is the largest performance win in the v6 line, cutting final-assembly time by roughly 3-10x on typical outputs.
  • Asynchronous rate limiting with dedicated encoding thread pool — the token bucket now offers a native async acquire path (stop-aware), and heavy encoding runs on a dedicated executor so long encoding jobs no longer starve the request path.

Bug Fixes

  • Fixed stopping behavior — cancelling a task no longer triggers retry backoff (up to ~2 minutes) and no longer deletes a resumable video_id.
  • Fixed multi-Key configuration — key IDs are now hashed from the actual key so deleting one Key from multiple configured Keys removes exactly that Key.
  • Fixed event-loop freezes — watermark re-encoding and synchronous downloads no longer block the whole service; a semaphore release bug that could permanently break the concurrency cap under low-rate-limit configurations is fixed.
  • Fixed frontend issues — a stored-XSS vector via unescaped v-html is closed, duplicate image-submit without guard is prevented, and fetch errors now surface readable backend messages instead of silent failures.

No configuration changes are required. Existing tasks remain resumable; task state files are unchanged in format.