Spaces:
Running
Running
Commit History
-
feat(text): thêm tab "Chèn chữ vào video" (nhiều video) + nhận dạng lời (ASR)
- Tab mới /chen-chu: vào 1..N video, chèn chữ hard-sub, ra N video tương ứng. - Dùng lại SubtitleEditor (đủ phông/màu/11 kiểu nền/3 kiểu hiển thị/kéo thả) qua props tùy chọn initialSegs/initialMode/onChange/headerExtra/onFetchLines (mặc định null -> tab Dịch/đổi giọng không đổi). - Lấy text: nút "Tự lấy lời từ video (nhận dạng)" -> ASR Whisper (Groq) không dịch, đổ lời + mốc vào editor để sửa; hoặc gõ tay. - Áp form giữa các video: "Áp cả lời + kiểu" (cùng nội dung) và "Áp kiểu (giữ lời riêng)" (mỗi video tự nhận dạng lời khác nhau). - Backend: endpoint /api/dub/subtitle/transcribe (extract_tracks + asr, nhẹ); burn + preview-frame ra thư mục RIÊNG theo từng video (hash) -> burn nhiều video 1 phiên không đè nhau. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>788bc93
-
chore(web): ẩn "Listing ảnh Free" khỏi menu, route và Hướng dẫn
- Sidebar: comment mục "Listing ảnh Free". - App.jsx: comment lazy import + route /listing-free (vào thẳng -> 404). - Guide: comment cả mục hướng dẫn Listing ảnh Free. - ListingImage: bỏ câu tip nhắc dùng tab Listing ảnh Free. Tất cả comment lại (không xoá) để bật lại dễ. Backend /api/listing-free giữ nguyên (không còn lối vào từ UI). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>d249a38
-
perf: queue theo loại + code-split FE + streaming upload cho nhiều user
Backend: - Viết lại JobManager thành hàng đợi theo loại tác vụ (heavy/io), có vị trí hàng đợi (queue_pos/total) và tự dọn job cũ để không rò rỉ RAM. Cấu hình qua env JOB_HEAVY_WORKERS/JOB_IO_WORKERS/JOB_HISTORY_MAX. - core/bg.py: pool nền có giới hạn (BG_WORKERS) thay raw thread không giới hạn ở listing/listing_free/flux2. - Đưa OpenAI blocking ra khỏi event loop (listing analyze/create_session, listing_free analyze/auto-generate: async def -> def). - Streaming upload (save_upload_stream) thay vì đọc cả file vào RAM; enforce MAX_UPLOAD_MB. Áp cho dub/cut/shuffle. - Cache: Demucs model, ffprobe theo (path,mtime), client Groq. - thumbnail_strip gộp 40 lần ffmpeg -> 1 pass (fallback chậm khi lỗi). - Endpoint GET /api/queue/stats. Frontend: - Sửa bug double <Outlet> trong Layout (mọi trang mount 2 lần -> chạy đôi upload/poll/API). - Code-split các page bằng React.lazy + Suspense; tách react-vendor chunk. - pollJob nhận AbortSignal; hủy poll khi rời trang (chống rò rỉ setTimeou…3370310
-
feat: add Listing anh Free tool (Pillow design + Wangp background, web UI)
643d3ab
-
fix: wire up flux2 router in backend + add Flux2Gen route in frontend
a26bdd6
-
feat: lịch sử cá nhân + auto-save lên Google Drive
- Backend: service Google Drive (service account), history storage - API: /api/drive/setup, /api/drive/status, /api/history, /api/history/auto-save - Dub tool: tự động lưu kết quả sau khi xử lý + username tracking - Frontend: trang Lịch sử cá nhân, liên kết Drive, button sidebarcabddd5
-
feat: add auth approve flow - login route, admin page, Layout auth guard
3e1734c -
fix: wire up ListingImage and CreateVideo routes, add VideoGenProvider
b0a4915 -
deploy merged code
9b53f70