Zackriya-Solutions/meetily · error · anyhow::Error

No audio file found in: {}

Error message

No audio file found in: {}

What it means

find_audio_file walked the meeting folder and found no file whose (lowercased) extension is in AUDIO_EXTENSIONS ('mp4', 'm4a', 'wav', 'mp3', 'flac', 'ogg', 'aac', 'mkv', 'webm', 'wma'). Retranscription needs source audio, so it aborts before any progress is emitted.

Source

Thrown at frontend/src-tauri/src/audio/retranscription.rs:168

        if path.exists() {
            return Ok(path);
        }
    }

    // Fallback: scan folder for any file with an audio extension
    if let Ok(entries) = std::fs::read_dir(folder) {
        for entry in entries.flatten() {
            let path = entry.path();
            if let Some(ext) = path.extension() {
                let ext = ext.to_string_lossy().to_lowercase();
                if AUDIO_EXTENSIONS.contains(&ext.as_str()) {
                    return Ok(path);
                }
            }
        }
    }

    Err(anyhow!("No audio file found in: {}", folder.display()))
}

/// Internal function to run retranscription
async fn run_retranscription<R: Runtime>(
    app: AppHandle<R>,
    meeting_id: String,
    meeting_folder_path: String,
    language: Option<String>,
    model: Option<String>,
    provider: Option<String>,
) -> Result<RetranscriptionResult> {
    let folder_path = PathBuf::from(&meeting_folder_path);
    let audio_path = find_audio_file(&folder_path)?;

    // Determine which provider to use (default to whisper)
    let use_parakeet = provider.as_deref() == Some("parakeet");

    info!(

View on GitHub (pinned to 0281737d87)

Solutions

  1. List the meeting folder and confirm an audio file exists with a supported extension (mp4/m4a/wav/mp3/flac/ogg/aac/mkv/webm/wma)
  2. Rename the file to a supported extension, or extend AUDIO_EXTENSIONS in audio/constants.rs to cover it
  3. Verify meeting_folder_path matches the actual meeting directory

Example fix

// before
Err(anyhow!("No audio file found in: {}", folder.display()))

// after - include what was actually looked for and found, so users can self-diagnose
let contents: Vec<String> = std::fs::read_dir(folder)?
    .flatten()
    .map(|e| e.file_name().to_string_lossy().into_owned())
    .collect();
Err(anyhow!(
    "No audio file with extension in {:?} found in {} (folder contents: {:?})",
    AUDIO_EXTENSIONS,
    folder.display(),
    contents
))
Defensive patterns

Strategy: validation

Validate before calling

// Frontend/backend: only offer retranscription when source audio exists
fn has_audio_file(folder: &std::path::Path) -> bool {
    const EXTS: [&str; 10] = ["mp4", "m4a", "wav", "mp3", "flac", "ogg", "aac", "mkv", "webm", "wma"];
    std::fs::read_dir(folder)
        .map(|entries| {
            entries.flatten().any(|e| {
                e.path()
                    .extension()
                    .map(|x| EXTS.contains(&x.to_string_lossy().to_lowercase().as_str()))
                    .unwrap_or(false)
            })
        })
        .unwrap_or(false)
}

Try / catch

Catch 'No audio file found' and present it as a precondition message ('This meeting has no stored audio to retranscribe') rather than a generic error; keep the rest of the meeting data intact.

Prevention

When it happens

Trigger: The meeting folder contains only transcripts/summaries because audio was never saved (auto-save off and app closed) or was deleted by the user; the audio file has an extension outside the whitelist; the passed meeting_folder_path points to the wrong or renamed directory.

Common situations: Retranscribing old meetings recorded before auto-save existed; users cleaning up disk space by deleting large audio files; files renamed to .mpeg or other unlisted extensions.

Related errors


AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16). Data as JSON: /api/errors/eb9a0215cb8eb360. Report an issue: GitHub.