{"id":46681190,"url":"https://github.com/openinary/openinary","last_synced_at":"2026-03-09T00:10:59.316Z","repository":{"id":307378647,"uuid":"1028918475","full_name":"openinary/openinary","owner":"openinary","description":"The self-hostable alternative to Cloudinary","archived":false,"fork":false,"pushed_at":"2026-03-03T14:00:21.000Z","size":25526,"stargazers_count":224,"open_issues_count":3,"forks_count":23,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-03T17:48:09.415Z","etag":null,"topics":["cloudflare-r2","cloudinary","cloudinary-alternative","developer-tools","docker","image-processing","media-processing","media-server","media-transformations","open-source","optimization","performance","rest-api","s3-compatible","self-hosted","typescript","url-transformations","video-processing"],"latest_commit_sha":null,"homepage":"https://openinary.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openinary.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-30T08:53:53.000Z","updated_at":"2026-03-03T14:00:39.000Z","dependencies_parsed_at":"2025-07-31T00:59:14.820Z","dependency_job_id":null,"html_url":"https://github.com/openinary/openinary","commit_stats":null,"previous_names":["openinary/media-api","openinary/openinary"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/openinary/openinary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openinary%2Fopeninary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openinary%2Fopeninary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openinary%2Fopeninary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openinary%2Fopeninary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openinary","download_url":"https://codeload.github.com/openinary/openinary/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openinary%2Fopeninary/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30278153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T20:45:49.896Z","status":"ssl_error","status_checked_at":"2026-03-08T20:45:49.525Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cloudflare-r2","cloudinary","cloudinary-alternative","developer-tools","docker","image-processing","media-processing","media-server","media-transformations","open-source","optimization","performance","rest-api","s3-compatible","self-hosted","typescript","url-transformations","video-processing"],"created_at":"2026-03-09T00:10:58.500Z","updated_at":"2026-03-09T00:10:59.305Z","avatar_url":"https://github.com/openinary.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://openinary.dev\" target=\"_blank\" rel=\"noopener\"\u003e\n        \u003cimg src=\"https://i.imgur.com/P5Qfm65.png\" alt=\"Openinary - self-hosted media processing platform\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/openinary/openinary/actions/workflows/basebuild.yml\" target=\"_blank\" rel=\"noopener\"\u003e\u003cimg src=\"https://github.com/openinary/openinary/actions/workflows/basebuild.yml/badge.svg\" alt=\"build\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://hub.docker.com/r/openinary/openinary\" target=\"_blank\" rel=\"noopener\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/openinary/openinary.svg\" alt=\"Docker pulls\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/openinary/openinary/blob/main/LICENSE\" target=\"_blank\" rel=\"noopener\"\u003e\u003cimg src=\"https://img.shields.io/github/license/openinary/openinary.svg\" alt=\"license\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n[Openinary](https://github.com/openinary/openinary) is an open-source, self-hosted media processing platform that includes:\n\n- on-the-fly transformations for images and videos via URL\n- built-in S3-compatible storage with automatic caching\n- smart optimization with WebP, AVIF, and modern codecs\n- simple REST API with URL-based transformations\n- convenient admin dashboard for asset management\n\n**For documentation and more examples, please visit https://docs.openinary.dev.**\n\n\u003e [!WARNING]\n\u003e Please keep in mind that Openinary is still under active development\n\u003e and therefore full backward compatibility is not guaranteed before reaching v1.0.0.\n\n## Quick Start\n\n\u003cp align=\"left\"\u003e\n    \u003ca href=\"https://railway.com/deploy/cCsRBb?referralCode=imHr5N\u0026utm_medium=integration\u0026utm_source=template\u0026utm_campaign=generic\" target=\"_blank\" rel=\"noopener\" style=\"display: inline-block;\"\u003e\u003cimg src=\"https://www.openinary.dev/deploy/railway.svg\" alt=\"Deploy with Railway\" style=\"display: block;\" /\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u003ca href=\"https://docs.openinary.dev/guides/coolify-deployment\" target=\"_blank\" rel=\"noopener\" style=\"display: inline-block;\"\u003e\u003cimg src=\"https://www.openinary.dev/deploy/coolify.svg\" alt=\"Deploy with Coolify\" style=\"display: block;\" /\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u003ca href=\"https://docs.openinary.dev/guides/dokploy-deployment\" target=\"_blank\" rel=\"noopener\" style=\"display: inline-block;\"\u003e\u003cimg src=\"https://www.openinary.dev/deploy/dokploy.svg\" alt=\"Deploy with Dokploy\" style=\"display: block;\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### Installation\n\nMake sure to have Docker 20.x+ installed and running.\n\n```bash\ndocker run --platform linux/amd64 -d -p 3000:3000 \\\n  -v openinary-cache:/app/apps/api/cache \\\n  -v openinary-public:/app/apps/api/public \\\n  -v openinary-db:/app/data \\\n  openinary/openinary:latest\n```\n\n### Initial Setup\n\n1. Open http://localhost:3000\n2. Visit `/setup` to create admin account\n3. Click on your profile in the bottom left navigation, then go to 'API Keys' to generate your first API key\n\n## Usage Examples\n\n### Images\n\n```bash\n# Simple resize\nGET /t/w_800,h_600/image.jpg\n\n# Smart cropping with face detection\nGET /t/w_400,h_400,c_fill,g_face/portrait.jpg\n\n# Format conversion + optimization\nGET /t/w_1200,h_800,f_avif,q_80/photo.jpg\n\n# Aspect ratio with automatic detection\nGET /t/ar_16:9,g_auto,w_1920,h_1080/banner.jpg\n```\n\n### Videos\n\n```bash\n# Thumbnail with resize\nGET /t/w_800,h_450,so_5,f_avif/video.mp4\n\n# Web optimized compression\nGET /t/w_1280,h_720,q_75/video.mp4\n\n# Extract a clip (from 10s to 30s)\nGET /t/so_10,eo_30/interview.mp4\n\n# Lightweight preview (low quality, small size)\nGET /t/w_480,h_270,q_50/demo.mp4\n\n# Format conversion with resize\nGET /t/w_1920,h_1080,f_mp4/video.mov\n```\n\n## S3-Compatible Configuration\n\nOpeninary supports any S3-compatible storage. Configure via environment variables in `apps/api/.env`:\n\n### AWS S3\n\n```bash\nSTORAGE_REGION=us-east-1\nSTORAGE_ACCESS_KEY_ID=your_aws_access_key\nSTORAGE_SECRET_ACCESS_KEY=your_aws_secret_key\nSTORAGE_BUCKET_NAME=your-bucket-name\nSTORAGE_PUBLIC_URL=https://your-bucket-name.s3.us-east-1.amazonaws.com\n```\n\n### Cloudflare R2\n\n```bash\nSTORAGE_REGION=auto\nSTORAGE_ACCESS_KEY_ID=your_r2_access_key\nSTORAGE_SECRET_ACCESS_KEY=your_r2_secret_key\nSTORAGE_BUCKET_NAME=your-bucket-name\nSTORAGE_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com\nSTORAGE_PUBLIC_URL=https://your-custom-domain.com\n```\n\n### Other S3-Compatible Providers\n\n```bash\nSTORAGE_REGION=us-east-1\nSTORAGE_ACCESS_KEY_ID=your_access_key\nSTORAGE_SECRET_ACCESS_KEY=your_secret_key\nSTORAGE_BUCKET_NAME=your-bucket-name\nSTORAGE_ENDPOINT=https://your-s3-compatible-endpoint.com\nSTORAGE_PUBLIC_URL=https://your-cdn-domain.com\n```\n\n## Resources\n\n[Full Documentation](https://docs.openinary.dev) | [Issues](https://github.com/openinary/openinary/issues) | [Contact](https://x.com/initflorian)\n\n## License\nThis project is licensed under the  AGPL-3.0 License - see the [LICENSE](LICENSE) file for details.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopeninary%2Fopeninary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopeninary%2Fopeninary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopeninary%2Fopeninary/lists"}