Skip to main content

Documentation 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.

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 system 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 a bin/ 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:
PlatformBinary directory
Windows%APPDATA%\omniform\bin\
macOS~/Library/Application Support/omniform/bin/
Linux~/.local/share/omniform/bin/ (XDG base directory)
The binary filenames are:
BinaryUnix filenameWindows filename
yt-dlpyt-dlpyt-dlp.exe
ffmpegffmpegffmpeg.exe
The 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 in src-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:
PlatformURL
Windowshttps://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe
macOShttps://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos
Linuxhttps://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp
ffmpeg does not publish a single official standalone binary per platform the way yt-dlp does. The app uses widely trusted community-maintained static builds:
PlatformSourceFormat
Windowsgyan.dev.zip
macOSevermeet.cx.zip
Linuxjohnvansickle.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 zip crate. The code iterates over archive entries and extracts only the entry whose name ends with ffmpeg.exe (Windows) or /ffmpeg (macOS), discarding everything else.
  • tar.xz (Linux) — the XZ-compressed data is first decoded in memory using the xz2 crate, then the resulting TAR stream is walked using the tar crate. Only the entry with the filename ffmpeg is unpacked.
On Unix platforms (macOS and Linux), after the binary is written the app sets executable permissions (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:
interface DependencyStatus {
  ytDlpReady: boolean;   // true once yt-dlp binary is present and executable
  ffmpegReady: boolean;  // true once ffmpeg binary is present and executable
  downloading: boolean;  // true while a download is in progress
  message: string | null; // human-readable status string, e.g. "Downloading yt-dlp..."
}
The sequence of events during a typical first-run setup looks like this:
1

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.
2

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.
3

yt-dlp installed, ffmpeg download starts

The backend emits { ytDlpReady: true, ffmpegReady: false, downloading: true, message: "Downloading ffmpeg..." }.
4

Setup complete

The backend emits { ytDlpReady: true, ffmpegReady: true, downloading: false, message: "Ready." }. The banner clears and the URL form becomes active.
If either download fails, 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 is src-tauri/src/dependencies.rs. The two functions that control the URLs are:
src-tauri/src/dependencies.rs
fn yt_dlp_download_url() -> &'static str {
    if cfg!(target_os = "windows") {
        "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe"
    } else if cfg!(target_os = "macos") {
        "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos"
    } else {
        "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp"
    }
}

fn ffmpeg_download_url() -> &'static str {
    if cfg!(target_os = "windows") {
        "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
    } else if cfg!(target_os = "macos") {
        "https://evermeet.cx/ffmpeg/getrelease/zip"
    } else {
        "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz"
    }
}
Replace the URL string literals with your own mirror or vendored file URLs. For a vendored binary shipped inside the app bundle, you could skip the download entirely and instead copy the binary from Tauri’s resource directory — but that requires changes beyond these two functions. After editing the file, rebuild the app with npm run tauri build.
Changing the ffmpeg download URL requires the file served at that URL to match the archive format the extraction code expects: zip for Windows and macOS, tar.xz for Linux. If the format does not match, the extraction step will fail with an error at runtime. If you need to use a different archive format, you must also update the install_ffmpeg function and its helpers (extract_ffmpeg_zip, extract_ffmpeg_tar_xz) in dependencies.rs.

Build docs developers (and LLMs) love