chatfire-AI/huobao-dramaPublic

🎬 火宝短剧 - 基于AI的一站式短剧生成平台 《一句话生成完整短剧,从剧本到成片全自动化》 Huobao Drama - An AI-Powered End-to-End Short Drama Generator "One Sentence to Complete Drama: Fully Automated from Script to Final Video"

AI summary: An AI-powered, full-stack short drama generator automating script parsing to final video rendering.

Stars
15.7K
+40 today
Forks
2.9K
Watchers
81
Open issues
18
Open PRs
1
Contributors
~19
Commits
413
Branches
9

VueOtherCreated Jan 5, 2026Last push 2d agoLatest release v4.0.7+147 stars this week+885 this month

Quick answers

What is huobao-drama?
An AI-powered, full-stack short drama generator automating script parsing to final video rendering.
What does huobao-drama do?
Huobao Drama is a comprehensive platform for the automated production of short drama videos, built entirely on a modern TypeScript stack. It utilizes large language models to intelligently parse text scripts and automatically extract character profiles, scene descriptions, and storyboard sequences. The system then leverages advanced AI image and video generation models to design character appearances, create scene backgrounds, and synthesize final video clips. By integrating these capabilities into a unified workflow via Mastra AI Agents, the platform transitions a project seamlessly from an initial creative sentence to a finished video product.
Who is huobao-drama for?
Content creators, marketing agencies, and filmmakers looking to leverage AI to automate the production of short dramas and video content.
How do I get started with huobao-drama?
See README for deployment instructions.
How popular is huobao-drama on GitHub?
chatfire-AI/huobao-drama has 15,670 stars and 2,897 forks on GitHub, and gained 147 stars in the last 7 days.
What license does huobao-drama use?
chatfire-AI/huobao-drama is released under the Other license.

Star history

since Jul 29, 2026
05K10K15KJul 2026Aug 2026Sep 2026Oct 2026
15.7K stars as of Oct 4, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Update history

1 recorded
  • Oct 4, 2026New release v4.0.7 (previously v4.0.4).

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 6 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 16 commits2026-01-13: 2 commits2026-01-14: 14 commits2026-01-15: 5 commits2026-01-16: 3 commits2026-01-17: 0 commits2026-01-18: 6 commits2026-01-19: 4 commits2026-01-20: 7 commits2026-01-21: 3 commits2026-01-22: 1 commit2026-01-23: 6 commits2026-01-24: 6 commits2026-01-25: 8 commits2026-01-26: 3 commits2026-01-27: 5 commits2026-01-28: 4 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 1 commit2026-02-01: 0 commits2026-02-02: 1 commit2026-02-03: 4 commits2026-02-04: 3 commits2026-02-05: 2 commits2026-02-06: 3 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 1 commit2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 1 commit2026-02-28: 3 commits2026-03-01: 3 commits2026-03-02: 8 commits2026-03-03: 23 commits2026-03-04: 0 commits2026-03-05: 3 commits2026-03-06: 4 commits2026-03-07: 0 commits2026-03-08: 1 commit2026-03-09: 1 commit2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 21 commits2026-03-26: 5 commits2026-03-27: 29 commits2026-03-28: 21 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 4 commits2026-04-02: 0 commits2026-04-03: 1 commit2026-04-04: 0 commits2026-04-05: 1 commit2026-04-06: 0 commits2026-04-07: 1 commit2026-04-08: 1 commit2026-04-09: 0 commits2026-04-10: 1 commit2026-04-11: 0 commits2026-04-12: 1 commit2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 1 commit2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 1 commit2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 1 commit2026-07-09: 0 commits2026-07-10: 1 commit2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 3 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 2 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 2 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 1 commit2026-08-03: 0 commits2026-08-04: 1 commit2026-08-05: 0 commits2026-08-06: 1 commit2026-08-07: 4 commits2026-08-08: 22 commits2026-08-09: 2 commits2026-08-10: 4 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 5 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 1 commit2026-08-19: 1 commit2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 7 commits2026-08-31: 5 commits2026-09-01: 1 commit2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 2 commits2026-09-06: 26 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 10 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 5 commits2026-09-18: 8 commits2026-09-19: 0 commits2026-09-20: 1 commit2026-09-21: 1 commit2026-09-22: 0 commits2026-09-23: 1 commit2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 8 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 6 commits2026-10-03: 0 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits
381 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    15,670 stars

  • Repeat trending

    4 trending appearances

What huobao-drama does

Huobao Drama is a comprehensive platform for the automated production of short drama videos, built entirely on a modern TypeScript stack. It utilizes large language models to intelligently parse text scripts and automatically extract character profiles, scene descriptions, and storyboard sequences. The system then leverages advanced AI image and video generation models to design character appearances, create scene backgrounds, and synthesize final video clips. By integrating these capabilities into a unified workflow via Mastra AI Agents, the platform transitions a project seamlessly from an initial creative sentence to a finished video product.

