spacedriveapp/spacedrive · error

Proxy generation failed: {}

Error message

Proxy generation failed: {}

What it means

The proxy processor delegates to generate_proxy_for_file with the library, resolved content_uuid, entry path, variant, hardware-accel flag, preset, and regenerate=false; any failure inside generation (transcode/ffmpeg error, unsupported codec, missing binary, unwritable output path, insufficient disk) is wrapped here. The message is a shell around the real generation error, which is where to look.

Source

Thrown at core/src/ops/media/proxy/processor.rs:140

			return Ok(ProcessorResult::failure(
				"Entry has no content_id".to_string(),
			));
		};

		debug!("→ Generating scrubbing proxy for: {}", entry.path.display());

		// Call shared generation function
		let count = super::generate_proxy_for_file(
			&self.library,
			&content_uuid,
			&entry.path,
			&[self.variant.clone()],
			self.use_hardware_accel,
			&self.preset,
			false, // Don't regenerate in processor
		)
		.await
		.map_err(|e| anyhow::anyhow!("Proxy generation failed: {}", e))?;

		if count > 0 {
			debug!("✓ Generated scrubbing proxy for: {}", entry.path.display());
		}

		Ok(ProcessorResult::success(count, 0))
	}

	pub fn name(&self) -> &'static str {
		"proxy"
	}
}

View on GitHub (pinned to 6dfeccf211)

Solutions

  1. Read the wrapped inner error to identify the failing stage (spawn, decode, encode, write)
  2. Verify ffmpeg is installed and works standalone with the same preset/codec arguments
  3. Retry with use_hardware_accel disabled if the error names a hwaccel device or codec
  4. Check output directory writability and free disk space
Defensive patterns

Strategy: retry

Validate before calling

// Pre-flight the transcoder before queueing proxy generation
if which::which("ffmpeg").is_err() {
    // skip or fall back to software proxy generation
}
if !output_dir_is_writable(&library).await { /* alert before queueing */ }

Try / catch

match generate_proxy_for_file(&self.library, &content_uuid, &entry.path, &[self.variant.clone()], self.use_hardware_accel, &self.preset, false).await {
    Ok(count) => count,
    Err(e) if e.to_string().contains("hwaccel") || e.to_string().contains("vaapi") || e.to_string().contains("nvenc") => {
        // retry once with hardware acceleration disabled
        generate_proxy_for_file(&self.library, &content_uuid, &entry.path, &[self.variant.clone()], false, &self.preset, false).await?
    }
    Err(e) => return Err(anyhow::anyhow!("Proxy generation failed: {}", e)),
}

Prevention

When it happens

Trigger: ffmpeg missing from PATH or a non-functional build; hardware acceleration requested on a machine without the required GPU/codec support; source file unreadable or in a format the preset cannot handle; output directory permissions; disk full.

Common situations: Headless servers without ffmpeg installed; driver/mesa updates breaking VAAPI/NVENC; corrupt media files failing mid-transcode; thumbnails/proxies filling the disk.

Related errors


AI-assisted analysis of spacedriveapp/spacedrive@6dfeccf211 (2026-08-16). Data as JSON: /api/errors/170008ee558efa59. Report an issue: GitHub.