{"id":13395407,"url":"https://github.com/thumbor/thumbor","last_synced_at":"2026-10-18T22:22:19.836Z","repository":{"id":37270029,"uuid":"1488139","full_name":"thumbor/thumbor","owner":"thumbor","description":"thumbor is an open-source photo thumbnail service by globo.com","archived":false,"fork":false,"pushed_at":"2026-10-11T23:30:35.000Z","size":55268,"stargazers_count":10523,"open_issues_count":6,"forks_count":860,"subscribers_count":190,"default_branch":"master","last_synced_at":"2026-10-12T18:25:13.669Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"http://thumbor.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thumbor.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2011-03-16T17:30:05.000Z","updated_at":"2026-10-12T18:23:55.000Z","dependencies_parsed_at":"2026-08-27T17:29:09.634Z","dependency_job_id":null,"html_url":"https://github.com/thumbor/thumbor","commit_stats":{"total_commits":2048,"total_committers":198,"mean_commits":"10.343434343434344","dds":0.64111328125,"last_synced_commit":"9b54c904015789705577169ba61342b008b24d64"},"previous_names":["globocom/thumbor"],"tags_count":284,"template":false,"template_full_name":null,"purl":"pkg:github/thumbor/thumbor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thumbor%2Fthumbor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thumbor%2Fthumbor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thumbor%2Fthumbor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thumbor%2Fthumbor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thumbor","download_url":"https://codeload.github.com/thumbor/thumbor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thumbor%2Fthumbor/sbom","scorecard":{"id":430092,"data":{"date":"2025-08-11","repo":{"name":"github.com/thumbor/thumbor","commit":"cff37cd12dcb387b8e366090e8024fadfdf4ed41"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.4,"checks":[{"name":"Code-Review","score":6,"reason":"Found 15/25 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: docs/security.rst:1","Info: Found linked content: docs/security.rst:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: docs/security.rst:1","Info: Found text in security policy: docs/security.rst:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/build.yml:12","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/build.yml:13","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:28","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:29","Info: jobLevel 'contents' permission set to 'read': .github/workflows/lint.yml:19","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/lint.yml:20","Warn: topLevel 'checks' permission set to 'write': .github/workflows/build.yml:7","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/lint.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:12","Warn: topLevel 'packages' permission set to 'write': .github/workflows/release.yml:13","Warn: no topLevel permission defined: .github/workflows/stale.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:105: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:109: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:128: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:132: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:136: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:144: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:152: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:159: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stale.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/thumbor/thumbor/stale.yml/master?enable=pin","Warn: containerImage not pinned by hash: TestDockerfile:2","Warn: containerImage not pinned by hash: docker/Dockerfile:2","Warn: containerImage not pinned by hash: docker/Dockerfile:33","Warn: pipCommand not pinned by hash: TestDockerfile:25","Warn: pipCommand not pinned by hash: docker/Dockerfile:30-31","Warn: pipCommand not pinned by hash: docker/Dockerfile:30-31","Warn: pipCommand not pinned by hash: .github/workflows/lint.yml:45","Warn: pipCommand not pinned by hash: .github/workflows/lint.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:32","Info:   0 out of  19 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  15 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of   6 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:72"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (24) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T03:08:01.265Z","repository_id":37270029,"created_at":"2025-08-19T03:08:01.265Z","updated_at":"2025-08-19T03:08:01.265Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38342744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-18T02:00:06.448Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["hacktoberfest"],"created_at":"2024-07-30T17:01:57.187Z","updated_at":"2026-10-18T22:22:19.830Z","avatar_url":"https://github.com/thumbor.png","language":"Python","funding_links":[],"categories":["Python","Other","Image Processing","Uncategorized","资源列表","hacktoberfest","\u003ca id=\"tag-graphics\" href=\"#tag-graphics\"\u003eGraphics\u003c/a\u003e","图像处理","Project/Product","Imagery","\u003ca id=\"tag-dev\" href=\"#tag-dev\"\u003eDev\u003c/a\u003e","Third-party Web APIs","inbox","Core Thumbor Projects","Image Processing [🔝](#readme)","SDK","Awesome Python"],"sub_categories":["Uncategorized","Scientific Computing","图像处理","Snippets Manager","\u003ca id=\"tag-dev-other\" href=\"#tag-dev-other\"\u003eOther Dev projects\u003c/a\u003e","视觉处理","Image Processing","Drone Frames"],"readme":"\u003ch4 align=\"center\"\u003eJoin \u003ca href=\"https://github.com/thumbor/thumbor-bootcamp\"\u003ethumbor-bootcamp\u003c/a\u003e for a learning and contribution experience with ❤️ and 🤗 from the thumbor team\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://www.thumbor.org\"\u003e\n    \u003cimg title=\"thumbor\" alt=\"thumbor\" src=\"./docs/thumbor-logo.png\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003e\nCrop, resize, transform and much more, all on-demand and AI Powered\n\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src='https://github.com/thumbor/thumbor/workflows/build/badge.svg' /\u003e\n  \u003ca href='https://coveralls.io/github/thumbor/thumbor?branch=master' target='_blank'\u003e\n    \u003cimg src='https://coveralls.io/repos/thumbor/thumbor/badge.svg?branch=master\u0026service=github'/\u003e\n  \u003c/a\u003e\n  \u003ca href='https://codeclimate.com/github/thumbor/thumbor' target='_blank'\u003e\n    \u003cimg src='https://codeclimate.com/github/thumbor/thumbor/badges/gpa.svg'/\u003e\n  \u003c/a\u003e\n  \u003ca href='https://pypi.python.org/pypi/thumbor' target='_blank'\u003e\n    \u003cimg src='https://img.shields.io/pypi/v/thumbor.svg'/\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href='https://github.com/thumbor/thumbor/pulls' target='_blank'\u003e\n    \u003cimg src='https://img.shields.io/github/issues-pr-raw/thumbor/thumbor.svg'/\u003e\n  \u003c/a\u003e\n  \u003ca href='https://github.com/thumbor/thumbor/issues' target='_blank'\u003e\n    \u003cimg src='https://img.shields.io/github/issues-raw/thumbor/thumbor.svg'/\u003e\n  \u003c/a\u003e\n  \u003ca href='https://pypi.python.org/pypi/thumbor' target='_blank'\u003e\n    \u003cimg src='https://img.shields.io/pypi/dm/thumbor.svg'/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch4 align=\"center\"\u003ethumbor is trusted by hundreds of companies worldwide\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/wikipedia.png\" alt=\"Wikipedia trusts thumbor\" title=\"Wikipedia trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/globocom.png\" alt=\"Globo.com trusts thumbor\" title=\"Globo.com trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/vox.png\" alt=\"Vox Media trusts thumbor\" title=\"Vox Media trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/forbes-logo.png\" alt=\"Forbes trusts thumbor\" title=\"Forbes trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/squareup.png\" alt=\"Square trusts thumbor\" title=\"Square trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/deliveroo.png\" alt=\"Deliveroo trusts thumbor\" title=\"Deliveroo trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/canalplus.png\" alt=\"Canal+ trusts thumbor\" title=\"Canal+ trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/terra.png\" alt=\"Terra trusts thumbor\" title=\"Terra trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/nrc.png\" alt=\"nrc trusts thumbor\" title=\"nrc trusts thumbor\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/webdev.png\" alt=\"web.dev indicates thumbor for high-performance web sites\" title=\"web.dev indicates thumbor for high-performance web sites\" width=\"128\" height=\"128\" /\u003e\u0026nbsp;\n  \u003cimg src=\"./docs/aws.png\" alt=\"aws indicates thumbor for serverless image handling\" title=\"aws indicates thumbor for serverless image handling\" width=\"128\" height=\"128\" /\u003e\n  \u003cbr /\u003e\n  and many more!\n\u003c/p\u003e\n\nthumbor is a smart imaging service that enables on-demand [cropping, resizing, applying filters and optimizing](http://thumbor.readthedocs.io/en/latest/crop_and_resize_algorithms.html) images.\n\nCropping photos automatically can be a frustrating experience with severed heads involved. thumbor\nuses [AI for smart detection](http://thumbor.readthedocs.io/en/latest/detection_algorithms.html).\n\nthumbor is an HTTP server and you can create as many different images as you want just by varying path parameters:\n\n```\nhttp://\u003cthumbor-server\u003e/300x200/smart/thumbor.readthedocs.io/en/latest/_images/logo-thumbor.png\n```\n\nYou should see an image of the thumbor logo in 300x200.\n\nLearn more about all you can do in [thumbor's documentation](http://thumbor.readthedocs.io/en/latest/index.html \"thumbor docs\").\n\n## ⚙️ Installation\n\nDecide which installation option you want to use.\n\n### Option 1: pip\n\n```bash\n# thumbor with main dependencies only\npip install thumbor\n\n# thumbor with OpenCV dependency\npip install thumbor[opencv]\n\n# thumbor with all dependencies\npip install thumbor[all]\n```\n\n### Option 2: Binary\n\nAvailable as a package in the official repositories of\ndistributions such as\n[Debian](https://packages.debian.org/source/sid/thumbor) and\n[Ubuntu](https://launchpad.net/ubuntu/+source/thumbor).\n\n```bash\nsudo apt update\nsudo apt install thumbor\n```\n\n### Option 3: Docker\n\nAn official Docker image is available on GitHub Container Registry:\n\n```bash\ndocker run -p 8888:8888 ghcr.io/thumbor/thumbor:latest\n```\n\nFor more information about the Docker image and available tags, visit the [GitHub Container Registry](https://github.com/thumbor/thumbor/pkgs/container/thumbor).\n\nFor more ways, please check out [Installation](https://thumbor.readthedocs.io/en/latest/installing.html).\n\n## Development\n\nSync the development environment, install the pre-commit hooks, and run the\ntest suite:\n\n```bash\nmake setup\nmake pre-commit  # only needed once per clone\nmake compile_ext\nmake test\n```\n\n`make setup` uses an existing [uv](https://docs.astral.sh/uv/) installation\nor installs the pinned version into `.uv-venv` when uv is not available.\nThe development environment is stored in `.venv`. Use `make run` to start\nthumbor from this environment.\n\nThe lockfile is managed with `uv lock` and should be committed when\ndependencies change.\n\n### Run\n\nRunning an installed copy is as easy as:\n\n```bash\nthumbor\n```\n\nFrom a development checkout, use `make run` instead.\n\nAfter this, you can reach it on http://localhost:8888/unsafe/https://raw.githubusercontent.com/thumbor/thumbor/master/example.jpg\n\n### Troubles?\n\nIf you experience any troubles, try running:\n\n```bash\nthumbor-doctor\n```\n\nFrom a development checkout, run the same commands through\n`uv run --locked thumbor-doctor`.\n\nIf you have a `thumbor.conf` file, you can use that to help thumbor-doctor:\n\n```bash\nthumbor-doctor -c thumbor.conf\n```\n\nIf you still need help, please [raise an issue](https://github.com/thumbor/thumbor/issues). Remember to send your `thumbor-doctor` output in the issue:\n\n```bash\nthumbor-doctor --nocolor -c thumbor.conf\n```\n\n## 🎯 Features\n\n- supports all common images formats out of the box\n- [intelligent cropping and resizing](http://thumbor.readthedocs.io/en/latest/detection_algorithms.html)\n- blazing fast using caching\n- supports many storages (local storage, AWS S3, Rackspace, Ceph, ...)\n- AI-powered cropping based on face and feature detection (glasses, interesting points, ...)\n- integrated with many programming languages and frameworks \u003cimg src=\"https://www.python.org/favicon.ico\" width=\"16\" height=\"16\" /\u003e\u003cimg src=\"https://nodejs.org/static/images/favicons/favicon.png\" width=\"16\" height=\"16\" /\u003e\u003cimg src=\"https://rubygems.org/favicon.ico\" width=\"16\" height=\"16\" /\u003e and many more...\n- [highly extensible](https://thumbor.readthedocs.io/en/latest/customizing.html)\n\n## 🌟 Awesome Goodies\n\n[awesome-thumbor](https://github.com/thumbor/awesome-thumbor) is a curated list of all things thumbor. There you can find filters, storages, engines, loaders, docker images, extensions in your favorite language and framework, and much more.\n\nAll of it with a clear indication of each project's quality. Have fun!\n\n## 👍 Contribute\n\nthumbor is an open-source project with many contributors. Join them\n[contributing code](https://github.com/thumbor/thumbor/blob/master/CONTRIBUTING.md) or\n[contributing documentation](https://github.com/thumbor/thumbor/blob/master/CONTRIBUTING.md).\n\nIf you use thumbor, please take 1 minute and answer [this survey](http://t.co/qPBLXJX0mi)? Only 2 questions!\n\nJoin the chat at https://gitter.im/thumbor/thumbor\n\n## 👀 Demo\n\nYou can see thumbor in action at http://thumborize.me/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthumbor%2Fthumbor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthumbor%2Fthumbor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthumbor%2Fthumbor/lists"}