{"id":17959184,"url":"https://github.com/qcasey/fetch-image-proxy","last_synced_at":"2025-07-05T18:35:15.311Z","repository":{"id":115641058,"uuid":"451559793","full_name":"qcasey/fetch-image-proxy","owner":"qcasey","description":"Proxy to fetch any header or hero image from a URL","archived":false,"fork":false,"pushed_at":"2022-01-28T18:19:28.000Z","size":24,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-29T11:57:12.751Z","etag":null,"topics":["image-api","image-proxy"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qcasey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-24T17:16:17.000Z","updated_at":"2023-02-25T15:33:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"c915dacc-c692-443b-9680-c697fa6cbfef","html_url":"https://github.com/qcasey/fetch-image-proxy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/qcasey/fetch-image-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcasey%2Ffetch-image-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcasey%2Ffetch-image-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcasey%2Ffetch-image-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcasey%2Ffetch-image-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qcasey","download_url":"https://codeload.github.com/qcasey/fetch-image-proxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcasey%2Ffetch-image-proxy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263785327,"owners_count":23511088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["image-api","image-proxy"],"created_at":"2024-10-29T11:01:41.610Z","updated_at":"2025-07-05T18:35:15.301Z","avatar_url":"https://github.com/qcasey.png","language":"JavaScript","readme":"# fetch-image-proxy\n\n\u003e *An image, an image! My Kingdom for a header image!*\n\u003e \n\u003e King Richard III, probably\n\nUses the wonderful npm package [open-graph-scraper](https://www.npmjs.com/package/open-graph-scraper) to fetch *some* image from a given URL. \n\n## Usage\n\nI have a demo server running at `https://image.letterq.org/URL_TO_FETCH_IMAGE_FROM`\n\n`URL_TO_FETCH_IMAGES_FROM` **must** be url encoded.\n\nFor example, the header image to this repo can be fetched like this: https://image.letterq.org/https%3A%2F%2Fgithub.com%2Fqcasey%2Ffetch-image-proxy\n\n[Docker Image](https://hub.docker.com/repository/docker/qcasey1/fetch-image-proxy) is built automatically to run your own server.\n\n## Implementation\n\nThe package prefers [open graph images](https://ogp.me/), but will fall back to the first inline `\u003cimg\u003e` otherwise.\n\nThis API 302 redirects requests to the found image, so you can include it (with an errorBuilder) in components like:\n\n```dart\nfinal String url = \"https://ogp.me/\";\nImage.network(\"https://image.letterq.org/${Uri.encodeComponent(url)}\",\n    loadingBuilder:\n        (context, child, loadingProgress) {\n        if (loadingProgress == null) return child;\n        return CircularProgressIndicator();\n    },\n    errorBuilder: (context, error, stackTrace) =\u003e\n        Text(\"Could not load image\"),\n)),\n```\n\nResponses are in the ~1-3 second range, depending on a number of factors. You can put an image cache like Cloudflare in front of this API to drastically improve response times after the first fetch.\n\n## What works well\n\n### URLs with premade open graph images\n* [https://thebolditalic.com/this-colorized-1940s-clip-of-downtown-san-francisco-is-jaw-dropping-adc8d163b536](https://image.letterq.org/https%3A%2F%2Fthebolditalic.com%2Fthis-colorized-1940s-clip-of-downtown-san-francisco-is-jaw-dropping-adc8d163b536)\n* [https://github.com/qcasey/fetch-image-proxy](https://image.letterq.org/https%3A%2F%2Fgithub.com%2Fqcasey%2Ffetch-image-proxy)\n\n### URLs with img tags in the html\n* [https://notes.eatonphil.com/bootloader-basics.html](https://image.letterq.org/https%3A%2F%2Fnotes.eatonphil.com%2Fbootloader-basics.html)\n* [https://msrc-blog.microsoft.com/2022/01/20/an_armful_of_cheris/](https://image.letterq.org/https%3A%2F%2Fmsrc-blog.microsoft.com%2F2022%2F01%2F20%2Fan_armful_of_cheris%2F)\n\n## What doesn't work\n\n### Pages that require javascript before loading any html\n* https://special.usps.com/testkits\n\n## API Responses\n\n* `405` when you didn't URL encode\n* `404` when there aren't any images to fetch from the URL\n* `302` redirect to the found image ","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqcasey%2Ffetch-image-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqcasey%2Ffetch-image-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqcasey%2Ffetch-image-proxy/lists"}