{"id":40519010,"url":"https://github.com/rwellinger/aiproxy","last_synced_at":"2026-01-20T21:01:45.805Z","repository":{"id":317684380,"uuid":"1035834038","full_name":"rwellinger/aiproxy","owner":"rwellinger","description":"thWelly AI Toolbox","archived":false,"fork":false,"pushed_at":"2026-01-18T14:24:49.000Z","size":72952,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T21:15:50.037Z","etag":null,"topics":["ai","ai-chat","angular","apple-silicon","colima","complete-solutions","docker","docker-compose","graphic-generator","graphics","macos","mureka","ollama","ollama-api","openai","phython3","song-generation","song-lyrics"],"latest_commit_sha":null,"homepage":"https://www.thwelly.ch","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rwellinger.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-08-11T06:53:15.000Z","updated_at":"2026-01-18T14:24:53.000Z","dependencies_parsed_at":"2025-10-02T12:38:51.188Z","dependency_job_id":null,"html_url":"https://github.com/rwellinger/aiproxy","commit_stats":null,"previous_names":["rwellinger/thwelly_ai_tools","rwellinger/aiproxy"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/rwellinger/aiproxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwellinger%2Faiproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwellinger%2Faiproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwellinger%2Faiproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwellinger%2Faiproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rwellinger","download_url":"https://codeload.github.com/rwellinger/aiproxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwellinger%2Faiproxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28613659,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T18:56:40.769Z","status":"ssl_error","status_checked_at":"2026-01-20T18:54:26.653Z","response_time":117,"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":["ai","ai-chat","angular","apple-silicon","colima","complete-solutions","docker","docker-compose","graphic-generator","graphics","macos","mureka","ollama","ollama-api","openai","phython3","song-generation","song-lyrics"],"created_at":"2026-01-20T21:00:33.450Z","updated_at":"2026-01-20T21:01:45.798Z","avatar_url":"https://github.com/rwellinger.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# thWelly's AI Toolbox\n\n\u003cimg src=\"thwellysAIToolbar.jpg\" alt=\"thWelly's AI Toolbox\" width=\"100%\"\u003e\n\n\u003e A full-stack platform for AI-powered creative content generation - combining image generation, music creation, lyric writing, and project management in one cohesive application.\n\n[![Build Status](https://github.com/rwellinger/aiproxy/actions/workflows/release.yml/badge.svg)](https://github.com/rwellinger/aiproxy/actions)\n[![License: ELv2](https://img.shields.io/badge/License-ELv2-blue.svg)](LICENSE)\n[![Angular](https://img.shields.io/badge/Angular-20-red.svg)](https://angular.io/)\n[![Python](https://img.shields.io/badge/Python-3.12-blue.svg)](https://www.python.org/)\n\n---\n\n## What is this?\n\n**thWelly's AI Toolbox** is a personal AI multimedia platform that I built to explore and integrate various AI APIs into a unified, production-ready application. It demonstrates modern full-stack architecture patterns, async processing, and clean code practices.\n\n**Key highlights:**\n- Full-stack application with Angular 20 frontend and FastAPI backend\n- Integration of multiple AI services (OpenAI, Mureka, Ollama)\n- Async task processing with Celery for long-running operations\n- S3-compatible storage with hybrid filesystem/cloud architecture\n- CLI tool for local workflow integration\n- Comprehensive arc42 architecture documentation\n\n---\n\n## Features\n\n### AI Chat\n- Multi-model support (Ollama LLMs: Llama, Mistral, etc.)\n- Persistent conversation history with context management\n- Token usage tracking with visual indicators\n- Markdown rendering with syntax highlighting\n\n### Image Generation\n- DALL-E 3 integration via OpenAI API\n- One-click AI-powered prompt enhancement\n- Text overlay editor for adding titles/artist names\n- Gallery view with filtering and search\n- Usage cost tracking\n\n### Music Generation\n- Mureka API integration for AI song generation\n- Async processing via Celery workers\n- Stem separation support\n- Multiple model selection\n\n### Lyric Creation\n- Section-based editor (Verse, Chorus, Bridge, etc.)\n- AI-powered improvement, rewriting, and extension\n- Song architecture builder with drag \u0026 drop\n- Integration with music generator\n\n### Song Sketches\n- Organize song ideas before generation\n- Workflow management (draft, used, archived)\n- AI-powered title generation\n- Direct conversion to full songs\n\n### Song Projects\n- Complete project management for music production\n- Hierarchical folder structure (Arrangement, Mixing, Stems, etc.)\n- S3 cloud storage with batch upload/download\n- CLI integration for local DAW workflow\n\n### Equipment Management\n- Track music production software and plugins\n- Secure credential storage (encrypted)\n- License management (iLok, online, keys)\n\n---\n\n## Tech Stack\n\n| Layer | Technologies |\n|-------|-------------|\n| **Frontend** | Angular 20, TypeScript, Angular Material, SCSS, RxJS |\n| **Backend** | Python 3.12, FastAPI, SQLAlchemy 2.0, Pydantic 2.0 |\n| **Async Processing** | Celery 5.4, Redis |\n| **Database** | PostgreSQL 15 |\n| **Storage** | S3-compatible (MinIO, AWS S3, Backblaze B2) |\n| **AI Services** | OpenAI (DALL-E 3, GPT), Mureka, Ollama |\n| **Deployment** | Docker, Docker Compose, Nginx, GitHub Actions |\n| **Code Quality** | Ruff (Python), ESLint (TypeScript), import-linter |\n\n---\n\n## Architecture\n\nThis project follows a **3-layer architecture** with strict separation of concerns:\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    Frontend (Angular 20)                     │\n│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────────────┐ │\n│  │  Pages  │  │Services │  │Components│  │ ApiConfigService│ │\n│  └────┬────┘  └────┬────┘  └─────────┘  └────────┬────────┘ │\n└───────┼────────────┼────────────────────────────┼───────────┘\n        │            │                            │\n        ▼            ▼                            ▼\n┌─────────────────────────────────────────────────────────────┐\n│                   Backend (FastAPI)                          │\n│  ┌────────────┐  ┌─────────────┐  ┌──────────────────────┐  │\n│  │ Controller │→ │ Orchestrator │→ │ Transformer/Service │  │\n│  │  (HTTP)    │  │ (Coordinate) │  │  (Pure Functions)   │  │\n│  └────────────┘  └──────┬──────┘  └──────────────────────┘  │\n│                         │                                    │\n│  ┌──────────────────────┴───────────────────────────────┐   │\n│  │              Repository Layer (CRUD)                  │   │\n│  └───────────────────────┬──────────────────────────────┘   │\n└──────────────────────────┼──────────────────────────────────┘\n                           │\n        ┌──────────────────┼──────────────────┐\n        ▼                  ▼                  ▼\n┌──────────────┐  ┌──────────────┐  ┌──────────────┐\n│  PostgreSQL  │  │    Redis     │  │  S3 Storage  │\n└──────────────┘  └──────────────┘  └──────────────┘\n```\n\n**Key patterns:**\n- **Controller Layer**: HTTP handling, validation (Pydantic), JWT auth\n- **Orchestrator Layer**: Coordinates services, no business logic\n- **Transformer Layer**: Pure functions (100% unit-testable)\n- **Repository Layer**: CRUD operations only\n\nFor detailed architecture documentation, see [docs/arch42/README.md](docs/arch42/README.md).\n\n---\n\n## Project Structure\n\n```\nmac_ki_service/\n├── aiproxysrv/          # Python Backend (FastAPI)\n│   ├── src/\n│   │   ├── adapters/    # External API clients (OpenAI, Mureka, Ollama)\n│   │   ├── api/         # Controllers \u0026 Routes\n│   │   ├── business/    # Business logic (transformers, orchestrators)\n│   │   ├── db/          # Repository layer (SQLAlchemy)\n│   │   └── celery_app/  # Async task processing\n│   └── fonts/           # Font files for text overlays\n│\n├── aiwebui/             # Angular 20 Frontend\n│   └── src/app/\n│       ├── pages/       # Feature pages (17 pages)\n│       ├── services/    # API services\n│       ├── components/  # Shared components\n│       └── models/      # TypeScript interfaces\n│\n├── scripts/\n│   ├── build/           # Release \u0026 build automation\n│   ├── cli/             # CLI tool (aiproxy-cli)\n│   └── db/              # Database seeding\n│\n├── forwardproxy/        # Nginx reverse proxy\n└── docs/                # Documentation (arc42, patterns)\n```\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- Python 3.12+ with Conda/Miniconda\n- Node.js 20+ with npm\n- Docker (via Colima on macOS)\n- PostgreSQL 15+\n- Redis\n\n### Development Setup\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/rwellinger/aiproxy.git\n   cd aiproxy\n   ```\n\n2. **Backend Setup**\n   ```bash\n   cd aiproxysrv\n   conda create -n mac_ki_service_py312 python=3.12\n   conda activate mac_ki_service_py312\n   pip install -r requirements.txt\n\n   # Copy and configure environment\n   cp env_template .env\n   # Edit .env with your API keys\n\n   # Run database migrations\n   cd src \u0026\u0026 alembic upgrade head\n\n   # Start backend\n   python src/server.py\n   ```\n\n3. **Frontend Setup**\n   ```bash\n   cd aiwebui\n   npm install\n   npm run dev\n   ```\n\n4. **Start Celery Worker** (for async tasks)\n   ```bash\n   python src/worker.py\n   ```\n\n---\n\n## API Documentation\n\nThe backend provides auto-generated OpenAPI documentation:\n- **Swagger UI**: `http://localhost:5050/docs`\n- **ReDoc**: `http://localhost:5050/redoc`\n\n---\n\n## CLI Tool\n\nThe project includes a CLI tool for local workflow integration:\n\n```bash\n# Install\nmake install-cli\n\n# Login\naiproxy-cli login\n\n# Clone project\naiproxy-cli clone \u003cproject-id\u003e ~/Music/Projects/ -d\n\n# Mirror sync (local to cloud)\naiproxy-cli mirror \u003cproject-id\u003e \u003cfolder-id\u003e ~/path --dry-run\n```\n\nSee [scripts/cli/README.md](scripts/cli/README.md) for full documentation.\n\n---\n\n## Testing \u0026 Code Quality\n\n```bash\n# Backend\nmake lint-all     # Ruff + import-linter\nmake test         # pytest\n\n# Frontend\nmake build-prod   # Linters + Tests + Production build\nmake lint-fix     # Auto-fix issues\n```\n\n---\n\n## Documentation\n\n- **Architecture**: [docs/arch42/README.md](docs/arch42/README.md) - Comprehensive arc42 documentation\n- **UI Patterns**: [docs/UI_PATTERNS.md](docs/UI_PATTERNS.md) - Frontend component patterns\n- **Code Patterns**: [docs/CODE_PATTERNS.md](docs/CODE_PATTERNS.md) - Backend patterns\n- **CLI Tool**: [scripts/cli/README.md](scripts/cli/README.md) - Command-line interface\n\n---\n\n## License\n\nThis project is licensed under the [Elastic License 2.0 (ELv2)](LICENSE).\n\n**You may:**\n- Use, copy, and modify the software\n- Use it for personal and commercial purposes\n- Fork and create derivative works\n\n**You may not:**\n- Provide the software as a hosted/managed service (SaaS)\n- Remove or alter license notices\n\n---\n\n## Author\n\n**Robert Wellinger**\n\nThis project showcases modern full-stack development practices including:\n- Clean architecture with testable business logic\n- Async processing for long-running operations\n- Multi-service AI integration\n- Production-ready deployment with Docker\n- Comprehensive documentation (arc42)\n\n---\n\n## Acknowledgments\n\n- [OpenAI](https://openai.com/) - DALL-E 3 and GPT APIs\n- [Mureka](https://mureka.ai/) - Music generation API\n- [Ollama](https://ollama.ai/) - Local LLM infrastructure\n- [Angular](https://angular.io/) - Frontend framework\n- [FastAPI](https://fastapi.tiangolo.com/) - Backend framework\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwellinger%2Faiproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frwellinger%2Faiproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwellinger%2Faiproxy/lists"}