Skip to content

A disk error or a busy graphics card can switch the GPU encoder off or hide a working one #791

Open

Description

@thcp

What goes wrong

The GPU encoder's health tracking cannot tell a bad encoder from a bad moment. (1) Any non-zero ffmpeg exit during a GPU render counts as a GPU failure. Two of them (a full disk, a missing lane file) disable that encoder until the next start. (2) The "Test encoders" button replaces a passing cached result with whatever the new probe returned, even a transient failure, and it holds the probe lock for up to about three minutes.

Who is affected

Anyone using Auto with an NVIDIA, Intel or AMD encoder. The cost is a slower export (CPU) that nothing explains.

How to see it

  1. Fill the disk (or remove an input file) and export twice. After the second failure the log says the encoder is "not used again until StemDeck restarts".
  2. Or start a Demucs separation, press Test encoders while the card is busy, and see "out of memory" cached for ten minutes in place of the earlier pass (which was cached for a week).

Evidence

  • app/pipeline/take_render.py:598-602 raises TakeRenderError(..., "exit") for any non-zero exit.
  • app/api/takes.py:1593 calls video_encoder.record_failure for every TakeRenderError.
  • app/pipeline/video_encoder.py:650-662 counts them toward VIDEO_ENCODER_MAX_FAILURES = 2.
  • app/pipeline/video_encoder.py:758 calls probe(..., force=True); :606-624 overwrites the cache entry under _probe_lock.
  • TTLs: app/core/config.py:444-447.

Constraints for anyone fixing it

  • Only NVIDIA NVENC on Windows has been exercised. Intel QSV, AMD AMF, VAAPI and VideoToolbox report different error text, so any classification of "the encoder is at fault" has to work from exit reasons seen on real hardware (see the platform issue).
  • The ffmpeg error classifier is classify_failure (video_encoder.py:405).
  • Settings text (settings.export.encoder.*) would change if a new state is shown, so ten languages and the Guide are affected.

Origin

NEW in 0.21.0 (3b101bb, 2026-10-09). Found on the big-release branch (draft pull request #784); the work is not released yet.

Possible direction

Count a failure only when the exit looks like the encoder (classified reasons), and keep a passing result when a forced probe only fails transiently.

Verified by

read; the classifier output was run once (see the issue about error text reaching the client).

Activity

  1. added
    bugSomething isn't working
    reliabilityStability, resource management, race conditions
    on Oct 11, 2026
  2. self-assigned this
    on Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingreliabilityStability, resource management, race conditions

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions