Skip to content

tsjdev-apps/piccaptionr

Repository files navigation

📸 PicCaptionr

  ____  _       ____            _   _                  
 |  _ \(_) ___ / ___|__ _ _ __ | |_(_) ___  _ __  _ __ 
 | |_) | |/ __| |   / _` | '_ \| __| |/ _ \| '_ \| '__|
 |  __/| | (__| |__| (_| | |_) | |_| | (_) | | | | |   
 |_|   |_|\___|\____\__,_| .__/ \__|_|\___/|_| |_|_|   
                         |_|                           

AI-powered tool to automatically generate Instagram-style captions for your photos – on Windows, Linux and macOS.

Header

Release

✨ Features

  • 🧠 Uses OpenAI's Vision API to understand and describe your photos
  • 🌍 Multilingual output (English, German, Spanish)
  • 🗞️ Output as .txt file
  • 🖼️ Supports multiple images
  • ⚙️ Flexible backend: OpenAI or Azure OpenAI
  • 🎛️ OpenAI model selection (gpt-5.x, gpt-4.1, gpt-4o families)
  • 💻 Available as:
    • Console App (cross-platform)
    • WPF Desktop App (Windows only)
    • Avalonia App (modern cross-platform GUI for Windows, Linux & macOS)

🚀 Getting Started

🔧 Requirements

🖥️ Console App

cd PicCaptionr.ConsoleApp
dotnet run

You will be prompted to enter:

  • your host (OpenAI / Azure OpenAI)
  • your API key, Deployment name and Endpoint (depending on the host)
  • your OpenAI model (when using OpenAI)
  • the path to the folder containing the images
  • target language
  • optional additional instructions
  • the path to an output folder

Output file (.txt) will be saved in the given directory

🪟 WPF Desktop App

cd PicCaptionr.WPFApp
dotnet build
dotnet run
  • Requires Windows and .NET Desktop Runtime
  • Simple graphical interface with:
    • Folder pickers
    • Language and model selection
    • Progress bar and log viewer

🖼️ Avalonia App (Cross-platform GUI)

cd PicCaptionr.AvaloniaApp
dotnet build
dotnet run
  • Works on Windows, Linux, and macOS
  • Modern responsive UI using Avalonia UI
  • Cross-platform folder picker and dynamic layout
  • Provides the same functionality as the WPF app, but with platform-independent UI

💡 macOS Notice: You may need to allow the app to run via terminal:

chmod +x PicCaptionr.AvaloniaApp
xattr -d com.apple.quarantine PicCaptionr.AvaloniaApp

📦 CI/CD with GitHub Actions

All apps are built and published automatically via GitHub Actions:

Build Workflows

  • ✅ Console App (cross-platform):
    • win-x64, linux-x64, osx-x64, osx-arm64
  • ✅ WPF App (Windows only):
    • win-x64 (single .exe)
  • ✅ Avalonia App (cross-platform):
    • win-x64, linux-x64, osx-x64, osx-arm64 (self-contained)

Release Workflow

When a new version tag is pushed (v*), a GitHub release is automatically created with:

  • Pre-compiled, self-contained binaries for all platforms
  • Console App and WPF App as single executable files
  • Avalonia App as complete self-contained packages

Download releases: Visit the Releases page to get the latest builds for your platform.

🔐 Configuration

All variants require:

  • An API key from OpenAI or Azure
  • For Azure OpenAI:
    • Endpoint URL
    • Deployment name
  • For OpenAI:
    • Model name (choose from gpt-5.x, gpt-4.1, gpt-4o families)

Credentials are entered at runtime and never stored permanently.

🗂️ Folder Structure

PicCaptionr.ConsoleApp     # Console-based UI (cross-platform)
PicCaptionr.WPFApp         # Windows-only WPF GUI
PicCaptionr.AvaloniaApp    # Cross-platform GUI (Avalonia)
PicCaptionr                # Shared models, services, and logic

📷 Screenshots

Console App

Console

Console

WPF App

WPF

Avalonia App

Avalonia

📄 Sample Output

Sample Image

A typical output entry in JSON format might look like this:

[
  {
    "ImageName": "tsjreiseblog_28-Jul-2025.jpg",
    "ImageMetaData": {
      "CaptureDate": null,
      "Latitude": null,
      "Longitude": null
    },
    "OpenAIResponse": {
      "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",
      "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",
      "InputTokens": 800,
      "OutputTokens": 94
    }
  }
]

📓 License

MIT License © tsjdev-apps

💬 Feedback & Contributions

Found a bug? Want to improve the UI?
Open an Issue or submit a Pull Request.
We ❤️ feedback and contributions!

About

A simple .NET project that uses AI to generate engaging Instagram captions for your vacation photos.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages