Spaces:
Running
Running
Commit History
-
feat(analytics): tab "Quản lý thời lượng" theo dõi người dùng cho quản trị
Ghi log thô raw_events rồi suy ra 9 chỉ số (A1-A5, B1-B4) bằng ETL, không lưu sẵn chỉ số. Lưu Postgres nếu có DATABASE_URL, không thì SQLite trong STORAGE_DIR (giữ 90 ngày, tự dọn). - backend: services/analytics (storage + etl + track), api/analytics (POST /api/events + các endpoint quản trị), middleware reqctx đọc header X-TNT-* để dòng log máy chạy gắn đúng task; JobManager tự phát job_queued/started/done kèm latency_ms (đã trừ thời gian chờ hàng đợi). - frontend: lib/track.js (đồng hồ người), nút 👍/👎 (ThumbsFeedback) cho B3, dashboard SVG thuần trong tab Quản lý thời lượng; gắn điểm đo vào 8 tool. Kèm sửa lỗi phát hiện khi test: - khôi phục core.files.rel_path() + gom mọi đường dẫn phiên ở cut/dub/shuffle/ download về "/" (trước nối "\" của Windows làm hỏng URL). - get_file trả 404 khi trỏ vào thư mục (thay vì 500). - run_tests.py cô lập STORAGE_DIR sang temp (trước dọn nhầm phiên thật). - cập nhật test_cut/test_dub theo API hiện hành + thêm test_analytics (14 test). …00d2c12
-
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
-
fix download race: use tempfile + BackgroundTasks, tránh Response content shorter than Content-Length
e47be4d -
person types: composite person+SP ko mask, giữ face+SP, đổi tư thế
1bab57c -
unboxing: dùng SP ref, ko dùng người, only tay + hộp
8f4d847 -
person types: ko mask, giữ face nhg thay đổi tư thế/biểu cảm/tương tác SP
4234f1f -
pain_point + before_after dùng person composite, display giữ scene
4f8260d -
ghép product + person/scene thành 1 ref, mask giữ cả 2
17aabd9 -
luôn dùng ảnh SP làm ref chính + mask giữ SP, tất cả loại ảnh
deb2912 -
mask tự động giữ nguyên vùng SP/người, chỉ edit background
1ee3e6d -
gpt-image-2 low, zoomable lightbox, scene prompt mô tả rõ
c89dcf6 -
3-upload slots, type grid, preserve product in edit
e1244f0
-
feat: auto-save kết quả tool lên Drive + lịch sử cho download/cut/shuffle/listing
b4fd22e
-
fix: add missing api_key params to /session endpoint
14905fd -
refactor: merge app/ vào backend/app/, xoá app/ gốc
de3a7c5