The desktop app still requires valid model provider credentials. On first launch, open Settings and configure the provider, models, and API key. The settings are stored in the local app data directory.
Install a Released Build
Download the installer for your platform from GitHub Releases.
The desktop app stores its database, uploads, materials, and exports in a user-writable app data directory rather than in packaged resource directories. Back up important local projects before upgrading.
Local Packaging Requirements
Local packaging needs frontend, backend, and Electron dependencies:- Node.js 20+
- Python 3.11
- uv
- PyInstaller
- Electron dependencies installed under
desktop/ - macOS / Linux use platform FFmpeg/FFprobe binaries from the
desktopnpm dependencies by default; you can also set trustedFFMPEG_BIN/FFPROBE_BINpaths, or fall back to commands inPATH - Windows downloads a pinned static FFmpeg archive and verifies its SHA256 by default; you can also point
FFMPEG_BIN/FFPROBE_BINat trusted local binaries
desktop/electron-builder.yml currently targets Windows x64 NSIS, macOS arm64 DMG, and Linux x64 AppImage/deb. Prefer packaging on the matching OS or through GitHub Actions runners.Local Packaging
Run these commands from the repository root:npm run build:* first runs desktop/scripts/prepare-artifacts.js and desktop/scripts/sync-build-meta.js:
- Copies
frontend/dist/todesktop/frontend/ - Copies
backend/dist/banana-backend/todesktop/backend/ - Copies or generates FFmpeg, macOS icon, and other packaging resources
- Generates
desktop/build-meta.json, which lets update checks compare the current build against GitHub Releases
desktop/dist/.
Release Flow
Desktop releases are driven by.github/workflows/release-desktop.yml. Pushing a v* tag triggers:
- Syncing the tag version into
desktop/package.json. - Building frontend static files.
- Installing backend dependencies with uv and packaging
backend/banana-slides.specwith PyInstaller. - Installing Electron dependencies.
- Running
npm run build:win,npm run build:mac, andnpm run build:linuxon Windows, macOS, and Linux runners. - Uploading
desktop/dist/*to a GitHub draft Release.
Anionex/banana-slides and uses build-meta.json commit timestamps to avoid showing older releases as updates.
Signing and Distribution Limits
The current configuration can generate installers, but that does not mean the app is fully signed for formal distribution.- Windows: unsigned installers can trigger SmartScreen or “unknown publisher” prompts. Formal distribution should sign both the installer and executables with a code-signing certificate.
- macOS: a DMG / App without Apple Developer ID signing and notarization may be blocked by Gatekeeper. Formal distribution should add signing, notarization, and stapling.
- Updates: the current implementation checks GitHub Releases and prompts users to download a new version; it is not silent delta auto-update.
- Architecture limits: macOS is currently configured for arm64, and Windows for x64. Intel Mac or Windows arm64 support requires additional electron-builder targets.
Windows EXE Verification
Windows verification should cover at least:- Generate
BananaSlides-<version>-Setup.exeon a GitHub Actions Windows runner or a local Windows environment. - Confirm the installer opens, the install path can be selected, and desktop/start-menu shortcuts are created as configured.
- Launch the app and confirm the desktop window, splash screen, and bundled backend startup.
- Open Settings, save a model configuration, refresh, and confirm it persists.
- Create a project and exercise one preview-page export or download action.
- Quit the app and confirm the bundled backend process exits with it.
macOS DMG Verification
macOS verification should cover at least:- Run
npm run build:macon a macOS runner or local macOS machine and generateBananaSlides-<version>.dmg. - Mount the DMG and confirm the app icon/name are correct and the app can be dragged into Applications.
- Launch the app from Applications; if macOS warns about an unidentified developer, continue only through the per-app approval flow.
- After the desktop window loads, confirm the bundled backend
/healthpath is healthy and frontend requests use the actual desktop backend port. - Verify at least one real workflow involving image URLs, long-running task polling or SSE, and export/download behavior.
- Quit the app and confirm no packaged backend process remains.
Troubleshooting
The App Says the Backend Is Unavailable
Confirm the installer includesdesktop/backend/, and check whether security software blocked the bundled backend process. During development or packaging verification, also confirm PyInstaller generated backend/dist/banana-backend/.
Packaging Cannot Find Frontend or Backend Resources
Buildfrontend/dist/ and backend/dist/banana-backend/ first, then run npm run build:* from desktop/.
macOS Packaging Cannot Find FFmpeg
Install FFmpeg, or set:npm run build:mac.