wer / README.md
roop07's picture
Upload 3 files
f129034 verified
|
Raw History Blame Contribute Delete
2.11 kB

Wav2Lip browser/static prototype

This project is the first step toward:

Hugging Face static page → browser video/audio upload → ONNX Wav2Lip inference in browser → MP4 generated locally

What this prototype proves

  • No Python backend.
  • No Hugging Face inference backend.
  • onnxruntime-web executes the Wav2Lip ONNX model in the browser.
  • Video/audio are processed locally.
  • The preprocessing follows the supplied notebook's important values:
    • 16 kHz audio
    • 800 FFT
    • 200 hop
    • 80 mel bins
    • 55–7600 Hz
    • 16 mel columns per Wav2Lip input chunk
    • 6-channel masked+original 96×96 face input
  • The notebook's ONNX input names are used: mel_spectrogram, video_frames
  • The output name is predicted_frames.

Current limitation

This is deliberately a browser proof-of-concept, not yet the final one-click MP4 application.

Two parts still need production hardening:

  1. The JavaScript mel implementation should be replaced by a tested FFT/mel implementation that is numerically matched to the exact Wav2Lip/librosa preprocessing.
  2. The generated frames need to be encoded and muxed with the target audio. The recommended browser path is WebCodecs + an MP4 muxer, with ffmpeg.wasm as fallback.

Model

For the first browser test, use the wav2lip_gan.onnx model from the supplied notebook/model package.

Do NOT put a model URL in the page until you have uploaded the ONNX model to a location that permits browser CORS requests.

Face crop

The supplied notebook uses a fixed face box:

x=1740, y=294, w=998, h=998

This prototype exposes those values as editable fields.

A production version should add automatic browser face detection/tracking.

Hugging Face Static deployment

Upload these files to a Hugging Face Space configured for a static site:

  • index.html
  • app.js
  • README.md

The ONNX model can be stored separately or in the same Space using Git LFS, depending on the repository/storage limits you have.

Privacy

When the full pipeline is browser-only, source video and target audio do not need to be uploaded to an inference server.