Files
cube/apps/video2slides/src/main.rs
T
fam a0253e118f
deploy music / build-and-deploy (push) Canceled after 0s
deploy webgl / build-and-deploy (push) Canceled after 0s
deploy karaoke / build-and-deploy (push) Canceled after 0s
deploy articulate / build-and-deploy (push) Canceled after 0s
deploy cube / build-and-deploy (push) Canceled after 0s
deploy llm-proxy / build-and-deploy (push) Canceled after 0s
deploy notes / build-and-deploy (push) Canceled after 0s
deploy simpleasm / build-and-deploy (push) Canceled after 0s
deploy video2slides / build-and-deploy (push) Canceled after 0s
deploy werewolf / build-and-deploy (push) Canceled after 0s
deploy write / build-and-deploy (push) Canceled after 0s
video2slides: 重构为纯客户端 app(浏览器抽帧 + IndexedDB),后端归零
- 不再上传视频:<video>+canvas 原生解码按时间戳 seek 抽帧,逐帧 256px 灰度
  MAE 算差异,缩略图(320)+大图(1280) 随抽随写 IndexedDB,带进度条+ETA
- 阈值/手动 保留弃用/缩放偏好 持久化到 IndexedDB,刷新仍在
- PDF 导出回到客户端 jsPDF,保留帧逐张 base64 嵌入、单帧处理防 OOM
- 后端删光业务逻辑(core.rs/handlers.rs),main.rs 缩成 cube_core::base 静态服务
- 不再需要 ffmpeg → Dockerfile 回归 FROM scratch;k8s 去掉 hostPath 卷、降资源
- 真浏览器(Playwright)验证:抽帧/差异/阈值/持久化/导出 全通过
2026-06-14 22:25:20 +01:00

15 lines
750 B
Rust

//! video2slides.famzheng.me — 长视频抽帧、逐帧差异、拖阈值挑关键画面/幻灯片。
//!
//! **纯客户端 app**:视频不上传,浏览器用 `<video>` + canvas 原生解码抽帧,
//! 逐帧差异、缩略图、PDF 导出全在前端,结果存 IndexedDB(每浏览器各自持久化)。
//!
//! 所以这里没有任何业务后端 —— 这个进程只是个静态文件服务器,把前端发出去。
//! `cube_core::base` 已经包含 healthz + 静态目录 + SPA fallback。
#[tokio::main]
async fn main() -> std::io::Result<()> {
cube_core::init_tracing();
let dist = std::env::var("VIDEO2SLIDES_DIST_DIR").unwrap_or_else(|_| "/dist".into());
cube_core::serve(cube_core::base(dist), 8080).await
}