YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
ReupFlow — Hybrid AutoReup Studio
MVP điều phối quy trình phát hiện, duyệt, dịch, lồng tiếng, dựng và đăng lại video theo đặc tả trong duan.md. Hệ thống ưu tiên chạy local, các tác vụ ngôn ngữ dùng cloud API và các tác vụ media chạy bằng Python/FFmpeg.
Chức năng đã có
- Dashboard React responsive: video chờ duyệt, trạng thái pipeline, Manual/Auto, log realtime.
- Trình sửa phụ đề theo timeline, lưu nháp và duyệt để chuyển từ Light Queue sang Heavy Queue.
- Giao diện quản trị đầy đủ cho thư viện, chiến dịch, kênh theo dõi, hàng đợi, voice và trạng thái cấu hình.
- Chọn voice riêng cho từng video trước khi duyệt hoặc ngay trong trình sửa phụ đề; lựa chọn được lưu xuống database và truyền tới worker tạo giọng.
- KhanhTTS OmniVoice chạy local bằng môi trường Python/CUDA riêng, hỗ trợ voice design và voice cloning trên GPU.
- REST API + Socket.IO, Prisma và cơ sở dữ liệu SQLite cho Campaign, Channel, Video, Job, Subtitle.
- BullMQ/Redis tùy chọn, có retry và giới hạn Heavy Worker; fallback bất đồng bộ nội bộ khi chưa chạy Redis.
- Python workers độc lập: tải video, tách audio, Groq Whisper, Gemini, Edge TTS, FFmpeg và Playwright.
- Downloader ưu tiên nền tảng Trung Quốc: Bilibili, Douyin, Kuaishou, Xiaohongshu, Weibo, Youku, iQIYI, Tencent Video và Xigua/Toutiao.
yt-dlpchạy trước, Lux tự động fallback nếu extractor thất bại. - Thông báo Telegram tùy chọn và chế độ
DRY_RUNđể thử toàn bộ luồng không tốn API/GPU.
Chạy nhanh (Windows)
Yêu cầu Node.js 20+, npm và Python 3.10+. Với chế độ demo, chưa cần FFmpeg hay Redis.
Copy-Item .env.example .env
npm install
npm run db:push
npm run dev
Mở http://localhost:5173. API chạy tại http://localhost:4000. Dữ liệu mẫu được tạo ở lần chạy đầu; bấm Xác nhận Reup, chờ vài giây, sau đó mở trình biên tập và duyệt sản xuất để thử trọn pipeline.
Nếu dùng bộ công cụ portable đã cài trong .tools trên Windows, bạn có thể khởi chạy dự án bằng lệnh sau (để vượt qua chính sách chặn script của PowerShell):
powershell -ExecutionPolicy Bypass -File .\start-local.ps1
Build lại bằng lệnh tương tự với file build-local.ps1. Không cần thêm Node.js hoặc Python vào PATH của hệ thống.
Bật xử lý thật
- Cài Python packages:
pip install -r 3_Local_Workers/requirements.txt. - Cài FFmpeg và bảo đảm lệnh
ffmpegcó trong PATH. - Điền
GROQ_API_KEY,GEMINI_API_KEYtrong.env. - Đặt
DRY_RUN=false. - Nếu dùng hàng đợi bền vững, chạy
docker compose up -d redisvà đặtUSE_REDIS=true. - Nếu đăng tự động, chạy
playwright install chromium, đăng nhập một lần trong thư mục session và hoàn thiện selector theo nền tảng mục tiêu.
Cookie và proxy cho nền tảng Trung Quốc
Xuất cookie đăng nhập theo định dạng Netscape vào 4_Storage_Data/f_browser_sessions/china-cookies.txt. Cookie thường cần cho Bilibili 1080p+, Douyin/Xigua, Youku và nội dung yêu cầu đăng nhập. Không commit hoặc chia sẻ file này.
Nếu nền tảng giới hạn vị trí địa lý, đặt proxy trong .env:
CHINA_PROXY_URL=http://user:password@host:port
Dashboard chấp nhận cả URL thuần lẫn toàn bộ đoạn nội dung được sao chép từ nút Share của ứng dụng Trung Quốc.
Auto upload được để ở trạng thái an toàn: worker mở đúng persistent browser session nhưng không tự bấm Publish cho đến khi selector và chính sách của nền tảng được cấu hình. Điều này tránh đăng nhầm trong lần khởi động đầu tiên.
Cấu trúc
1_Frontend_React/ React + TypeScript + Socket.IO client
2_Backend_API/ Express + Prisma + BullMQ + Socket.IO
3_Local_Workers/ Các bước pipeline Python 00–06
4_Storage_Data/ Raw, audio, subtitle, voice, export, browser session
Cấu hình quan trọng
| Biến | Mặc định | Ý nghĩa |
|---|---|---|
DRY_RUN |
true |
Mô phỏng worker, không tải/gọi API/đăng bài |
USE_REDIS |
false |
Bật BullMQ và log Redis |
HEAVY_CONCURRENCY |
1 |
Số video dựng đồng thời |
DATABASE_URL |
file:./dev.db |
Database cho Prisma |
PYTHON_BIN |
python |
Lệnh Python backend sử dụng |
FRONTEND_URL |
http://localhost:5173 |
Origin được phép kết nối API/socket |
Lưu ý production
- Chuyển Prisma datasource sang PostgreSQL khi triển khai nhiều máy; SQLite phù hợp cho studio một máy/MVP.
- RVC cần được nối qua model
.pthcụ thể và runtime tương ứng GPU; worker hiện tạo giọng nền Edge TTS trước. - YouTube/TikTok có điều khoản và cơ chế kiểm duyệt riêng. Chỉ xử lý nội dung bạn có quyền sử dụng và ưu tiên API upload chính thức khi có thể.
OmniVoice Original local
Weights chính thức k2-fsa/OmniVoice nằm tại OmniVoice-model/; mã nguồn tham khảo nằm tại OmniVoice/. Runtime Python/CUDA hiện được giữ trong .tools/khanhtts/ để không phải tải lại PyTorch, nhưng inference sử dụng model gốc.
Các biến quan trọng trong .env:
OMNIVOICE_PYTHON=D:\reupvideo\.tools\khanhtts\python\python.exe
OMNIVOICE_MODEL_PATH=D:\reupvideo\OmniVoice-model
OMNIVOICE_NUM_STEPS=20
OMNIVOICE_DURATION_PADDING=1.12
OMNIVOICE_CHUNK_DURATION=12
OMNIVOICE_INSTRUCT=female, young adult, moderate pitch
Để clone một giọng đã được cho phép sử dụng, đặt audio tham chiếu 3–10 giây và transcript chính xác:
OMNIVOICE_REF_AUDIO=D:\duong-dan\reference.wav
OMNIVOICE_REF_TEXT=Nội dung được đọc chính xác trong file tham chiếu.
Worker dùng bộ ước lượng thời lượng của OmniVoice và chia đoạn dài để hạn chế lặp từ, nuốt chữ hoặc đổi giọng giữa video.
Trong màn Mô hình giọng:
- Voice Design tạo profile từ giới tính, độ tuổi, cao độ, kiểu đọc và accent được OmniVoice hỗ trợ.
- Clone giọng nhận audio WAV/MP3/M4A/FLAC/OGG và transcript chính xác. Audio được lưu local trong
4_Storage_Data/g_voice_references/. - Voice profile mới tự động xuất hiện trong bộ chọn voice khi nhập video, duyệt video và chỉnh phụ đề.
Chỉ clone giọng khi có quyền và sự đồng ý hợp pháp của người sở hữu giọng nói. # reupvideo