I did this as a PoC, testing GitHub Copilot SDK. Learn more: WP FotoKopilot Developer Documentation.
A cross-platform Electron desktop app that connects to WordPress sites via the REST API, scans the media library, and generates missing (or improved) alt text using the GitHub Copilot SDK. Optionally organizes media into Virtual Media Folders (VMF).
- π Connect to any WordPress site with REST API enabled
- π Scan media library with filters (missing alt text only, limit)
- π€ Generate alt text using GitHub Copilot with vision capabilities
- βοΈ Review and edit suggestions before applying
- π Organize media into Virtual Media Folders (VMF plugin)
- Install VMF plugin directly from the app (single-site WordPress)
- Scan uncategorized media or reorganize all media
- AI-powered folder suggestions (existing or new folders)
- π Multi-language prompts based on WordPress site language
- π Secure credential storage using OS keychain (via Electron safeStorage)
- π Export changes to CSV or JSON
- Node.js 20+
- GitHub Copilot subscription (for AI features)
- WordPress site with:
- REST API enabled
- Application password for authentication
- (Optional) Virtual Media Folders plugin for folder organization
Download the latest release for your platform from the Releases page:
| Platform | File |
|---|---|
| macOS (Apple Silicon) | WP-FotoKopilot-x.x.x-arm64.dmg |
| macOS (Intel) | WP-FotoKopilot-x.x.x-x64.dmg |
| Windows | WP-FotoKopilot-x.x.x-Setup.exe |
| Linux (AppImage) | WP-FotoKopilot-x.x.x.AppImage |
| Linux (deb) | wp-fotokopilot_x.x.x_amd64.deb |
- Download the
.dmgfile for your architecture - Open the DMG and drag WP FotoKopilot to your Applications folder
- On first launch, right-click and select "Open" to bypass Gatekeeper
- Download the
.exeinstaller - Run the installer and follow the prompts
- Launch from Start menu or desktop shortcut
AppImage:
chmod +x WP-FotoKopilot-*.AppImage
./WP-FotoKopilot-*.AppImageDebian/Ubuntu:
sudo dpkg -i wp-fotokopilot_*_amd64.deb# Clone the repository
git clone https://github.com/soderlind/wp-fotokopilot.git
cd wp-fotokopilot
# Install dependencies
npm install
# Run in development mode
npm run electron:dev
# Build distributables
npm run electron:build- Open the app and go to the Connect tab
- Enter your WordPress site URL (e.g.,
https://example.com) - Enter your WordPress username
- Create an Application Password and enter it
- Click Test Connection to verify
- Click Save & Connect
- Go to the Scan tab
- Select options:
- Missing alt text only: Only scan images without alt text
- Limit: Maximum number of images to scan
- Click Start Scan
- Go to the Review & Apply tab
- Select images to process
- Click Generate Alt Text
- Review the AI-generated suggestions
- Edit any suggestions as needed
- Click Apply Selected to save changes to WordPress
Requires the Virtual Media Folders plugin.
- Go to the Folders tab
- View existing folder structure
- Use AI suggestions to organize media into folders
- Apply folder assignments
# Run development server (Vite + Electron)
npm run electron:dev
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Build for production
npm run build
# Build Electron distributables
npm run electron:build
# Lint code
npm run lintwp-fotokopilot/
βββ src/
β βββ main/ # Electron main process
β β βββ index.js # App entry point
β β βββ ipc/ # IPC handlers
β β β βββ router.js
β β β βββ site.handlers.js
β β β βββ scan.handlers.js
β β β βββ job.handlers.js
β β β βββ vmf.handlers.js
β β β βββ settings.handlers.js
β β βββ services/ # Core services
β β β βββ wp-client.js
β β β βββ vmf-client.js
β β β βββ copilot-adapter.js
β β β βββ job-queue.js
β β β βββ thumbnail-cache.js
β β β βββ credential-store.js
β β β βββ settings-store.js
β β βββ utils/
β β βββ validation.js
β βββ preload/ # Electron preload scripts
β β βββ index.cjs
β βββ renderer/ # React frontend
β βββ main.jsx
β βββ App.jsx
β βββ components/
β βββ hooks/
β βββ stores/
β βββ styles/
βββ tests/
β βββ unit/
β βββ integration/
β βββ mocks/
βββ package.json
βββ vite.config.js
βββ vitest.config.js
Settings are stored locally and can be configured in the Settings tab:
| Setting | Default | Description |
|---|---|---|
| Max Alt Length | 125 | Maximum characters for generated alt text |
| Concurrency | 3 | Number of parallel AI requests |
| Export Format | CSV | Default export format (CSV or JSON) |
| Model | gpt-4o | Copilot model for alt text generation |
- Credentials are encrypted using Electron's
safeStorageAPI (OS keychain) - All network requests use HTTPS
- Renderer process is sandboxed with
contextIsolation: true - No
nodeIntegrationin renderer
- Electron 40 - Desktop framework
- React 19 - UI framework
- Vite 7 - Build tool
- Zustand - State management
- GitHub Copilot SDK - AI integration
- Vitest - Testing framework
- MSW - API mocking for tests
MIT Β© Per Soderlind
- vmfa-ai-organizer - WordPress plugin for AI-powered media folder organization
- Virtual Media Folders - WordPress plugin for virtual folder organization