Content creators, marketing agencies, and filmmakers looking to leverage AI to automate the production of short dramas and video content.

  • Intelligent script parsing: Uses large language models to thoroughly analyze scripts and extract character, scene, and storyboard details.
  • Automated visual design: Employs AI image generation to automatically create character visuals and background art.
  • Video synthesis pipeline: Synthesizes storyboard videos using advanced text-to-video and image-to-video generation models.
  • End-to-end automation: Provides a complete, fully automated pipeline from initial ideation to final video rendering.
  • Agent skills architecture: Organizes and executes capabilities through specific Mastra AI agent skills defined in the project structure.

Where teams use it

Short Drama Production

Content creators automatically generate complete short drama episodes from text scripts to significantly reduce production costs.

Pre-production Visualization

Directors use the platform to quickly visualize scripts and generate storyboard videos for efficient pre-production planning.

Automated Character Design

Animators and game developers generate consistent visual representations of characters based purely on textual descriptions.

AI Video Marketing

Marketing agencies produce quick, high-quality promotional short videos by leveraging the automated video synthesis workflows.

Getting started: See README for deployment instructions.

README

master branch

🎬 Huobao Drama - AI Short Drama Generation Platform

A full-stack TypeScript platform for automated AI short-drama production

Node Version Vue Version License Download

English | 简体中文 | 日本語 | 한국어

Features • Quick Start • Walkthrough • Desktop App • Deployment

Text, image, and video AI capabilities — one key unlocks everything

After deploying, paste the key in "Settings → Huobao Quick Setup" to write three recommended configs in one click


📖 Overview

Huobao Drama is an AI-powered short-drama production platform that automates the entire pipeline: script generation, character design, storyboard breakdown, and video compositing.

🎯 Core Value

  • 🤖 AI-Driven: LLMs parse scripts and extract characters, scenes, and storyboard information
  • 🎨 Intelligent Creation: AI image generation for character designs and scene backgrounds
  • 📹 Video Generation: Text-to-video and image-to-video models automatically produce storyboard clips
  • 🔄 End-to-End Workflow: A complete pipeline from idea to finished episode

🛠️ Architecture

frontend/   — Nuxt 3 + Vue 3 + TypeScript (pure CSS, no UI framework)
backend/    — Hono + Drizzle ORM + Mastra AI Agents + better-sqlite3
backend/workspace/skills/ — Agent skill definitions (SKILL.md, editable in the UI)
desktop/    — Electron desktop app (main process + esbuild + electron-builder dmg/exe)
data/       — Generated assets and the SQLite database

✨ Features

🎭 Character Management

  • ✅ AI-generated character designs
  • ✅ Batch character generation
  • ✅ Character image upload and management

🎬 Video Tasks

  • ✅ Automatic AI video-task generation
  • ✅ Scene descriptions and video prompt generation
  • ✅ Batch video generation per task

🎥 Video Generation

  • ✅ Text-to-video generation
  • ✅ FFmpeg per-shot compositing and subtitle handling
  • ✅ Full-episode stitching and export

📦 Asset Management

  • ✅ Unified asset library
  • ✅ Local storage support
  • ✅ Task progress tracking

🤖 AI Agents

Four built-in Mastra agents with database-backed configuration and Skill extensions:

Agent Role
script_rewriter Novel → formatted script rewriting
extractor Intelligent extraction and dedup of characters / scenes / props
storyboard_breaker Script → storyboard sequence breakdown
prompt_generator Image prompts for characters/scenes/props + storyboard video prompts

🌐 Multi-Language UI

The interface ships in 中文 / English / 日本語 / 한국어, with a global setting for AI-generated content language.

🔌 Multi-Provider Support

Type Providers
Text OpenAI (compatible APIs), Gemini
Image OpenAI, Gemini, Volcano Engine
Video Volcano Engine Seedance 2.0 (Standard / Fast / Mini), MiniMax H3, Alibaba Bailian Wan 3.0 (Prime / Standard)

🚀 Quick Start

📋 Requirements

Software Version Notes
Node.js 20+ Runtime for frontend and backend
npm 9+ Package manager

Zero-install database: Bundled SQLite (single file in the project data directory) — no database server required. No FFmpeg install needed: Binaries ship via the ffmpeg-static / ffprobe-static npm packages — works out of the box.

⚙️ Environment Variables

No config files — everything is set via environment variables (all have defaults; local dev needs zero configuration):

