{"id":30737447,"url":"https://github.com/jeffasante/photo-mood","last_synced_at":"2026-02-12T06:11:06.434Z","repository":{"id":312931281,"uuid":"1049348366","full_name":"jeffasante/photo-mood","owner":"jeffasante","description":"Photo Mood is a computer vision–powered application that analyzes uploaded images to detect emotional essence, generate mood-based tags, and create optimized thumbnails, all running on a distributed microservices backend.","archived":false,"fork":false,"pushed_at":"2025-09-02T21:29:39.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-02T23:09:57.312Z","etag":null,"topics":["llm","microservices"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeffasante.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-09-02T21:02:06.000Z","updated_at":"2025-09-02T21:32:56.000Z","dependencies_parsed_at":"2025-09-02T23:20:22.826Z","dependency_job_id":null,"html_url":"https://github.com/jeffasante/photo-mood","commit_stats":null,"previous_names":["jeffasante/photo-mood"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jeffasante/photo-mood","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeffasante%2Fphoto-mood","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeffasante%2Fphoto-mood/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeffasante%2Fphoto-mood/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeffasante%2Fphoto-mood/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeffasante","download_url":"https://codeload.github.com/jeffasante/photo-mood/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeffasante%2Fphoto-mood/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29360467,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T01:03:07.613Z","status":"online","status_checked_at":"2026-02-12T02:00:06.911Z","response_time":55,"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":["llm","microservices"],"created_at":"2025-09-03T21:15:55.350Z","updated_at":"2026-02-12T06:11:06.422Z","avatar_url":"https://github.com/jeffasante.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Photo Mood\n\nAI-powered image analysis application that extracts mood tags and generates thumbnails using microservices architecture.\n\n## Overview\n\nPhoto Mood analyzes uploaded images to determine their emotional essence through computer vision. The application generates mood-based tags from image content and creates optimized thumbnails, all powered by a distributed microservices backend.\n\n## Architecture\n\nThe application consists of three independent microservices:\n\n- **Gateway Service** (Node.js + Express) - API orchestration and frontend serving\n- **Mood Tagger Service** (Python + FastAPI) - AI-powered mood analysis using SmolVLM-256M\n- **Thumbnail Service** (Go + Gin) - High-performance image resizing\n\n## Features\n\n- Drag and drop image upload interface\n- AI-powered mood tag extraction from image content\n- Automatic thumbnail generation (200px width, optimized)\n- Real-time image analysis with visual feedback\n- Responsive web interface with clean design\n- Microservices architecture for scalability\n\n## Technology Stack\n\n### Frontend\n- Vanilla JavaScript\n- CSS3 with Manrope typography\n- HTML5 drag-and-drop API\n\n### Backend Services\n- **Gateway**: Node.js, Express, Multer, Axios\n- **AI Analysis**: Python, FastAPI, SmolVLM-256M-Instruct, Transformers\n- **Image Processing**: Go, Gin framework, Imaging library\n\n### Infrastructure\n- Docker \u0026 Docker Compose\n- GitHub Actions CI/CD\n- Container orchestration with custom networking\n\n## Quick Start\n\n### Prerequisites\n- Docker Desktop installed\n- Git installed\n- 8GB+ RAM recommended (for AI model)\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/jeffasante/photo-mood\ncd photo-mood\n```\n\n2. Start all services:\n```bash\ndocker-compose up --build\n```\n\n3. Open your browser to:\n```\nhttp://localhost:8080\n```\n\nThe application will automatically download the AI model on first run (approximately 513MB).\n\n## Development\n\n### Running Individual Services\n\nFor development, you can run services independently:\n\n#### Gateway Service\n```bash\ncd gateway\nnpm install\nnpm start\n# Runs on http://localhost:3000\n```\n\n#### Mood Tagger Service\n```bash\ncd mood-tagger\npip install -r requirements.txt\nuvicorn main:app --host 0.0.0.0 --port 5001\n# Runs on http://localhost:5001\n```\n\n#### Thumbnail Service\n```bash\ncd thumb-svc\ngo mod tidy\ngo run main.go\n# Runs on http://localhost:5002\n```\n\n## API Endpoints\n\n### Gateway Service (Port 8080)\n- `GET /` - Frontend interface\n- `POST /analyze` - Image analysis endpoint\n- `GET /health` - Service health check\n\n### Mood Tagger Service (Port 5001)\n- `POST /tags` - Generate mood tags from image\n- `GET /health` - Service health check\n\n### Thumbnail Service (Port 5002)\n- `POST /resize` - Generate thumbnail from image\n- `GET /health` - Service health check\n\n## Configuration\n\n### Environment Variables\n\nThe gateway service accepts these environment variables:\n\n```bash\nMOOD_TAGGER_URL=http://mood-tagger:5001\nTHUMB_SVC_URL=http://thumb-svc:5002\n```\n\n### File Limitations\n\n- Maximum file size: 10MB\n- Supported formats: JPG, PNG, GIF\n- Processing time: 5-15 seconds (CPU-based AI inference)\n\n## Performance Notes\n\n- AI model runs on CPU for broader compatibility\n- First-time model loading takes approximately 30 seconds\n- Subsequent requests process in 5-15 seconds\n- Thumbnail generation is near-instantaneous (sub-second)\n\n## Deployment\n\n### Local Development\n```bash\ndocker-compose up --build\n```\n\n### Production Deployment\n1. Update environment variables in docker-compose.yml\n2. Configure reverse proxy (nginx recommended)\n3. Set up SSL certificates\n4. Scale services as needed:\n```bash\ndocker-compose up --scale mood-tagger=3 --scale thumb-svc=2\n```\n\n## CI/CD Pipeline\n\nThe project includes GitHub Actions workflow for:\n- Automated testing\n- Docker image building\n- Container registry publishing\n- Security scanning with Trivy\n\n\n## Credits\n\nBuilt by Jeff Asante  \nPortfolio: https://jeffasante.github.io/\n\nPowered by microservices architecture with modern AI and cloud-native technologies.# Test CI/CD\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeffasante%2Fphoto-mood","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeffasante%2Fphoto-mood","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeffasante%2Fphoto-mood/lists"}