{"id":38212670,"url":"https://github.com/tsjdev-apps/piccaptionr","last_synced_at":"2026-01-31T21:43:20.014Z","repository":{"id":307138581,"uuid":"1027246242","full_name":"tsjdev-apps/piccaptionr","owner":"tsjdev-apps","description":"A simple .NET project that uses AI to generate engaging Instagram captions for your vacation photos.","archived":false,"fork":false,"pushed_at":"2025-07-29T15:46:32.000Z","size":3106,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-29T18:30:58.736Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","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/tsjdev-apps.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},"funding":{"github":"tsjdev-apps"}},"created_at":"2025-07-27T16:13:49.000Z","updated_at":"2025-07-29T15:46:33.000Z","dependencies_parsed_at":"2025-07-29T18:36:59.424Z","dependency_job_id":"ab2b9c2f-0577-4f83-8140-098d44b1e4cb","html_url":"https://github.com/tsjdev-apps/piccaptionr","commit_stats":null,"previous_names":["tsjdev-apps/piccaptionr"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tsjdev-apps/piccaptionr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsjdev-apps%2Fpiccaptionr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsjdev-apps%2Fpiccaptionr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsjdev-apps%2Fpiccaptionr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsjdev-apps%2Fpiccaptionr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsjdev-apps","download_url":"https://codeload.github.com/tsjdev-apps/piccaptionr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsjdev-apps%2Fpiccaptionr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28490523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T23:55:29.509Z","status":"ssl_error","status_checked_at":"2026-01-16T23:55:29.108Z","response_time":107,"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":[],"created_at":"2026-01-17T00:44:41.572Z","updated_at":"2026-01-31T21:43:20.009Z","avatar_url":"https://github.com/tsjdev-apps.png","language":"C#","funding_links":["https://github.com/sponsors/tsjdev-apps"],"categories":[],"sub_categories":[],"readme":"# 📸 PicCaptionr\n\n```plaintext\n  ____  _       ____            _   _                  \n |  _ \\(_) ___ / ___|__ _ _ __ | |_(_) ___  _ __  _ __ \n | |_) | |/ __| |   / _` | '_ \\| __| |/ _ \\| '_ \\| '__|\n |  __/| | (__| |__| (_| | |_) | |_| | (_) | | | | |   \n |_|   |_|\\___|\\____\\__,_| .__/ \\__|_|\\___/|_| |_|_|   \n                         |_|                           \n```\n\n**AI-powered tool to automatically generate Instagram-style captions for your photos – on Windows, Linux and macOS.**\n\n![Header](/docs/header.png)\n\n[![Release](https://github.com/tsjdev-apps/piccaptionr/actions/workflows/release.yml/badge.svg)](https://github.com/tsjdev-apps/piccaptionr/actions/workflows/release.yml)\n\n## ✨ Features\n\n- 🧠 Uses OpenAI's Vision API to understand and describe your photos\n- 🌍 Multilingual output (English, German, Spanish)\n- 🗞️ Output as `.txt` file\n- 🖼️ Supports multiple images\n- ⚙️ Flexible backend: OpenAI or Azure OpenAI\n- 💻 Available as:\n  - **Console App** (cross-platform)\n  - **WPF Desktop App** (Windows only)\n  - **Avalonia App** (modern cross-platform GUI for Windows, Linux \u0026 macOS)\n\n## 🚀 Getting Started\n\n### 🔧 Requirements\n\n- [.NET 10 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)\n- An API key from [OpenAI](https://platform.openai.com) or your Azure OpenAI deployment\n\n### 🖥️ Console App\n\n```bash\ncd PicCaptionr.ConsoleApp\ndotnet run\n```\n\nYou will be prompted to enter:\n\n- your host (OpenAI / Azure OpenAI)\n- your API key, Deployment name and Endpoint (depending on the host)\n- the path to the folder containing the images\n- target language\n- optional additional instructions\n- the path to an output folder\n\nOutput file (`.txt`) will be saved in the given directory\n\n### 🪟 WPF Desktop App\n\n```bash\ncd PicCaptionr.WPFApp\ndotnet build\ndotnet run\n```\n\n- Requires Windows and .NET Desktop Runtime\n- Simple graphical interface with:\n  - Folder pickers\n  - Language and model selection\n  - Progress bar and log viewer\n\n### 🖼️ Avalonia App (Cross-platform GUI)\n\n```bash\ncd PicCaptionr.AvaloniaApp\ndotnet build\ndotnet run\n```\n\n- Works on Windows, Linux, and macOS\n- Modern responsive UI using Avalonia UI\n- Cross-platform folder picker and dynamic layout\n- Provides the same functionality as the WPF app, but with platform-independent UI\n\n\u003e 💡 **macOS Notice**: You may need to allow the app to run via terminal:\n\u003e\n\u003e ```bash\n\u003e chmod +x PicCaptionr.AvaloniaApp\n\u003e xattr -d com.apple.quarantine PicCaptionr.AvaloniaApp\n\u003e ```\n\n## 📦 CI/CD with GitHub Actions\n\nAll apps are built and published automatically via GitHub Actions:\n\n### Build Workflows\n\n- ✅ Console App (cross-platform):\n  - `win-x64`, `linux-x64`, `osx-x64`, `osx-arm64`\n- ✅ WPF App (Windows only):\n  - `win-x64` (single `.exe`)\n- ✅ Avalonia App (cross-platform):\n  - `win-x64`, `linux-x64`, `osx-x64`, `osx-arm64` (self-contained)\n\n### Release Workflow\n\nWhen a new version tag is pushed (`v*`), a GitHub release is automatically created with:\n\n- Pre-compiled, self-contained binaries for all platforms\n- Console App and WPF App as single executable files\n- Avalonia App as complete self-contained packages\n\n**Download releases**: Visit the [Releases](https://github.com/tsjdev-apps/piccaptionr/releases) page to get the latest builds for your platform.\n\n## 🔐 Configuration\n\nAll variants require:\n\n- An **API key** from OpenAI or Azure\n- For Azure OpenAI:\n  - **Endpoint URL**\n  - **Deployment name**\n\nCredentials are entered at runtime and never stored permanently.\n\n## 🗂️ Folder Structure\n\n```text\nPicCaptionr.ConsoleApp     # Console-based UI (cross-platform)\nPicCaptionr.WPFApp         # Windows-only WPF GUI\nPicCaptionr.AvaloniaApp    # Cross-platform GUI (Avalonia)\nPicCaptionr                # Shared models, services, and logic\n```\n\n## 📷 Screenshots\n\n### Console App\n  \n![Console](/docs/console-01.png)\n\n![Console](/docs/console-02.png)\n\n### WPF App\n  \n![WPF](/docs/wpf-01.png)\n\n### Avalonia App\n  \n![Avalonia](/docs/avalonia-01.png)\n\n## 📄 Sample Output\n\n![Sample Image](/docs/sample-image.jpg)\n\nA typical output entry in JSON format might look like this:\n\n```json\n[\n  {\n    \"ImageName\": \"tsjreiseblog_28-Jul-2025.jpg\",\n    \"ImageMetaData\": {\n      \"CaptureDate\": null,\n      \"Latitude\": null,\n      \"Longitude\": null\n    },\n    \"OpenAIResponse\": {\n      \"RawContent\": \"Exploring the charming streets and historic sights of Civitavecchia, Italy 🇮🇹✨ From vibrant scooters to stunning architecture and scenic harbor views—every corner tells a story. Can't wait to see more of this beautiful port city! 🚤🏛️🌊\\n\\n#Civitavecchia #ItalyTravel #PortCity #HistoricItaly #TravelItaly #ItalianArchitecture #HarborViews #ScooterLife #MediterraneanVibes #TravelDestinations\",\n      \"FormattedContent\": \"Exploring the charming streets and historic sights of Civitavecchia, Italy 🇮🇹✨ From vibrant scooters to stunning architecture and scenic harbor views—every corner tells a story. Can't wait to see more of this beautiful port city! 🚤🏛️🌊\\r\\n\\r\\n#Civitavecchia #ItalyTravel #PortCity #HistoricItaly #TravelItaly #ItalianArchitecture #HarborViews #ScooterLife #MediterraneanVibes #TravelDestinations\",\n      \"InputTokens\": 800,\n      \"OutputTokens\": 94\n    }\n  }\n]\n```\n\n## 📓 License\n\nMIT License © [tsjdev-apps](https://github.com/tsjdev-apps)\n\n## 💬 Feedback \u0026 Contributions\n\nFound a bug? Want to improve the UI?  \nOpen an [Issue](https://github.com/tsjdev-apps/piccaptionr/issues) or submit a [Pull Request](https://github.com/tsjdev-apps/piccaptionr/pulls).  \nWe ❤️ feedback and contributions!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsjdev-apps%2Fpiccaptionr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsjdev-apps%2Fpiccaptionr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsjdev-apps%2Fpiccaptionr/lists"}