{"record":{"id":"9298c43cf8d61ccb","repo":"AUTOMATIC1111/stable-diffusion-webui","slug":"file-cannot-be-fetched-item-failed-to-load-cov","errorCode":null,"errorMessage":"File cannot be fetched: {item}. Failed to load cover image.","messagePattern":"File cannot be fetched: (.+?)\\. Failed to load cover image\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"modules/ui_extra_networks.py","lineNumber":136,"sourceCode":"    if page is None:\r\n        raise HTTPException(status_code=404, detail=\"File not found\")\r\n\r\n    metadata = page.metadata.get(item)\r\n    if metadata is None:\r\n        raise HTTPException(status_code=404, detail=\"File not found\")\r\n\r\n    cover_images = json.loads(metadata.get('ssmd_cover_images', {}))\r\n    image = cover_images[index] if index < len(cover_images) else None\r\n    if not image:\r\n        raise HTTPException(status_code=404, detail=\"File not found\")\r\n\r\n    try:\r\n        image = Image.open(BytesIO(b64decode(image)))\r\n        buffer = BytesIO()\r\n        image.save(buffer, format=image.format)\r\n        return Response(content=buffer.getvalue(), media_type=image.get_format_mimetype())\r\n    except Exception as err:\r\n        raise ValueError(f\"File cannot be fetched: {item}. Failed to load cover image.\") from err\r\n\r\n\r\ndef get_metadata(page: str = \"\", item: str = \"\"):\r\n    from starlette.responses import JSONResponse\r\n\r\n    page = next(iter([x for x in extra_pages if x.name == page]), None)\r\n    if page is None:\r\n        return JSONResponse({})\r\n\r\n    metadata = page.metadata.get(item)\r\n    if metadata is None:\r\n        return JSONResponse({})\r\n\r\n    metadata = {i:metadata[i] for i in metadata if i != 'ssmd_cover_images'}  # those are cover images, and they are too big to display in UI as text\r\n\r\n    return JSONResponse({\"metadata\": json.dumps(metadata, indent=4, ensure_ascii=False)})\r\n\r\n\r","sourceCodeStart":118,"sourceCodeEnd":154,"githubUrl":"https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/82a973c04367123ae98bd9abdf80d9eda9b910e2/modules/ui_extra_networks.py#L118-L154","documentation":"Final stage of fetch_cover_images(): the selected base64 entry must be decodable by b64decode and openable by PIL, then re-saved. Any exception in that chain (binascii.Error from bad base64, PIL.UnidentifiedImageError from non-image bytes) is re-raised as this ValueError naming the item.","triggerScenarios":"ssmd_cover_images containing base64 that is truncated, contains data-URI prefixes ('data:image/png;base64,...'), whitespace/newlines some decoders reject in strict mode, or bytes that are not an image at all.","commonSituations":"Hand-pasted or script-generated metadata with data-URI prefixes; Civitai exporter tools writing slightly different base64; JSON escaped with wrapping newlines every 76 chars (MIME style).","solutions":["Strip any 'data:image/...;base64,' prefix and all whitespace/newlines from the stored value","Validate offline: PIL.Image.open(BytesIO(base64.b64decode(s, validate=True))) on each entry, and fix/remove the bad one","Re-generate the cover metadata with the extension/tool that owns it rather than editing JSON by hand"],"exampleFix":"# before\n\"ssmd_cover_images\": [\"data:image/png;base64,iVBOR...\"]\n# after\n\"ssmd_cover_images\": [\"iVBOR...\"]","handlingStrategy":"try-catch","validationCode":"import base64, io\nfrom PIL import Image\ndef cover_entry_ok(b64: str) -> bool:\n    try:\n        raw = b64.split(',')[-1].strip().replace('\\n', '').replace(' ', '')\n        Image.open(io.BytesIO(base64.b64decode(raw, validate=True)))\n        return True\n    except Exception:\n        return False","typeGuard":null,"tryCatchPattern":"try:\n    resp = fetch_cover_images(...)  # or direct PIL decode\nexcept ValueError as e:\n    if 'Failed to load cover image' in str(e):\n        drop_bad_cover_metadata(item)","preventionTips":["Store pure base64 without data-URI prefixes or line wrapping","Validate cover entries with a decode+PIL.open probe when writing metadata","Strip whitespace before b64decode in your own tooling"],"tags":["base64","image-decoding","metadata","extra-networks","cover-image"],"backgroundTag":null,"analyzedSha":"82a973c04367123ae98bd9abdf80d9eda9b910e2","analyzedAt":"2026-08-14T16:46:43.225Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}