{"id":44740441,"url":"https://github.com/simplicityguy/apollonia","last_synced_at":"2026-02-15T20:35:43.014Z","repository":{"id":177905450,"uuid":"658402927","full_name":"SimplicityGuy/apollonia","owner":"SimplicityGuy","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-30T19:08:35.000Z","size":1719,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T16:39:23.881Z","etag":null,"topics":["amqp","catalog","catalogue","docker","docker-image","machine-learning","music","neo4j","postgresql","python3","video"],"latest_commit_sha":null,"homepage":"","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/SimplicityGuy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"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":null,"dco":null,"cla":null},"funding":{"github":["SimplicityGuy"],"ko_fi":"robertwlodarczyk","custom":["paypal.me/RWlodarczyk"]}},"created_at":"2023-06-25T16:30:41.000Z","updated_at":"2025-12-30T19:08:38.000Z","dependencies_parsed_at":"2025-08-26T21:16:31.762Z","dependency_job_id":"7cf4a261-bf84-476d-9eb9-33fae95ea3b2","html_url":"https://github.com/SimplicityGuy/apollonia","commit_stats":{"total_commits":5,"total_committers":1,"mean_commits":5.0,"dds":0.0,"last_synced_commit":"ffc5203200f1bda2a92c5ee6818738fcdd06c878"},"previous_names":["simplicityguy/apollonia"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SimplicityGuy/apollonia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimplicityGuy%2Fapollonia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimplicityGuy%2Fapollonia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimplicityGuy%2Fapollonia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimplicityGuy%2Fapollonia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SimplicityGuy","download_url":"https://codeload.github.com/SimplicityGuy/apollonia/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimplicityGuy%2Fapollonia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29488705,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["amqp","catalog","catalogue","docker","docker-image","machine-learning","music","neo4j","postgresql","python3","video"],"created_at":"2026-02-15T20:35:42.134Z","updated_at":"2026-02-15T20:35:43.006Z","avatar_url":"https://github.com/SimplicityGuy.png","language":"Python","funding_links":["https://github.com/sponsors/SimplicityGuy","https://ko-fi.com/robertwlodarczyk","paypal.me/RWlodarczyk"],"categories":[],"sub_categories":[],"readme":"# Apollonia - Intelligent Media Catalog System\n\n## 🚀 CI/CD Status\n\n[![CI/CD Pipeline](https://github.com/SimplicityGuy/apollonia/actions/workflows/ci.yml/badge.svg)](https://github.com/SimplicityGuy/apollonia/actions/workflows/ci.yml)\n[![Performance Benchmarks](https://github.com/SimplicityGuy/apollonia/actions/workflows/benchmarks.yml/badge.svg)](https://github.com/SimplicityGuy/apollonia/actions/workflows/benchmarks.yml)\n[![Dependencies](https://github.com/SimplicityGuy/apollonia/actions/workflows/dependencies.yml/badge.svg)](https://github.com/SimplicityGuy/apollonia/actions/workflows/dependencies.yml)\n\n## 📦 Project Info\n\n![License: MIT](https://img.shields.io/github/license/SimplicityGuy/apollonia)\n[![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/)\n[![Node.js 22+](https://img.shields.io/badge/node.js-22+-green.svg)](https://nodejs.org/)\n[![Docker](https://img.shields.io/badge/docker-enabled-blue.svg?logo=docker)](https://www.docker.com/)\n\n## 🛠️ Code Quality\n\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![mypy](https://img.shields.io/badge/mypy-enabled-blue.svg)](http://mypy-lang.org/)\n[![Code style: black](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)\n[![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)\n\n## 🧪 Testing \u0026 Security\n\n[![pytest](https://img.shields.io/badge/pytest-enabled-blue.svg?logo=pytest)](https://docs.pytest.org/)\n[![Vitest](https://img.shields.io/badge/vitest-enabled-green.svg?logo=vitest)](https://vitest.dev/)\n[![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://bandit.readthedocs.io/)\n[![Dependencies: pip-audit](https://img.shields.io/badge/dependencies-pip--audit-blue.svg)](https://pypi.org/project/pip-audit/)\n[![Containers: Trivy](https://img.shields.io/badge/containers-trivy-blue.svg)](https://trivy.dev/)\n\n## 📊 Project Metrics\n\n[![GitHub issues](https://img.shields.io/github/issues/SimplicityGuy/apollonia)](https://github.com/SimplicityGuy/apollonia/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/SimplicityGuy/apollonia)](https://github.com/SimplicityGuy/apollonia/pulls)\n[![GitHub last commit](https://img.shields.io/github/last-commit/SimplicityGuy/apollonia)](https://github.com/SimplicityGuy/apollonia/commits/main)\n[![GitHub repo size](https://img.shields.io/github/repo-size/SimplicityGuy/apollonia)](https://github.com/SimplicityGuy/apollonia)\n[![codecov](https://codecov.io/gh/SimplicityGuy/apollonia/branch/main/graph/badge.svg)](https://codecov.io/gh/SimplicityGuy/apollonia)\n\nPronunciation: _a·pol·lon·ia_\n\n## Overview\n\nApollonia is a comprehensive media catalog system that automatically detects, classifies, and\nanalyzes audio and video files using machine learning. Built with a modern microservices\narchitecture, it provides real-time processing, advanced analytics, and a responsive web interface\nfor managing large media collections.\n\n## Key Features\n\n- **Automatic Media Detection**: Monitors directories and automatically processes new media files\n- **ML-Powered Analysis**: Uses TensorFlow and Essentia for audio/video feature extraction\n- **Real-time Processing**: Event-driven architecture with AMQP message queuing\n- **Comprehensive API**: RESTful and GraphQL APIs with JWT authentication\n- **Modern Web Interface**: React-based UI with real-time updates and analytics\n- **Scalable Architecture**: Microservices design with Docker containerization\n- **Multi-format Support**: Handles various audio (MP3, WAV, FLAC) and video (MP4, AVI, MOV) formats\n\n## 🛠️ Technologies \u0026 Tools\n\n### Core Technologies\n\n- **Backend**: [Python 3.12](https://www.python.org/) | [FastAPI](https://fastapi.tiangolo.com/) |\n  [Strawberry GraphQL](https://strawberry.rocks/)\n- **Frontend**: [React 18](https://react.dev/) | [TypeScript](https://www.typescriptlang.org/) |\n  [Vite](https://vitejs.dev/) | [Tailwind CSS](https://tailwindcss.com/)\n- **Machine Learning**: [TensorFlow](https://www.tensorflow.org/) |\n  [Essentia](https://essentia.upf.edu/) | [Librosa](https://librosa.org/)\n- **Databases**: [PostgreSQL](https://www.postgresql.org/) | [Neo4j](https://neo4j.com/) |\n  [Redis](https://redis.io/)\n- **Message Queue**: [RabbitMQ](https://www.rabbitmq.com/) |\n  [aio-pika](https://aio-pika.readthedocs.io/)\n\n### Development Tools\n\n- **Package Management**: [uv](https://github.com/astral-sh/uv) | [npm](https://www.npmjs.com/)\n- **Task Runner**: [Just](https://just.systems/) | [Taskipy](https://github.com/illBeRoy/taskipy)\n- **Code Quality**: [Ruff](https://docs.astral.sh/ruff/) | [mypy](http://mypy-lang.org/) |\n  [ESLint](https://eslint.org/) | [Prettier](https://prettier.io/)\n- **Testing**: [pytest](https://docs.pytest.org/) | [Vitest](https://vitest.dev/) |\n  [Testing Library](https://testing-library.com/)\n- **Git Hooks**: [pre-commit](https://pre-commit.com/)\n\n### Infrastructure \u0026 DevOps\n\n- **Containerization**: [Docker](https://www.docker.com/) |\n  [Docker Compose](https://docs.docker.com/compose/)\n- **CI/CD**: [GitHub Actions](https://github.com/features/actions)\n- **Container Registry**:\n  [GitHub Container Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry)\n- **Monitoring**: [Prometheus](https://prometheus.io/) | [Grafana](https://grafana.com/) |\n  [Jaeger](https://www.jaegertracing.io/)\n\n### Frontend Libraries\n\n- **UI Components**: [Radix UI](https://www.radix-ui.com/) | [Headless UI](https://headlessui.com/)\n  | [Heroicons](https://heroicons.com/)\n- **State Management**: [Zustand](https://github.com/pmndrs/zustand) |\n  [TanStack Query](https://tanstack.com/query/)\n- **Data Visualization**: [Recharts](https://recharts.org/) |\n  [Framer Motion](https://www.framer.com/motion/)\n- **Forms**: [React Hook Form](https://react-hook-form.com/) | [Zod](https://zod.dev/)\n\n### Media Processing\n\n- **Audio Analysis**: [xxhash](https://github.com/Cyan4973/xxHash) | [NumPy](https://numpy.org/) |\n  [MoviePy](https://zulko.github.io/moviepy/)\n- **File Monitoring**: [watchdog](https://github.com/gorakhargosh/watchdog)\n- **Data Serialization**: [orjson](https://github.com/ijl/orjson)\n\n## Architecture\n\nThe system consists of several specialized services:\n\n- **[Media Ingestor](docs/services/ingestor.md)**: Monitors directories and detects media files\n- **[ML Analyzer](docs/services/analyzer.md)**: Extracts features using TensorFlow/Essentia models\n- **[Database Populator](docs/services/populator.md)**: Stores metadata in PostgreSQL and Neo4j\n- **[API Service](docs/services/api.md)**: Provides REST and GraphQL endpoints\n- **[Frontend](frontend/README.md)**: React-based web application\n\n## Requirements\n\n- Python 3.12 (for TensorFlow/Essentia compatibility)\n- Docker and Docker Compose for containerized deployment\n- PostgreSQL for primary data storage\n- RabbitMQ for message queuing\n- Redis for caching\n- Neo4j for graph relationships (optional)\n- Node.js 22+ for frontend development\n\n## Quick Start\n\n### Prerequisites\n\n- Docker and Docker Compose (v2.0+)\n- Git\n- 8GB RAM minimum (16GB recommended for ML features)\n- 20GB free disk space\n\n### Installation\n\n1. **Clone the repository**:\n\n   ```bash\n   git clone https://github.com/SimplicityGuy/apollonia.git\n   cd apollonia\n   ```\n\n1. **Start the services**:\n\n   ```bash\n   docker-compose up -d\n   ```\n\n   This will start:\n\n   - PostgreSQL database\n   - RabbitMQ message broker\n   - Redis cache\n   - Neo4j graph database\n   - All microservices\n   - Frontend web application\n\n1. **Monitor the logs**:\n\n   ```bash\n   docker-compose logs -f\n   ```\n\n1. **Access the web interface**:\n\n   Open http://localhost:3000 in your browser\n\n   Default credentials:\n\n   - Username: `admin`\n   - Password: `admin123`\n\n1. **Add media files**:\n\n   ```bash\n   # Copy files to monitored directories\n   cp your-music/* ./data/music/\n   cp your-videos/* ./data/videos/\n\n   # Or use the web interface upload feature\n   ```\n\n   The system will automatically:\n\n   - Detect new files\n   - Extract metadata\n   - Analyze content using ML models\n   - Index for searching\n   - Generate thumbnails and previews\n\n## Development\n\nFor detailed development instructions, see the\n[Development Guide](docs/development/development-guide.md).\n\n### Quick Development Setup\n\nThe project uses [Just](https://just.systems/) as a command runner for all development tasks.\n\n```bash\n# Install Just (if not already installed)\ncargo install just\n\n# Or on macOS\nbrew install just\n\n# Set up development environment\njust install\n\n# Start all services\njust up\n\n# Run tests\njust test\n\n# Run quality checks\njust check\n\n# See all available commands\njust --list\n```\n\n### Alternative Setup (without Just)\n\n```bash\n# Install uv package manager\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Install dependencies\nuv sync --all-extras\n\n# Install pre-commit hooks\nuv run task install-hooks\n\n# Run quality checks\nuv run task check\n```\n\n### Development Tools Overview\n\n- **🚀 Package Manager**: [uv](https://github.com/astral-sh/uv) - Ultra-fast Python package installer\n  and resolver\n- **🎯 Task Runner**: [Just](https://just.systems/) - Command runner for development workflows\n- **🧹 Code Formatter**: [Ruff](https://docs.astral.sh/ruff/) - Extremely fast Python linter and\n  formatter\n- **🔍 Type Checker**: [mypy](http://mypy-lang.org/) - Static type checker for Python\n- **🧪 Testing**: [pytest](https://docs.pytest.org/) for Python | [Vitest](https://vitest.dev/) for\n  Frontend\n- **🛡️ Security**: [Bandit](https://bandit.readthedocs.io/) |\n  [pip-audit](https://pypi.org/project/pip-audit/) | [Trivy](https://trivy.dev/)\n- **🪝 Git Hooks**: [pre-commit](https://pre-commit.com/) - Multi-language pre-commit framework\n- **📦 Containerization**: [Docker](https://www.docker.com/) with multi-stage builds and health\n  checks\n\n## Documentation\n\n- **Getting Started**\n\n  - [Quick Start Guide](docs/getting-started.md) - Initial setup and usage\n  - [Architecture Overview](docs/architecture/overview.md) - System design and components\n  - [API Documentation](docs/api/api-reference.md) - REST and GraphQL reference\n\n- **Development**\n\n  - [Development Guide](docs/development/development-guide.md) - Setup and workflow instructions\n  - [Python Version Notes](docs/development/python-version-notes.md) - Python version strategy\n  - [Frontend Development](frontend/README.md) - React application guide\n  - [Testing Guide](docs/development/testing.md) - Unit, integration, and E2E tests\n\n- **Services**\n\n  - [Media Ingestor](docs/services/ingestor.md) - File monitoring service\n  - [ML Analyzer](docs/services/analyzer.md) - Machine learning analysis\n  - [Database Populator](docs/services/populator.md) - Data persistence service\n  - [API Service](docs/services/api.md) - REST and GraphQL endpoints\n\n- **Operations**\n\n  - [Docker Deployment](docs/operations/docker-deployment.md) - Container deployment guide\n  - [Configuration](docs/operations/configuration.md) - Environment variables and settings\n  - [Performance Tuning](docs/operations/performance.md) - Optimization guide\n  - [Monitoring](docs/operations/monitoring.md) - Metrics and observability\n\n- **CI/CD**\n\n  - [GitHub Workflows](docs/development/github-workflows.md) - CI/CD pipeline documentation\n  - [Composite Actions](docs/development/composite-actions.md) - Reusable workflow components\n  - [Emoji Logging Convention](docs/development/logging-convention.md) - Standardized logging with\n    emojis\n  - [Justfile Commands](docs/development/justfile-guide.md) - Development task runner reference\n\n- **Contributing**\n\n  - [Contributing Guide](CONTRIBUTING.md) - How to contribute\n  - [Claude Code Guide](CLAUDE.md) - Instructions for AI-assisted development\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Author\n\nRobert Wlodarczyk - [robert@simplicityguy.com](mailto:robert@simplicityguy.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplicityguy%2Fapollonia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimplicityguy%2Fapollonia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplicityguy%2Fapollonia/lists"}