(Powered by Cloudinary & Google Cloud Run)
Tired of juggling media files across different platforms? Need a simple, authenticated way to upload photos and videos straight to the cloud with cool transformations on the fly?
Meet the Cloud Vision Manager! 🎉
The application logic is Python and uses Flask. The first version is designed to run smoothly on Google Cloud Run, provides a lightweight file manager interface powered by the magic of Cloudinary. Log in securely via OAuth 2.0 with your Google Account and start managing your media assets with ease!
- Secure Google Sign-In: Access the manager only after authenticating with your Google Account. No complex user management needed!
- Cloudinary Uploads: Directly upload images and videos to your Cloudinary account.
- On-the-Fly Transformations: Apply basic Cloudinary transformations (resize, crop, effects) right when you upload.
- Lightweight File Management: View your uploaded Cloudinary assets directly within the app.
- Easy Viewing & Deletion: Access original files, see generated thumbnails, view applied transformations, and delete assets you no longer need.
- Cloud Run Ready: Built with a Dockerfile specifically for easy deployment on Google Cloud Run.
- Datastore Metadata: Keeps track of your uploads and associates them with your user account using Google Cloud Datastore.
- Simple Web UI: Built with Flask for a clean and straightforward user experience.
- Google Identity Services: Uses the modern GIS library for secure authentication.
- Direct Cloudinary Interaction: Leverages the official Cloudinary Python library.
- Serverless Friendly: Designed for the scale-to-zero, stateless nature of Cloud Run.
- Configurable: Uses environment variables and Google Secret Manager for secure configuration.
Ready to launch your own Cloud Vision Manager? Here's the high-level view:
Prerequisites:
- Google Cloud Project: You'll need a GCP project with billing enabled.
- APIs Enabled: Ensure Cloud Run API, Cloud Build API, Artifact Registry API, Datastore API, Secret Manager API, and IAM API are enabled.
- Cloudinary Account: Sign up at Cloudinary.com and note your Cloud Name, API Key, and API Secret.
- Google OAuth 2.0 Client ID: Create credentials in GCP (APIs & Services -> Credentials) for a "Web application".
- Secrets: Store your Cloudinary API Secret and a strong Flask Secret Key in Google Secret Manager.
gcloudCLI installed and configured.- Git and Docker installed locally (for building).
Quick Deployment Steps:
- Clone the Repository:
git clone https://github.com/calivision/cloudinary.git - Create Datastore Index: Create the required composite index for
CloudinaryAsset(seeindex.yamlor documentation). Deploy it:gcloud datastore indexes create index.yaml --project=YOUR_PROJECT_IDand wait for it to become "Serving". - Configure Secrets: Create
CLOUDINARY_API_SECRETandflask-secret-keyin Secret Manager. - Build the Container:
gcloud builds submit --tag REGION-docker.pkg.dev/YOUR_PROJECT_ID/YOUR_REPO/cloudinary-manager --project=YOUR_PROJECT_ID - Deploy to Cloud Run: Use the
gcloud run deploycommand, setting environment variables (CLOUDINARY_CLOUD_NAME,CLOUDINARY_API_KEY,GOOGLE_CLIENT_ID) and configuring secret access (--set-secrets=...). Assign a Service Account withDatastore UserandSecret Manager Secret Accessorroles.# Example (replace placeholders and add other flags) gcloud run deploy YOUR_SERVICE_NAME \ --image REGION-docker.pkg.dev/YOUR_PROJECT_ID/YOUR_REPO/cloudinary-manager:latest \ --set-env-vars="GOOGLE_CLIENT_ID=YOUR_CLIENT_ID..." \ --set-secrets="FLASK_SECRET_KEY=flask-secret-key:latest" \ # ... other vars and secrets ... --service-account=YOUR_RUNTIME_SA@... \ --allow-unauthenticated \ --project=YOUR_PROJECT_ID --region=YOUR_REGION
- Configure OAuth Origins: Add the deployed Cloud Run Service URL to the "Authorized JavaScript origins" in your Google OAuth Client ID settings.
- (If Needed) Configure Public Access/IAP: If blocked by Org Policies, configure IAP or adjust policies to allow access.
➡️ Detailed Deployment Guide with Step-By-Step Instructions Will Be Posted ASAP
We're just getting started! We envision Cloud Vision Manager becoming even more useful with:
- 📱 Native Mobile Apps (Android & iOS): Securely manage credentials and access the uploader on the go!
- 🖼️ More Advanced Transformations: Integrate more of Cloudinary's powerful features.
- 📂 Folder Management: Basic folder creation/navigation within the UI.
- 🏷️ Tagging & Metadata Editing: Manage tags and metadata directly.
The Delete button throws an error, described in this known issue.
Pictures may be deleted using the Cloudinary platform after upload.
Want to help bring this vision to life? Contributions are welcome! Whether it's fixing bugs, improving the UI, adding features, or tackling the mobile apps, we'd love your input.
- Check out the Contribution Guidelines.
- Browse the Open Issues.
- Feel free to suggest new ideas!
This project is licensed under the MIT License - see the LICENSE file for details, including the use of Generative AI to create this application.
Manage media simply and securely in the cloud! 🚀