Variable Default Description
SQLITE_PATH <repo>/data/huobao.sqlite3 SQLite database file location
PORT 5679 Backend service port
STORAGE_PATH <repo>/data/static Generated-file storage directory
HUOBAO_DATA_DIR — Injected by the Electron main process (userData data root)
WORKSPACE_PATH backend/workspace Agent skills/prompts directory (desktop: writable copy under userData)
FRONTEND_DIST frontend/dist Frontend static build directory
FFMPEG_BIN / FFPROBE_BIN bundled npm binaries Custom ffmpeg/ffprobe executable paths
PUBLIC_BASE_URL — Public URL Seedance needs to reference local assets (server deployments)

Note: AI service API keys, base URLs, and model parameters are all configured in the web UI "Settings" page and stored in the database — never in config files or environment variables.

📥 Installation

# Clone the repository
git clone https://github.com/chatfire-AI/huobao-drama.git
cd huobao-drama

# Install backend dependencies
cd backend && npm install

# Install frontend dependencies
cd ../frontend && npm install

🎯 Running

Option 1: Development mode (recommended)

Frontend and backend run separately with hot reload:

# Terminal 1: backend
cd backend
npm run dev

# Terminal 2: frontend
cd frontend
npm run dev
  • Frontend: http://localhost:3013
  • Backend API: http://localhost:5679/api/v1
  • The frontend automatically proxies /api and /static to the backend
Option 2: Single-service mode

The backend serves both the API and the frontend static files:

# 1. Build the frontend
cd frontend && npm run generate

# 2. Copy the build output where the backend expects it
#    (generate outputs to .output/public; the backend reads frontend/dist)
cp -r .output/public dist

# 3. Start the backend
cd ../backend && npm start

Visit: http://localhost:5679

🗄️ Database

Bundled SQLite (better-sqlite3 + WAL mode). Tables are created automatically on first launch (idempotent DDL replay + seed data). Default file: data/huobao.sqlite3, overridable via SQLITE_PATH. The desktop app stores data in the user-data directory (~/Library/Application Support/HuobaoDrama/data/).

Migrating data from a legacy MySQL deployment:

Automatic migration on startup (recommended): When MySQL is explicitly configured (DATABASE_URL or MYSQL_HOST) and the SQLite database is empty, the backend automatically detects and imports all tables once (per-table row-count validation, single-transaction atomic writes, automatic rollback with retry on next launch, and a .mysql-imported marker to avoid re-importing). Set MYSQL_AUTO_IMPORT=false to disable.

# Or run manually (non-empty target requires --force; automatic backup before writing)
cd backend && npx tsx scripts/import-mysql-to-sqlite.ts

Migration covers database rows only; media files (images/videos) under the old deployment's data/static/ must be copied manually, or historical assets won't load.

🔑 First Use: Configure AI Services

All AI features (text/image/video) require model services to be configured first — a banner at the top of the page guides you until then:

  1. Open the "Settings" page
  2. Paste your Huobao API key in "Huobao Quick Setup" (get one at api.firemux.com) to write three recommended configs (text, image, video) in one click
  3. Or add providers one by one via "Manual Templates", with connectivity testing

Once configured, the banner disappears and you can start producing episodes.


📖 Visual Walkthrough

The complete pipeline from novel to finished episode. The left progress rail always shows where you are.

Step 1 · Create a Project

On the home page click "New Project", pick a aspect ratio (16:9 landscape / 9:16 portrait, fixed after creation) and a visual style (3D, realistic, … — injected into every image prompt).

Create a project

Project list

Step 2 · Configure AI Services (first run)

Paste an API key in Settings → "Huobao Quick Setup" to write the three recommended configs at once, or add providers manually. The current model can be switched any time from the top bar (see Step 5).

AI service setup

Step 3 · Script Stage

Paste your source novel into the workbench, then hit "AI Rewrite" to produce a shooting script — split by episode with scenes and characters annotated. You can switch text models and tone while rewriting.

Script stage

Step 4 · Assets

Run extraction on the script to get the character / scene / prop list, then generate a consistent reference image for each (or in batch). These images are injected as reference material when generating videos.

Asset production

Step 5 · Storyboard & Videos

On the "Video Production" page, first run storyboard breakdown (AI splits shots and writes video prompts). Then:

  • Pick the video model in the top bar (Seedance / Wan 3.0 / MiniMax…); resolution and duration tiers follow the model
  • Review and tweak each shot's prompt on the right (@character references map to reference images automatically)
  • Click "Batch Generate Videos"; failed tasks can be retried in one click

Storyboard breakdown

Video generation

Step 6 · Merge & Export

Select shots (hover to preview each clip), click "Start Merging" and FFmpeg assembles the full episode — play online or download. Click "Mark Done" when finished to light up the progress rail.

Merge & export

The episode list shows the production status of every episode — click "Enter Studio" to continue:

