Omniform depends on two external tools at runtime: yt-dlp for downloading media from URLs, and ffmpeg for converting between audio and video formats. Rather than requiring users to install these manually and add them to their systemDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/damianiglesias/omniform/llms.txt
Use this file to discover all available pages before exploring further.
PATH, Omniform downloads them automatically the first time it runs and keeps them in its own private data directory — completely separate from any system-wide installation. Users never need to interact with these tools directly.
Where binaries are stored
The binaries are stored inside the application’s data directory, under abin/ subdirectory. The path is resolved at runtime using Tauri’s app_data_dir() API (via app.path().app_data_dir()), which follows each platform’s standard conventions:
| Platform | Binary directory |
|---|---|
| Windows | %APPDATA%\omniform\bin\ |
| macOS | ~/Library/Application Support/omniform/bin/ |
| Linux | ~/.local/share/omniform/bin/ (XDG base directory) |
| Binary | Unix filename | Windows filename |
|---|---|---|
| yt-dlp | yt-dlp | yt-dlp.exe |
| ffmpeg | ffmpeg | ffmpeg.exe |
bin/ directory is created on app startup (inside the setup closure in lib.rs) so that the download functions always have a valid destination.
Download sources
Because yt-dlp and ffmpeg are fetched from external URLs, the sources are documented here for transparency. The URLs are defined insrc-tauri/src/dependencies.rs.
yt-dlp is always fetched from its official GitHub releases page, selecting the latest stable standalone binary for the current platform:
| Platform | URL |
|---|---|
| Windows | https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe |
| macOS | https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos |
| Linux | https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp |
| Platform | Source | Format |
|---|---|---|
| Windows | gyan.dev | .zip |
| macOS | evermeet.cx | .zip |
| Linux | johnvansickle.com | .tar.xz |
Archive extraction
yt-dlp is a single standalone binary and is written directly to disk after download. ffmpeg is distributed inside an archive and requires extraction. The app handles both archive formats in memory — no temporary files are written to disk during extraction:- zip (Windows and macOS) — handled by the
zipcrate. The code iterates over archive entries and extracts only the entry whose name ends withffmpeg.exe(Windows) or/ffmpeg(macOS), discarding everything else. - tar.xz (Linux) — the XZ-compressed data is first decoded in memory using the
xz2crate, then the resulting TAR stream is walked using thetarcrate. Only the entry with the filenameffmpegis unpacked.
0o755) using std::os::unix::fs::PermissionsExt.
Dependency status events
Throughout the setup process,dependencies.rs emits deps://status events that the frontend listens to via listen("deps://status") in useDownloadQueue. Each event carries a DependencyStatus payload:
App starts, check_dependencies is called
useDownloadQueue calls invoke("check_dependencies") on mount. Both ytDlpReady and ffmpegReady are false. App.tsx sees this and calls ensure_dependencies.ensure_dependencies begins, yt-dlp download starts
The backend emits
{ ytDlpReady: false, ffmpegReady: false, downloading: true, message: "Downloading yt-dlp..." }. The DependencyBanner component shows this message.yt-dlp installed, ffmpeg download starts
The backend emits
{ ytDlpReady: true, ffmpegReady: false, downloading: true, message: "Downloading ffmpeg..." }.downloading is set to false and message contains the error text. The DependencyBanner component renders a Retry button in this state, which calls ensureDependencies() again.
Changing the download sources
If you want to point the app at different binary sources — for example, to vendor the binaries directly into the repository, use an internal mirror, or pin to a specific yt-dlp version — the only file you need to edit issrc-tauri/src/dependencies.rs. The two functions that control the URLs are:
src-tauri/src/dependencies.rs
npm run tauri build.