{"record":{"id":"1c89611b253ac84a","repo":"bumptech/glide","slug":"no-transcoder-registered-to-transcode-from-resour","errorCode":null,"errorMessage":"No transcoder registered to transcode from {resourceClass} to {transcodedClass}","messagePattern":"No transcoder registered to transcode from (.+?) to (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"library/src/main/java/com/bumptech/glide/load/resource/transcode/TranscoderRegistry.java","lineNumber":58,"sourceCode":"   */\n  @NonNull\n  @SuppressWarnings(\"unchecked\")\n  public synchronized <Z, R> ResourceTranscoder<Z, R> get(\n      @NonNull Class<Z> resourceClass, @NonNull Class<R> transcodedClass) {\n    // For example, there may be a transcoder that can convert a GifDrawable to a Drawable, which\n    // will be caught above. However, if there is no registered transcoder, we can still just use\n    // the UnitTranscoder to return the Drawable because the transcode class (Drawable) is\n    // assignable from the resource class (GifDrawable).\n    if (transcodedClass.isAssignableFrom(resourceClass)) {\n      return (ResourceTranscoder<Z, R>) UnitTranscoder.get();\n    }\n    for (Entry<?, ?> entry : transcoders) {\n      if (entry.handles(resourceClass, transcodedClass)) {\n        return (ResourceTranscoder<Z, R>) entry.transcoder;\n      }\n    }\n\n    throw new IllegalArgumentException(\n        \"No transcoder registered to transcode from \" + resourceClass + \" to \" + transcodedClass);\n  }\n\n  @NonNull\n  @SuppressWarnings(\"unchecked\")\n  public synchronized <Z, R> List<Class<R>> getTranscodeClasses(\n      @NonNull Class<Z> resourceClass, @NonNull Class<R> transcodeClass) {\n    List<Class<R>> transcodeClasses = new ArrayList<>();\n    // GifDrawable -> Drawable is just the UnitTranscoder, as is GifDrawable -> GifDrawable.\n    if (transcodeClass.isAssignableFrom(resourceClass)) {\n      transcodeClasses.add(transcodeClass);\n      return transcodeClasses;\n    }\n\n    for (Entry<?, ?> entry : transcoders) {\n      if (entry.handles(resourceClass, transcodeClass)\n          && !transcodeClasses.contains((Class<R>) entry.toClass)) {\n        transcodeClasses.add((Class<R>) entry.toClass);","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/bumptech/glide/blob/eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a/library/src/main/java/com/bumptech/glide/load/resource/transcode/TranscoderRegistry.java#L40-L76","documentation":"IllegalArgumentException thrown by TranscoderRegistry.get() when no registered ResourceTranscoder can convert resourceClass to transcodedClass and the transcodedClass is not assignable from the resourceClass. Glide registers a fixed set of transcoders (e.g. Bitmap -> Drawable, GifDrawable -> Drawable); asking for an unregistered conversion path is a programming error.","triggerScenarios":"Calling .as(SomeClass) with a class Glide has no transcoder for, e.g. .as(JSONObject.class) or a custom model with no matching transcoder registration. Removing or failing to register a transcoder in a custom GlideModule.","commonSituations":"Misconfiguring Registry.append()/register() in an AppGlideModule so that a needed transcoder is missing. Asking .as() for a type the pipeline cannot produce. Type-erasure bugs where the resource class differs from what was registered.","solutions":["Use .asBitmap(), .asGif(), .asDrawable() etc. for supported types instead of arbitrary classes.","If you need a custom type, register a ResourceTranscoder via registry.register(ResourceClass, TranscodedClass, transcoder) in your AppGlideModule.","Check that your custom decoder produces a class for which a transcoder exists (or is assignable)."],"exampleFix":"// before\nGlide.with(ctx).as(MyCustomType.class).load(model).into(target); // no transcoder\n// after (register transcoder in AppGlideModule)\n@Override public void registerComponents(Context ctx, Glide glide, Registry registry) {\n  registry.register(Bitmap.class, MyCustomType.class, new MyTranscoder());\n}","handlingStrategy":"validation","validationCode":"// Prefer built-in .as*() factories; if you need a custom type, register a transcoder.\n// In AppGlideModule.registerComponents:\nregistry.register(MyResource.class, MyOutput.class, new MyTranscoder());","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use .asBitmap()/.asGif()/.asDrawable() instead of arbitrary .as(Class).","Register all custom transcoders in your AppGlideModule.","Verify registered decoder output types match the registered transcoder inputs."],"tags":["transcoder","registry","configuration","android"],"backgroundTag":null,"analyzedSha":"eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a","analyzedAt":"2026-08-14T01:43:54.821Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}