Episode list


📦 Deployment

🖥️ Desktop App (recommended)

⬇️ Prebuilt installers: GitHub Releases · Mirror for China (Tencent COS)

Platform File to download
macOS (Apple Silicon, M-series) HuobaoDrama-4.0.5-arm64.dmg
macOS (Intel) HuobaoDrama-4.0.5.dmg
Windows HuobaoDrama.Setup.4.0.5.exe

China users: use the COS mirror above (GitHub is slow/unreachable in mainland China). The in-app updater also checks the COS mirror first, then falls back to GitHub.

Command-line install (recommended, no Gatekeeper fix needed): downloading via curl never sets macOS's quarantine attribute, so the app opens cleanly with no "damaged" prompt (use the -arm64.dmg for Apple Silicon, the plain dmg for Intel):

curl -L -o /tmp/HuobaoDrama.dmg https://installer.chatfire.site/huobao-drama/v4.0.5/HuobaoDrama-4.0.5-arm64.dmg \
  && hdiutil attach -nobrowse /tmp/HuobaoDrama.dmg \
  && cp -R /Volumes/HuobaoDrama*/HuobaoDrama.app /Applications/ \
  && hdiutil detach /Volumes/HuobaoDrama*

No build required — download the dmg/exe and install. Installed clients auto-update via the built-in updater. (To package from source instead, see the commands below.)

Double-click to install, works out of the box (macOS + Windows): the SQLite database, generated media, and Agent skills all live in the user-data directory — uninstalling the app does not affect your data.

# One-command packaging (frontend generate → backend esbuild → electron-builder)
npm run dist        # macOS dmg (arm64 + Intel)
npm run dist:win    # Windows NSIS installer (win-x64, cross-buildable on macOS)

# Artifacts
# desktop/release/HuobaoDrama-<version>-arm64.dmg     (Apple Silicon)
# desktop/release/HuobaoDrama-<version>.dmg           (Intel)
# desktop/release/HuobaoDrama Setup <version>.exe     (Windows)

Installation notes:

  • The macOS build is unsigned — on first launch you may see "App is damaged and can't be opened" (common on Apple Silicon). This is Gatekeeper's quarantine attribute, not actual file damage. Two ways to fix it:

    1. The dmg bundles a fix script: after dragging the app into Applications, double-click the "如提示已损坏请双击我.command" script at the bottom of the dmg window — it removes the quarantine attribute automatically;
    2. Or run sudo xattr -cr /Applications/HuobaoDrama.app in Terminal.

    The fix is one-time only — the app then launches normally, and in-app auto-updates are not affected.

  • The Windows build is unsigned — SmartScreen will prompt "More info → Run anyway"

  • User-data directory: ~/Library/Application Support/HuobaoDrama/ (database, generated media, writable copies of online-edited skills)

  • FFmpeg/FFprobe binaries are bundled — no system install needed

  • Electron is pinned to 37.x: better-sqlite3's win32 prebuilds max out at that ABI (the key to compilation-free cross-packaging)

  • External links open in the system browser (e.g. "Get a key at api.firemux.com")

🔄 In-App Updates (no Apple signing required)

The desktop app ships with a built-in updater (same class of solution as Tauri: directory replacement on macOS / silent installer on Windows, with local sha256 verification). To publish a new release:

# 1. Bump version in desktop/package.json, then package
npm run dist        # macOS (produces dmg + update zip)
npm run dist:win    # Windows (produces Setup.exe)

# 2. Generate the release manifest release/latest.json (with per-platform sha256)
cd desktop && npm run feed

# 3. Publish: upload latest.json + installers + zips to a GitHub Release (tag like v1.0.1)

Installed clients check the manifest automatically after launch (manual check available in "Settings → About & Updates") and prompt to download and install when a new version is found. Override the manifest URL with the HUOBAO_UPDATE_FEED environment variable.

Desktop development:

npm run build:frontend   # frontend static output (frontend/.output/public)
cd desktop && npm run dev  # bundle the backend and run in an Electron window

Known limitation: Seedance video models need a PUBLIC_BASE_URL public address to reference local assets; the desktop app has no public entry point, so that scenario produces a clear error message. Text-to-video, image generation, and all other capabilities are unaffected.


🏭 Server Deployment

# 1. Build the frontend
cd frontend && npm run generate

# 2. Copy the build output (generate outputs to frontend/.output/public; the backend reads
#    frontend/dist — skip this step and the API works but pages 404)
cp -r .output/public dist && cd ..

# 3. Start the backend
cd backend && npm start

Files to upload to the server:

backend/                    # backend source + node_modules
backend/workspace/skills/   # Agent skill files
frontend/dist/              # frontend build output
data/                       # data directory (auto-created on first run)
Nginx Reverse Proxy
server {
    listen 80;
    server_name your-domain.com;

    # Max 50MB for reference video/audio uploads
    client_max_body_size 100m;

    # Generated images/videos served straight from disk, bypassing Node:
    # sendfile zero-copy + long-lived caching
    # (files are uuid-named and immutable, so immutable caching is safe)
    location /static/ {
        alias /path/to/huobao-drama/data/static/;
        sendfile on;
        tcp_nopush on;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    location / {
        proxy_pass http://localhost:5679;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Media loading optimization: the backend automatically generates 400px thumbnails (*_thumb.webp) for list pages and extracts poster frames (*_poster.jpg) as video covers — the frontend only loads original files when opening the full image or playing. To backfill historical files, run npm run backfill-artwork under backend/.

🐳 Docker Deployment (with in-app updates)

Option A — prebuilt image (no clone, no build): multi-arch (linux/amd64 + linux/arm64), x86 servers and ARM devices match automatically

docker pull huobao/huobao-drama:4.0.6

docker run -d \
  --name huobao-drama \
  -p 5679:5679 \
  -v huobao-data:/app/data \
  --restart unless-stopped \
  huobao/huobao-drama:4.0.6

Option B — docker compose (source build + Watchtower in-app updates): the repo root provides an all-in-one Dockerfile (three stages: frontend generate + backend dependencies + runtime; the backend runs via tsx just like server deployment) and docker-compose.yml (app + Watchtower):

# 1. Configure the environment (Watchtower token — must match on the app and watchtower sides)
cp .env.example .env   # edit WATCHTOWER_TOKEN

# 2. Build and start (inject a version at publish time for "About & Updates" comparison)
HUOBAO_VERSION=4.0.5 docker compose up -d --build

# 3. Visit http://localhost:5679
  • Data persistence: the named volume huobao-data mounts /app/data (SQLite + generated images/videos + workspace/skills) — image updates don't lose data
  • In-app updates: the compose file ships a Watchtower sidecar (--label-enable only updates labeled containers, --cleanup removes old images, daily self-check). "Settings → About & Updates" can check for new versions and "Update Now" — the backend triggers it via the Watchtower HTTP API, which pulls the new image and rebuilds the container; refresh the page after a few minutes
  • Manual mode: remove the app's two HUOBAO_WATCHTOWER_* env vars (or the whole watchtower service) from docker-compose.yml — "About & Updates" then degrades to a new-version notice + manual docker compose pull && docker compose up -d
  • Publishing images: docker buildx build --platform linux/amd64,linux/arm64 --build-arg HUOBAO_VERSION=x.y.z -t huobao/huobao-drama:x.y.z -t huobao/huobao-drama:latest --push . — the version manifest is shared with the desktop app via latest.json on GitHub Releases (overridable with HUOBAO_UPDATE_FEED)

🎨 Tech Stack

Backend

  • Runtime: Node.js 20+
  • Web framework: Hono
  • ORM: Drizzle ORM + better-sqlite3 (WAL mode)
  • AI Agents: Mastra + AI SDK (OpenAI compatible)
  • Video processing: FFmpeg (fluent-ffmpeg + bundled binaries)
  • Image processing: Sharp

Desktop

  • Shell: Electron (utilityProcess hosts the backend; BrowserWindow loads same-origin)
  • Packaging: esbuild (single-file backend bundle) + electron-builder (dmg arm64/x64, NSIS win-x64)

Frontend

  • Framework: Nuxt 3 (SPA mode)
  • Language: Vue 3 + TypeScript
  • Routing: File-based routing (Vue Router 4)
  • Styling: Pure CSS + CSS Variables
  • Icons: Lucide Vue
  • i18n: vue-i18n (中文 / English / 日本語 / 한국어)

📝 FAQ

Q: Where does the desktop app store data?

A: ~/Library/Application Support/HuobaoDrama/data/ (SQLite database + generated images/videos); writable copies of online-edited skills live in the sibling workspace/ directory. In development mode the repo's data/ directory is used instead.

Q: How do I migrate legacy MySQL data to SQLite?

A: Keep MySQL reachable (environment variables or backend/.env), then run cd backend && npx tsx scripts/import-mysql-to-sqlite.ts. The script creates tables automatically, imports table-by-table, and validates row counts (non-empty targets require --force; a backup is made before writing).

Q: FFmpeg not installed or not found?

A: No install needed. The project bundles ffmpeg-static / ffprobe-static binaries (carried along in the desktop package). A system PATH FFmpeg won't conflict either, and you can point explicitly via FFMPEG_BIN/FFPROBE_BIN.

Q: The top of the page says "No model configured"?

A: That's the normal first-deploy guidance. Go to "Settings" and use "Huobao Quick Setup" to paste an API key and write configs in one click, or add providers via "Manual Templates". The banner disappears once text, image, and video all have an enabled config.

Q: The frontend can't reach the backend API?

A: Check that the backend is running and the port is correct. In dev mode the proxy config lives in frontend/nuxt.config.ts.

Q: Database tables not created?

A: The backend creates all tables automatically on first launch — check the logs to confirm initialization succeeded.


📋 Changelog

v4.0.0 (2026-08)

🖥️ Desktop App + Database Migration
  • Electron desktop app (macOS dmg, arm64/x64 dual architecture)
    • Double-click install, works out of the box: automatic port selection, single-instance lock, crash-isolated backend subprocess
    • User-data isolation: SQLite database / generated media / skill copies all live in the userData directory
    • FFmpeg/FFprobe bundled; workspace skill templates copied on first launch, upgrades only fill gaps without overwriting
  • Database fully migrated from MySQL to SQLite (better-sqlite3 + WAL)
    • Zero business-code changes (the Drizzle query layer is naturally portable); idempotent DDL replay
    • New one-shot import script import-mysql-to-sqlite.ts (per-table row-count validation + automatic backup)
  • Backend bundled to a single file with esbuild (externals: sharp/better-sqlite3/ffmpeg binary packages)
  • Removed Docker/MySQL deployment (recoverable from git history)

v3.1.0 (2026-09)

  • Added Alibaba Bailian Wan 3.0 video models (Prime / Standard, official input.media/parameters payloads)
  • Resolution selector in the workbench top bar with native tiers per provider (Seedance 480p/720p, MiniMax 768P/2K, Wan 480P/720P/1080P)
  • Default video model changed to Seedance 2.0 Mini
  • Fixed generation errors caused by provider/model mismatch when switching video models
  • Batch video: selection mode + pre-generation confirmation (shot count / total duration / model / resolution), one-click retry for failed tasks
  • Storyboard duration now editable directly in the video-generation params area, applied to single and batch generation
  • Content-moderation failures (real-person / sensitive content) now prompt to switch models and retry

v3.0.0 (2026-08)

🚀 Deployment & Experience Improvements
  • Docker deployment readiness
    • MySQL / app health checks; the app waits for the database before starting
    • Database initialization retries — zero manual intervention on first containerized deploy
    • Removed the system FFmpeg dependency; bundled binaries everywhere
    • Agent skills directory volume persistence (online edits in Settings survive)
    • New docker/init.sql and export scripts (DBA review / pre-created tables)
  • First-use guidance
    • Site-wide banner guiding to Settings when no AI service is configured
    • New "Huobao Quick Setup" in Settings: one key writes three recommended configs (text/image/video)
    • Unconfigured-model errors localized with pointers to Settings
  • Default video model changed to Seedance 2.0 Fast
  • Provider consolidation: OpenAI / Gemini / Volcano Engine only
  • Workbench: task-list drawer, pipeline stage status, selective stitching (validates video files exist before merging)
  • Asset library redesign, @mention improvements, episode list rework

v2.0.0 (2026-04)

🚀 Major Update
  • Full migration to a TypeScript stack
    • Backend: Hono + Drizzle ORM + mysql2
    • Frontend: Nuxt 3 + Vue 3
    • AI Agents: Mastra framework
  • Episode workbench UI and production flow rebuilt
    • More compact console layout
    • Storyboard editing area rebuilt
    • Shot image, video, compositing, and export screens rebuilt
  • Docker deployment support — frontend and backend merged into a single image
  • Runtime Skill loading mechanism
  • Expanded multi-provider media adapters
    • Image: OpenAI, Gemini, Volcano Engine, Alibaba
    • Video: Volcano Engine/Seedance, Vidu, Alibaba
  • Improved local file handling and on-demand reference-image transcoding

v1.0.4 (2026-01-27)

  • Local storage strategy to avoid dead external asset links
  • Base64 reference-image embedded transport
  • Fixed shot-switch state reset
  • Scene migration to chapters

v1.0.3 (2026-01-16)

  • Database concurrency performance improvements
  • Docker cross-platform support for host.docker.internal

v1.0.2 (2026-01-14)

  • Fixed video-generation API response parsing
  • OpenAI Sora video endpoint configuration
  • Improved error handling and logging

📄 License

This project is licensed under CC BY-NC-SA 4.0 (Attribution-NonCommercial-ShareAlike 4.0 International).

  • ✅ Personal use, learning, and non-commercial projects are welcome
  • ✅ Modifications and redistribution allowed under the same license with attribution
  • ❌ Commercial use is prohibited — you may not use this project, in whole or in part, for any commercial purpose (including paid services, commercial deployments, or resale) without prior written permission from the author

Full license text: see LICENSE.


🤝 Contributing

Issues and Pull Requests are welcome!

  1. Fork the project
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Common checks:

cd backend && npm run typecheck
cd ../frontend && npm run build

☕ Donate

If this project helps you, buy the author a coffee ☕ — your support keeps the updates coming!

Alipay donation QR code

💬 WeChat Group

Scan the QR code to join the WeChat group:

WeChat group QR code

"Let AI do the creating with us"

🔗 Links

This project has been recognized with a link from the LINUX DO community.

  • LINUX DO — a genuine open-source spirit, a community built on sharing

Star History

Star History Chart

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

3 total
  1. v4.0.7v4.0.7Oct 2, 2026276 downloads

    统一火宝品牌图标:网页 Logo、浏览器图标、macOS 应用图标和 Windows 应用图标。 提供 macOS Apple Silicon、macOS Intel 和 Windows x64 安装包。 macOS Apple Silicon 安装包内服务与前端启动检查通过;其他平台已完成打包和内容校验,未进行对应系统运行测试。

  2. v4.0.6v4.0.6Oct 2, 202612 downloads

    视频生成的本地参考图、首帧和尾帧改为使用原始图片,保留尺寸、格式和透明通道,不再缩小至 768 像素或转换为 JPEG。 桌面发布同步生成官网动态下载清单。Docker 升级至 Node 22,排除桌面产物和本地环境配置,并使用系统 FFmpeg/FFprobe 修复 Linux ARM64 媒体探测不可用的问题。 验证:macOS Apple Silicon 安装包的后端启动、SQLite 初始化与前端加载通过;Linux ARM64/AMD64 容器启动、v4.0.6 健康接口和媒体工具通过;ARM64 视频编码、时长读取和海报提取通过;原图 Base64 字节一致性及 TypeScript 类型检查通过。Windows 和 Intel macOS 安装包已构建并检查包内版本与原图逻辑,未进行对应实体系统运行验证。 仓库后端结构测试 39/51 通过,12 项失败在修改前的提交上同样存在。

  3. v4.0.5v4.0.5Sep 28, 2026564 downloads

    品牌图标焕新为透明底 firelumi mark;默认视频模型改为 MiniMax(Seedance 垫底);修复终端启动管道关闭导致主进程 EPIPE 崩溃

Code frequency

additions and deletions
+2M-2MWeek of 2026-01-04: +13 linesWeek of 2026-01-04: -3 linesWeek of 2026-01-11: +51,197 linesWeek of 2026-01-11: -4,758 linesWeek of 2026-01-18: +7,275 linesWeek of 2026-01-18: -4,107 linesWeek of 2026-01-25: +12,579 linesWeek of 2026-01-25: -5,959 linesWeek of 2026-02-01: +9,644 linesWeek of 2026-02-01: -6,900 linesWeek of 2026-02-08: +0 linesWeek of 2026-02-08: -0 linesWeek of 2026-02-15: +0 linesWeek of 2026-02-15: -0 linesWeek of 2026-02-22: +12,905 linesWeek of 2026-02-22: -5,002 linesWeek of 2026-03-01: +10,041 linesWeek of 2026-03-01: -10,329 linesWeek of 2026-03-08: +21 linesWeek of 2026-03-08: -0 linesWeek of 2026-03-15: +0 linesWeek of 2026-03-15: -0 linesWeek of 2026-03-22: +1,906,696 linesWeek of 2026-03-22: -1,953,933 linesWeek of 2026-03-29: +13,952 linesWeek of 2026-03-29: -3,460 linesWeek of 2026-04-05: +429 linesWeek of 2026-04-05: -309 linesWeek of 2026-04-12: +6 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +0 linesWeek of 2026-04-19: -0 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +2 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +0 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +0 linesWeek of 2026-06-21: -0 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +38 linesWeek of 2026-07-05: -9 linesWeek of 2026-07-12: +5,756 linesWeek of 2026-07-12: -6,646 linesWeek of 2026-07-19: +2,466 linesWeek of 2026-07-19: -450 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesWeek of 2026-08-02: +21,592 linesWeek of 2026-08-02: -17,876 linesWeek of 2026-08-09: +779 linesWeek of 2026-08-09: -140 linesWeek of 2026-08-16: +36 linesWeek of 2026-08-16: -31 linesWeek of 2026-08-23: +0 linesWeek of 2026-08-23: -0 linesWeek of 2026-08-30: +0 linesWeek of 2026-08-30: -0 linesJan 4, 2026Aug 30, 2026
+2.1M lines added, -2M removed over the last year.

Commits per week

last 52 weeks
760Week of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 6 commitsWeek of 2026-01-11: 40 commitsWeek of 2026-01-18: 33 commitsWeek of 2026-01-25: 21 commitsWeek of 2026-02-01: 13 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 5 commitsWeek of 2026-03-01: 41 commitsWeek of 2026-03-08: 2 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 76 commitsWeek of 2026-03-29: 5 commitsWeek of 2026-04-05: 4 commitsWeek of 2026-04-12: 1 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 1 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 3 commitsWeek of 2026-07-12: 5 commitsWeek of 2026-07-19: 2 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 29 commitsWeek of 2026-08-09: 11 commitsWeek of 2026-08-16: 2 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 15 commitsWeek of 2026-09-06: 36 commitsWeek of 2026-09-13: 13 commitsWeek of 2026-09-20: 3 commitsWeek of 2026-09-27: 14 commitsWeek of 2026-10-04: 0 commitsOct 11, 2025Oct 4, 2026
381 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 11 commitsSun 1:00 — 5 commitsSun 2:00 — 5 commitsSun 3:00 — 0 commitsSun 4:00 — 3 commitsSun 5:00 — 3 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 1 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 6 commitsSun 15:00 — 4 commitsSun 16:00 — 2 commitsSun 17:00 — 2 commitsSun 18:00 — 0 commitsSun 19:00 — 3 commitsSun 20:00 — 5 commitsSun 21:00 — 0 commitsSun 22:00 — 3 commitsSun 23:00 — 5 commitsMon 0:00 — 4 commitsMon 1:00 — 0 commitsMon 2:00 — 4 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 2 commitsMon 12:00 — 0 commitsMon 13:00 — 5 commitsMon 14:00 — 7 commitsMon 15:00 — 2 commitsMon 16:00 — 3 commitsMon 17:00 — 6 commitsMon 18:00 — 0 commitsMon 19:00 — 3 commitsMon 20:00 — 7 commitsMon 21:00 — 6 commitsMon 22:00 — 8 commitsMon 23:00 — 1 commitsTue 0:00 — 5 commitsTue 1:00 — 9 commitsTue 2:00 — 5 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 7 commitsTue 11:00 — 5 commitsTue 12:00 — 3 commitsTue 13:00 — 0 commitsTue 14:00 — 0 commitsTue 15:00 — 4 commitsTue 16:00 — 2 commitsTue 17:00 — 2 commitsTue 18:00 — 2 commitsTue 19:00 — 1 commitsTue 20:00 — 2 commitsTue 21:00 — 3 commitsTue 22:00 — 0 commitsTue 23:00 — 1 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 2 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 2 commitsWed 10:00 — 3 commitsWed 11:00 — 3 commitsWed 12:00 — 4 commitsWed 13:00 — 1 commitsWed 14:00 — 10 commitsWed 15:00 — 13 commitsWed 16:00 — 3 commitsWed 17:00 — 4 commitsWed 18:00 — 3 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 1 commitsWed 22:00 — 1 commitsWed 23:00 — 3 commitsThu 0:00 — 0 commitsThu 1:00 — 2 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 2 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 3 commitsThu 13:00 — 2 commitsThu 14:00 — 2 commitsThu 15:00 — 0 commitsThu 16:00 — 0 commitsThu 17:00 — 1 commitsThu 18:00 — 1 commitsThu 19:00 — 0 commitsThu 20:00 — 3 commitsThu 21:00 — 1 commitsThu 22:00 — 2 commitsThu 23:00 — 5 commitsFri 0:00 — 8 commitsFri 1:00 — 5 commitsFri 2:00 — 8 commitsFri 3:00 — 1 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 1 commitsFri 10:00 — 5 commitsFri 11:00 — 3 commitsFri 12:00 — 1 commitsFri 13:00 — 12 commitsFri 14:00 — 6 commitsFri 15:00 — 8 commitsFri 16:00 — 4 commitsFri 17:00 — 9 commitsFri 18:00 — 3 commitsFri 19:00 — 4 commitsFri 20:00 — 5 commitsFri 21:00 — 0 commitsFri 22:00 — 2 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 2 commitsSat 10:00 — 0 commitsSat 11:00 — 1 commitsSat 12:00 — 4 commitsSat 13:00 — 0 commitsSat 14:00 — 5 commitsSat 15:00 — 9 commitsSat 16:00 — 5 commitsSat 17:00 — 5 commitsSat 18:00 — 6 commitsSat 19:00 — 2 commitsSat 20:00 — 3 commitsSat 21:00 — 1 commitsSat 22:00 — 6 commitsSat 23:00 — 8 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Jan 19, 2026daily#3+580
Jan 18, 2026daily#7+345
Jan 17, 2026daily#7+313
Jan 16, 2026daily#10+268
  • julyx10/lap

    An offline-first photo manager for large local libraries

    3.6K stars · Vue