bumptech/glide · error · NoImageHeaderParserException

Failed to find image header parser.

Error message

Failed to find image header parser.

What it means

Thrown (as NoImageHeaderParserException) by Registry.getImageHeaderParsers() when the image-header-parser registry is empty. Glide needs at least one ImageHeaderParser to inspect image headers (format, orientation, dimensions) during decoding.

Source

Thrown at library/src/main/java/com/bumptech/glide/Registry.java:602

    }
    throw new NoSourceEncoderAvailableException(data.getClass());
  }

  @NonNull
  public <X> DataRewinder<X> getRewinder(@NonNull X data) {
    return dataRewinderRegistry.build(data);
  }

  @NonNull
  public <Model> List<ModelLoader<Model, ?>> getModelLoaders(@NonNull Model model) {
    return modelLoaderRegistry.getModelLoaders(model);
  }

  @NonNull
  public List<ImageHeaderParser> getImageHeaderParsers() {
    List<ImageHeaderParser> result = imageHeaderParserRegistry.getParsers();
    if (result.isEmpty()) {
      throw new NoImageHeaderParserException();
    }
    return result;
  }

  /**
   * Thrown when no {@link com.bumptech.glide.load.model.ModelLoader} is registered for a given
   * model class.
   */
  // Never serialized by Glide.
  @SuppressWarnings("serial")
  public static class NoModelLoaderAvailableException extends MissingComponentException {

    public NoModelLoaderAvailableException(@NonNull Object model) {
      super("Failed to find any ModelLoaders registered for model class: " + model.getClass());
    }

    public <M> NoModelLoaderAvailableException(
        @NonNull M model, @NonNull List<ModelLoader<M, ?>> matchingButNotHandlingModelLoaders) {

View on GitHub (pinned to eb14a895d8)

Solutions

  1. Ensure Glide is initialized through the normal path (Glide.init / GeneratedAppGlideModule) which registers default ImageHeaderParsers.
  2. If building a custom Registry, register at least one ImageHeaderParser (e.g. DefaultImageHeaderParser) via registry.append(...).
  3. Keep the glide default integration artifacts (gif decoder, etc.) on the classpath.
  4. Add ProGuard/R8 keep rules so parsers are not stripped, or disable shrinking for Glide's registry classes.
  5. Avoid calling image-load APIs before Glide initialization completes.

Example fix

// before (custom Registry with no header parser)
val glide = GlideBuilder()
  .setRegistry(Registry()) // empty -> NoImageHeaderParserException
  .build(context)

// after
val registry = Registry().apply {
  register(InputStream::class.java, DefaultImageHeaderParser())
  // ... plus decoders/encoders
}
val glide = GlideBuilder().setRegistry(registry).build(context)
Defensive patterns

Strategy: validation

Validate before calling

// Ensure default header parsers are registered (normal init path does this).
// In a custom Registry, register at least one parser:
registry.register(InputStream::class.java, DefaultImageHeaderParser())

// Optionally guard before decoding an image.
fun canParseHeaders(glide: Glide): Boolean =
  try { glide.registry.imageHeaderParsers.isNotEmpty() } catch (e: NoImageHeaderParserException) { false }

Try / catch

try {
  glide.registry.imageHeaderParsers
} catch (e: NoImageHeaderParserException) {
  // register a parser or report misconfiguration before attempting loads
}

Prevention

When it happens

Trigger: getImageHeaderParsers() calls imageHeaderParserRegistry.getParsers(); if the list is empty, NoImageHeaderParserException is thrown.

Common situations: A trimmed Glide setup where the default header parsers were not registered (e.g. constructing Glide via GlideBuilder without registering defaults); a custom Registry/Initializer that cleared parsers; aggressive R8/ProGuard stripping; missing glide-gif-decoder / default decoder integrations; image loading attempted before full Glide initialization.

Related errors


AI-assisted analysis of bumptech/glide@eb14a895d8 (2026-08-14). Data as JSON: /api/errors/441072b70464b8ce. Report an issue: GitHub.