Repository navigation
Releases: notivn/AIEV
Release list
v1.1.8
Ô "AI thực hiện" giờ hiện các model Claude mới nhất: Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5.
Vì sao trước đây không thấy model mới
Nếu bạn đăng nhập bằng gói Claude (không dùng ANTHROPIC_API_KEY), app không hỏi được Anthropic có những model nào, nên dùng một danh sách viết sẵn - danh sách đó dừng ở Fable 5 / Opus 5 / Sonnet 5. Thêm nữa, bộ Claude Agent SDK đi kèm app đã cũ (bản tháng 7) nên chính nó cũng chưa biết thế hệ 5.1/5.5.
Thay đổi
- Nâng Claude Agent SDK lên bản mới, hiểu đủ các model 5.1/5.5. Đã chạy thử một phiên AI thật trên bản mới.
- Dùng gói Claude, app tự hỏi tài khoản của bạn đang dùng được model nào và đưa chúng lên đầu danh sách. Lần sau Anthropic ra model mới, chỉ cần cập nhật app là ô chọn tự có.
- Model mặc định cho phiên AI mới: Sonnet 5.5 - cùng giá với Sonnet 5 nhưng mới hơn. Phiên/project đã chọn model khác thì giữ nguyên lựa chọn của bạn.
- Bảng giá (trang thống kê chi phí) có thêm giá các model mới, và phần gợi ý chọn model ghi đúng giá hiện hành: Opus 5.5 $4, Sonnet 5.5 $2, Haiku 5.5 $0,10 cho mỗi triệu token đọc vào.
Ghi chú
Sau khi cập nhật, lần đầu mở danh sách model có thể mất vài giây (app khởi động Claude Code để hỏi danh sách); các lần sau lấy từ bộ nhớ đệm ngay. Dùng ANTHROPIC_API_KEY thì danh sách vẫn lấy trực tiếp từ Anthropic như trước.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.7
Bản vá lớn: rà toàn bộ mã nguồn và sửa khoảng 40 lỗi ở server, dashboard, khâu lắp ráp Remotion và các script khởi động - kèm vá lỗ hổng bảo mật của các thư viện phụ thuộc.
Bảo mật
- Cập nhật thư viện: số cảnh báo
npm auditgiảm từ 21 (4 nghiêm trọng, trong đó có lỗi chạy mã từ xa của Next.js) xuống 8 cảnh báo mức trung bình. 8 cảnh báo còn lại đều đến từsprintf-js, thư viện này chưa có bản vá nào để nâng.
Lỗi làm hỏng video
- Text to video không lắp ráp được: giọng đọc bị ghi sai đường dẫn nên mọi lần dựng đều báo "Thiếu asset". Project tạo trước bản này vẫn mang đường dẫn sai: mở
meta.jsoncủa project đó, sửaaudio.voicethành"assets/voice.wav". - Cả video render hỏng vì một câu phụ đề quá ngắn: câu phụ đề, karaoke hoặc thẻ highlight dài từ 6 frame trở xuống (vd câu dịch bị kẹp sát cuối video) làm Remotion dừng cả bài. Câu dài bình thường vẫn hiện y như cũ.
- Một khung đen ở mỗi điểm cắt footage: do làm tròn số frame lệch nhau giữa hai nơi tính. Đã dựng thử thật: các điểm cắt khớp đúng từng khung, không còn khung đen.
Công tắc trong Kịch bản edit có hiệu lực thật
- Tắt "Tự động cắt ngắn video" là không cắt: trước đây server vẫn cắt nếu AI gọi thẳng API. Giờ cả hai đường đều trả
409 AUTO_CUT_DISABLED. - Phong cách dựng tắt: prompt nói rõ là đang tắt, không để AI đọc lại phong cách cũ còn sót trong
meta.json. - Lưu tự động lỗi thì không chạy tiếp: trước đây nếu lưu Kịch bản edit thất bại (mất mạng, style đã bị xóa…), bấm "Bắt đầu edit" / "Dựng video" / "Dịch" / "Cắt" vẫn chạy theo bản cũ trên server - vd vừa tắt ảnh AI mà video vẫn đầy ảnh. Giờ hệ thống dừng lại, báo lỗi, và giữ thay đổi để lưu lại.
Không còn kẹt
- Phiên Dịch video và Cắt tự động kẹt "đang chạy" mãi sau khi tắt server giữa chừng (không chạy lại, không xóa được): giờ tự quay về trạng thái chạy lại được khi server khởi động.
- Dashboard kẹt lỗi 401 khi token đã lưu trong trình duyệt không còn khớp server: tự lấy token mới.
- Khung chat AI kẹt thanh tiến trình, trang Images kẹt nút "đang tạo" sau khi mất kết nối rồi nối lại.
- Bấm "Edit bằng AI" hai lần không còn chạy hai AI cùng sửa một project.
Giọng đọc
- Nghe thử giọng VieNeu có dấu (vd "Minh Đức") trong Dịch video bị lỗi 500.
- Hủy một job đọc giọng VieNeu làm hỏng luôn job đọc giọng kế tiếp.
- Đóng hộp chọn giọng trong lúc chờ nghe thử thì tiếng không còn phát vọng sang trang khác.
Script khởi động & cập nhật
- Windows: doctor luôn báo "chưa cài Claude Code" và nút cài luôn thất bại - đã sửa.
stop.batkhông xóa được file đánh dấu phiên chạy.- Yêu cầu Node.js nâng lên 22 cho khớp thực tế (trước đây script vẫn nhận Node 20 rồi lỗi về sau).
- Mở tunnel trên macOS tìm được cloudflared mà doctor vừa cài.
- Cập nhật thất bại không còn để mất tạm các skill bạn tự tạo.
Các lỗi nhỏ khác (đặt tên ảnh minh họa song song, tải font Google, đổi khóa Gemini, thumbnail, hủy render trên macOS/Linux, sao lưu Phong cách dựng khi file hỏng…) ghi chi tiết trong PR #21.
Ghi chú
Đã kiểm tra bằng typecheck, build, CI trên GitHub, chạy thử server thật cho các công tắc và việc tự chữa trạng thái, và dựng thử một video draft bằng Remotion rồi soi từng khung (điểm cắt, câu phụ đề 1-8 frame, chữ tiếng Việt có dấu). Chưa thử một video hoàn chỉnh có AI dựng scene vì môi trường kiểm tra không có khóa Claude/Gemini.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.6
Hai công tắc trong Kịch bản edit trước đây bật/tắt mà video không đổi. Bản này làm chúng có hiệu lực thật.
Tắt "Ảnh minh họa AI" là hết ảnh AI
Trước đây tắt công tắc xong video vẫn đầy ảnh Gemini. Lý do: prompt gửi cho AI không nói gì cả khi công tắc tắt - mọi công tắc khác (cắt tự động, phụ đề, highlight, bố cục Key) đều ghi rõ cả hai chiều BẬT/TẮT, riêng cái này im lặng. AI không thấy lệnh nào thì đi đọc skill, mà skill nào cũng nhắc tới đường sinh ảnh, thế là nó vẽ.
Đã sửa ở ba chỗ:
- Prompt edit nói thẳng khi tắt: cấm sinh ảnh, cấm gọi endpoint, hình ảnh chỉ được lấy từ asset có sẵn trong project, logo trong thư viện, và scene tự dựng.
- Server từ chối -
POST /api/illustrationstrả409 ILLUSTRATIONS_DISABLEDngay từ đầu, trước khi tạo file hay gọi Gemini (nên không tốn tiền). Prompt chỉ là lời khuyên, một file skill dài mấy nghìn chữ vẫn lấn át được, nên chốt chặn thật phải nằm ở server. - Text to video không còn tự dặn AI đi lấy ảnh từ endpoint mà chính brief của nó vừa tắt.
Muốn dùng ảnh minh họa thì bật công tắc lên như bình thường - đường cũ không đổi gì.
Phong cách dựng trở thành công tắc
Trước đây danh sách 20 phong cách luôn nằm đó, mặc định là "AI tự quyết" - vừa chiếm chỗ vừa khó biết rốt cuộc video sẽ dựng theo cái gì.
Giờ nó là một công tắc như mọi tính năng khác:
- Tắt (mặc định): video dựng theo đúng cấu hình đã chọn - skill và Style Design. Không có danh sách phong cách nào hiện ra.
- Bật: mới hiện danh sách để chọn. Bật mà chưa chọn thì hệ thống nói rõ là đang y hệt lúc tắt, không để bạn tưởng đã chọn xong.
Trạng thái bật/tắt hiện luôn ở hàng badge tóm tắt của Kịch bản edit, khỏi phải mở form ra mới biết.
Project cũ không bị ảnh hưởng: project nào đã chọn sẵn một phong cách thì vẫn giữ nguyên phong cách đó (tự hiểu là đang bật). Project chưa chọn thì ở trạng thái tắt - đúng như cách nó vẫn chạy từ trước tới nay.
Trang Phong cách dựng cũng đếm lại cho đúng: chỉ tính "đang dùng" với project còn bật công tắc, không thì bị chặn xóa oan.
Ghi chú
Bản này đụng vào prompt gửi cho AI khi dựng video. Đã kiểm tra bằng typecheck, build và test tự động cho toàn bộ nhánh bật/tắt (kể cả tương thích ngược với project cũ), và thử endpoint thật bằng HTTP - nhưng chưa dựng thử một video hoàn chỉnh để xem bằng mắt. Nếu bạn thấy video ra khác thường, mở lại kịch bản edit kiểm tra hai công tắc trên trước.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.5
Bản vá bảo mật
Vá 3 lỗ hổng mức High trong dependency (chỉ cập nhật package-lock.json, không đổi code):
- js-yaml 3.15.0 → 3.15.1 và js-yaml 4.3.0 → 4.3.1 (GHSA-5p4m-2wfm-xmqj / CVE-2026-59870): tiêu tốn CPU bậc hai khi phân giải
!!omap, có thể làm treo tiến trình khi parse YAML độc hại. Kéo vào quagray-matter(server) và@remotion/cli. - nanoid 3.3.16 → 3.3.17 (GHSA-2v37-7h3g-55p8): vòng lặp vô hạn khi generator tùy biến nhận size 0. Kéo vào qua
postcss.
Sau bản vá: npm audit báo 0 lỗ hổng, typecheck và build sạch.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.4
Bug fix. The dashboard now works when you open it through a tunnel or a reverse proxy.
Running AIEV on a server and reaching it over Cloudflare Tunnel, ngrok, Tailscale Funnel or nginx used to break in three separate places. All three only appear when the browser is not on the same machine as the server, which is why running on localhost never showed them. If you run on localhost or inside your own LAN, nothing changes for you.
First outside contribution to this project, from @locphamnguyen. Found while deploying AIEV on Ubuntu 24.04 behind Cloudflare Tunnel, and measured on that live deployment rather than reasoned about.
What was broken
Uploads aimed at a port that does not exist. The frontend built its backend URL as http://<hostname>:6869. A tunnel only publishes the web port, so that address goes nowhere, and an https page calling http is blocked as mixed content anyway. Ten call sites were affected: asset upload, sound effects, music, the logo and fonts in Style Design, Images Project backgrounds, voice cloning, the Translate Video source, Skill creation, and the token bootstrap. The repo already had the correct logic in uploadOrigin(), but only the mobile /m page called it, so it now lives in serverOrigin() and everything inherits it at once.
The dashboard was asked to scan its own QR code. POST /api/assets treated "not loopback" as "must be a phone", so a dashboard reached through a tunnel got 403 UPLOAD_TOKEN_INVALID telling the user to open a QR modal they were never shown. Requests carrying the master API token are now exempt.
Video uploads died at 10MB with an opaque 500. Next's proxy truncates request bodies at 10MB by default. The excess was dropped, multer sat waiting for a stream that would never finish, and the stall timer killed it 45 seconds later. proxyClientMaxBodySize now matches the 2GB ceiling multer already allows, so one side no longer silently blocks the other.
Not a security loosening
The master-token exemption is worth being precise about. The shared auth middleware already stands in front of this route, so a request only reaches it when it is loopback, carries the master token, or carries a valid QR session token. The new branch is therefore only reachable by a request that has already been fully authenticated, with a credential that also runs agents and deletes projects. Demanding a QR scan on top of it added no safety, it only locked out the owner.
The phone flow is untouched: a phone has no master token, falls through to the old branch, and still needs a valid session token bound to the right project.
Measured through the tunnel: upload with the master token returns 201, without a token 401, with a wrong token 401, and GET /api/health still refuses to hand out the API token to anything that is not a direct loopback request.
If you upload large video through a tunnel
A 50MB file goes through Cloudflare Tunnel in 3.7 seconds. A 150MB file comes back 413 in 0.4 seconds, and that rejection is Cloudflare's own 100MB body cap on the Free and Pro plans - the request never reaches AIEV, and nothing in this repo can lift it. Send large footage over LAN or Tailscale instead, where the upload still goes straight to port 6869 and a 150MB file lands fine.
Verified
npm run typecheck and npm run build clean, CI green on the tagged commit. No new dependencies, no lockfile change. docs/API.md updated in the same change, since the authentication condition on POST /api/assets moved.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.3
Security patch. Seven dependency advisories fixed, zero left open.
Making the repository public turned Dependabot on, which surfaced seven advisories nobody could see while it was private: four in postcss, one each in sharp, hono and fast-uri.
| Package | Was | Now | Severity |
|---|---|---|---|
| postcss (nested in next) | 8.4.31 | 8.5.23 | 2 high, 2 medium |
| sharp (nested in next) | 0.34.5 | removed | high |
| fast-uri | 3.1.4 | 3.1.5 | high |
| hono | 4.12.32 | 4.13.0 | medium |
What was actually wrong
hono and fast-uri were reached through caret ranges, so a plain npm update moved them.
postcss and sharp were harder. The vulnerable copies were not the top-level ones - those were already patched at 8.5.24 and 0.35.3. They were nested copies that next 16.2.12 pins itself: postcss at exactly 8.4.31, and sharp behind ^0.34.5, which on a 0.x version cannot reach the 0.35.0 that fixes the libvips CVEs. Neither could move without forcing an override past what next expects.
next 16.3.0 pins postcss 8.5.23 and sharp ^0.35.3 - exactly the patched versions - so upgrading fixes both cleanly instead. The nested sharp is gone entirely; only the patched top-level copy remains. npm audit now reports zero.
Honest note on the sharp advisory
It was never reachable in this app. next only loads sharp to serve next/image, which this project does not use on any page, and the one direct use of sharp is a build script that resizes our own brand PNGs. It is fixed anyway, because the next upgrade was needed for postcss regardless.
The postcss advisories are about attacker-controlled sourceMappingURL comments in CSS. This project only ever processes its own stylesheets, so the practical exposure was likewise small.
Verified rather than assumed
next 16.2 → 16.3 is a minor version bump, so it was checked rather than trusted: typecheck clean, the design-system and i18n gates clean, a full build compiling, then a real start through the launcher with all 16 dashboard routes and 6 API endpoints answering 200.
Dependabot confirms it: 0 open alerts, 7 closed.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.2
Documentation only. Nothing in the application changed. Updating from v1.1.1 gains you nothing but a rebuild - skip it unless you happen to be updating anyway.
Release notes are in English now
Every release from v1.0.0 onward has been rewritten in English. The repository is public, and a release page most visitors cannot read is a release page that is not doing its job.
These are rewrites rather than translations. v1.0.0 through v1.0.3 already carried a short English section at the bottom, but it was a compressed summary that dropped most of the measurements. The English text now sits at the same level of detail as the original: the measurement tables, the worked examples, and the reasoning are all intact.
A handful of Vietnamese strings are kept deliberately. In v1.0.2 the filler-detection example needs "anh ấy", "cái đó", "lúc đó" and a lone "Đó" to make its point - translating them would delete the point.
The footer says what the ZIP cannot do
The footer appended to every release is English-first now, with a condensed Vietnamese block at the end for the people running this day to day.
It also documents something it never said before:
The ZIP download cannot update itself. Updating runs on git, and the source archive has no
.gitfolder, so the dashboard's update button reports a failed check. Moving to a newer version means a fresh ZIP plus copyingapps/server/data/,video-projects/,assets/and.envacross by hand.
Everything else about the ZIP is fine - it starts and builds normally, because the start scripts never touch git. Verified: zero git calls in start.ps1 and start.sh, CI builds the same tree from a clean checkout on every push, and .gitattributes keeps .sh and .command files at LF so they run on macOS and Linux.
If you plan to keep the project, clone it instead. Then updating is one button, and since v1.1.0 the updater backs your data up before it merges.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.1
⚠️ On v1.0.x? Back up before you updateSame warning as v1.1.0. The v1.1.x line removes Style Design from the repository, and the old update script on your machine does not know that - it will delete your Style Design as it fast-forwards.
Copy the
assets/folder somewhere else before pressing update, then copyassets/styles/back afterwards.One time only. From v1.1.0 onward the update script handles this itself. Already on v1.1.0? Skip this box.
A patch for v1.1.0: the sound effect library is back.
86 sound effects return, with the caveat stated
v1.1.0 removed all 104 files because nobody could remember their licensing any more. On reflection, for files whose provenance is merely unknown, saying so plainly beats throwing them away - working out of the box is worth something.
So 86 files return, and the README says exactly what they are:
Collected over years from assorted sources with no licensing records. Not recommended for commercial video - nobody can prove rights to them, including whoever put them here. For commercial work, replace them over time with CC0 or properly licensed audio.
The caveat appears in three places so it cannot be missed: at the top of assets/sound-effects/README.md, and in the asset table of both top-level READMEs.
18 files stay out
There is a line here, and it is not about how risky a file feels:
| How it is handled | |
|---|---|
| Provenance unknown (86 files) | A caveat is enough - nobody knows whose it is, including the owner if there is one |
| Owner identifiable (18 files) | A caveat fixes nothing |
The second group: the Netflix jingle (a registered sound mark, not merely copyright), Nintendo's coin and Mii channel music, Sega, two SpongeBob clips, the X-Files theme, the Windows XP startup sound, Clash Royale, two Vine clips, and two files still carrying the names a YouTube ripping site gave them.
They are listed by name in .gitignore with the reason written beside them, rather than hidden behind a pattern - so anyone who later considers adding them back can read why they are out.
The library.json catalogue still lists those 18, which is harmless: both readLibrary and GET /api/sfx drop entries whose file is missing, so a fresh install simply sees 86.
Recording the source of files you add
Each library.json entry now has two new fields, for when you add your own audio:
source- the URL you got the file from. Fill it in as you add, not later. This entire mess began with nobody writing it down.license- a license code (CC0-1.0,Pixabay,purchased,self-recorded…).
The folder README has a table of free sources usable in commercial video: Pixabay, Freesound (filter to CC0), Mixkit.
Everything else from v1.1.0 stands: Style Design remains machine-local data, fonts are still downloaded by name from Google Fonts, and the update script still backs your data up before it merges.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.1.0
📌 Correction - the sound effects came back
True for this v1.1.0 release: the sound effects folder ships EMPTY. Installing or updating to exactly this version leaves you with no sound effects.
Changed after release: 86 sound effects were put back into the repository with an explicit caveat - they are a collection from assorted sources with unknown licensing, not for commercial video. The 18 files whose owner is identifiable (the Netflix jingle, Nintendo sounds, SpongeBob, X-Files, Windows XP…) remain excluded, because a caveat does nothing for those.
That change is not in v1.1.0 - it is in v1.1.1. Update straight to v1.1.1; there is no need to pass through this one. Everything else below still applies.
⚠️ On v1.0.x? Back up before you updateThis release removes media from the repository, and the old update script on your machine does not know that - it will delete your sound effect library and your Style Design as it fast-forwards.
Copy the
assets/folder somewhere else before pressing update. Afterwards, copyassets/sound-effects/andassets/styles/back.One time only. From v1.1.0 onward the update script handles this itself.
This release is the cleanup for going open source: from here the repository ships code, not media.
Why
Reviewing every asset in the repository turned up two categories that cannot be redistributed.
104 sound effects with no record of where they came from. The filenames alone tell the story: netflix-jingle, mario-coin, mii-channel-music, sonic-ring, windows-xp-startup, x-files-theme, two SpongeBob clips, clash-royale-startup, vine-boom. Those are excerpts from works with owners, and the Netflix jingle in particular is a registered sound mark, not merely copyright. Two other files still carry the names a YouTube ripping site gave them.
The rest sound entirely harmless, but provenance that was never recorded cannot be proven. v1.1.0 removed all of them. (Changed afterwards: the 86 unattributable files came back with a caveat, and only the 18 identifiable ones stayed out - see the correction at the top.)
Two bundled Inter font files without their license. SIL OFL requires the license to travel with the font when it is redistributed.
Background music had already been excluded for exactly this reason. Everything else now follows the same rule.
What you will notice
| Folder | Before | From v1.1.0 |
|---|---|---|
assets/sound-effects/ |
104 files bundled | Empty here - 86 return in the next release |
assets/styles/ |
noti.vn style + fonts + logo | Empty - create your own |
assets/music/ |
Already empty | Unchanged |
assets/brand-logos/ |
123 brand logos | Unchanged |
Sound effects: use Upload on the Sound Effects page to add your own. Each entry now carries two extra fields, source (where you got it) and license - fill them in as you add, because in six months nobody remembers, and that is exactly why the old library had to be reconsidered. The folder's README lists free sources usable in commercial video (Pixabay, Freesound filtered to CC0, Mixkit) - use them to replace the unattributable collection over time.
Style Design: the page opens with an empty list and a create button. The first style you create becomes the default. This is your brand identity, so it belongs on your machine - a repository carrying someone else's style would have everyone building videos in their colours, and if that style has a logo, watermarking everyone's video with it.
Fonts: no font files ship any more, but using them got easier rather than harder - type a font name in Style Design and the system downloads it from Google Fonts onto your machine. The font picker now says where to browse the full catalogue, reminds you to pick one that covers the characters your language needs, and notes that every font keeps its own license.
The update script no longer destroys data
This is the bug this release found while checking itself. The update script only backed data up in the branch that handles a failed pull. But a successful pull deletes files too: anything the new version stops tracking disappears from your machine as it fast-forwards, silently, because from git's point of view nothing went wrong.
Reproduced on a clone: exit code 0, no warning, and 104 sound effects, styles.json and both font files gone.
The script now backs up before the merge, unconditionally, then copies back anything that is in the backup and no longer on disk. It only touches files that vanished, so nothing the new version brought in is overwritten, and when nothing needed restoring the backup deletes itself so it does not pile up with every update.
Verified: 109 files restored, including a file added by hand outside git's control, to prove git stash did not eat it.
Licensing
Both top-level READMEs now carry a full table: what ships, what does not, and under whose license. It states explicitly that the noti.vn name and logo are not covered by MIT, and what a fork should replace them with.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.
v1.0.9
A patch. Two bugs, one of which made two v1.0.8 features unusable.
Three settings that would not save
These three settings changed when you clicked them, then snapped back to the old value the moment you let go - while still flashing "saved":
- How many times the AI may redo a video
- Step limit for a single run
- Update channel (stable / latest)
The first two shipped in v1.0.8 - released, but adjustable by nobody. The third had been broken longer: anyone who switched to latest to get fixes early had in fact been sitting on stable the whole time.
The cause: the settings endpoint on the server listed the accepted field names by hand. A field missing from that list was not rejected - it was skipped without a word, and the server still answered "success" with the unchanged settings. All three were missing from the list.
That list is now keyed to the settings declaration itself, so adding a new setting without declaring it fails the build rather than shipping as a silent no-op.
A 30 ms fade at every cut edge
When a section is removed, the two remaining pieces are joined directly. The last audio sample of one piece and the first of the next have nothing to do with each other, so the join is a vertical step - and the ear hears a click. Nothing in the system smoothed those edges.
Measured on a real 278-second video, cutting the same points and comparing both versions (larger is more audible; anything above about 0.02 is audible):
| Kind of join | Before | After |
|---|---|---|
| Silence trim (40 joins) | worst 0.0113 - none audible | 0.0000 |
| Mid-speech (4 joins) | 0.1195 · 0.0744 · 0.0232 · 0.0064 - 3 of 4 audible | ≤ 0.0008 |
In other words: trimming silence was always fine, because the cut edge lands where there is almost no sound. What actually clicks is cutting through speech - removing a repeated sentence, and extracting a short from a long video (both edges of a short always land mid-sound). The worst join measured 0.1195, larger than the biggest step the speech itself produced in that file (0.0611).
Fixed on both paths: joining segments after auto-cut, and extracting shorts from a long video.
Videos already rendered cannot fix themselves - they need cutting again.
How to run
Windows - double-click start\start.bat
macOS - double-click start/start.command in Finder. .sh files CANNOT be double-clicked on macOS, they only open in an editor. If macOS blocks it as an "unidentified developer" the first time, right-click the file → Open → Open.
Linux - run ./start/start.sh in a terminal
If you downloaded the ZIP instead of cloning, grant the scripts permission to run, once:
chmod +x start/*.sh start/*.command update/*.sh update/*.command| Task | Windows | macOS | Linux |
|---|---|---|---|
| Start | start\start.bat |
start/start.command |
./start/start.sh |
| Stop | start\stop.bat |
start/stop.command |
./start/stop.sh |
| Update manually | update\update.bat |
update/update.command |
bash update/update.sh |
| Open a tunnel (upload from your phone over 4G/5G) | start\tunnel.bat |
start/tunnel.command |
./start/tunnel.sh |
You normally never run the update script by hand: the update button on the dashboard does it for you.
The ZIP download cannot update itself. Updating runs on git, and the source ZIP has no
.gitfolder, so the dashboard's update button will report a failed check. Moving to a newer version means downloading a fresh ZIP and copying your own data across:apps/server/data/(the database),video-projects/,assets/and.env. If you plan to keep the project,git cloneinstead - then updating is one button, and the updater backs your data up before it pulls.
On the first run the script checks your environment, installs what it can, installs dependencies, builds, then opens http://localhost:6868.
Requirements: Node.js 22+, FFmpeg on PATH, Google Chrome. You need to be signed in to Claude Code on the machine, or have an ANTHROPIC_API_KEY; image generation additionally needs a GEMINI_API_KEY.
Full documentation: English README · README tiếng Việt
Hướng dẫn chạy (tiếng Việt)
Windows: nhấp đúp start\start.bat. macOS: nhấp đúp start/start.command trong Finder (file .sh không nhấp đúp được trên macOS; lần đầu macOS chặn "unidentified developer" thì chuột phải vào file → Open → Open). Linux: chạy ./start/start.sh.
Tải bản ZIP thay vì git clone thì lần đầu cần chạy chmod +x start/*.sh start/*.command update/*.sh update/*.command.
Dừng bằng start\stop.bat / start/stop.command / ./start/stop.sh. Cập nhật thủ công bằng update\update.bat / update/update.command / bash update/update.sh, nhưng bình thường chỉ cần bấm nút cập nhật trên dashboard. Bản ZIP không tự cập nhật được (không có thư mục .git) - dùng lâu dài thì nên git clone.
Yêu cầu: Node.js 22+, FFmpeg trên PATH, Google Chrome. Cần đăng nhập Claude Code trên máy hoặc có ANTHROPIC_API_KEY; phần tạo ảnh cần thêm GEMINI_API_KEY. Hướng dẫn đầy đủ: README tiếng Việt.