Christoph's Marvellous Fal to Miro Image Creator
A desktop application for generating AI images using fal.ai and uploading them directly to Miro boards.
- AI Image Generation: Generate images using fal.ai models (Nano Banana Pro, GPT Image 1.5)
- Direct Miro Upload: Images are automatically uploaded to your selected Miro board in a grid layout
- Reference Images: Upload reference images for image-to-image generation
- Batch Generation: Generate up to 20 images at once, processed in parallel batches
- Job Queue: Run multiple generation jobs in parallel (max 3 concurrent)
- Create Boards: Create new Miro boards directly from the app
- Download
CMF2MIC-macOS-arm64.zipfrom Releases - Unzip and move
CMF2MIC.appto Applications - Right-click → Open (first time only, to bypass Gatekeeper)
- Configure your API keys in Settings
# Clone the repository
git clone https://github.com/yourusername/cmf2mic.git
cd cmf2mic
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Run the application
python app.pyYou need API keys to use CMF2MIC. Follow these step-by-step guides:
fal.ai provides the AI image generation models.
- Go to fal.ai and click Sign Up (or log in)
- Navigate to Dashboard → Keys
- Click Create Key
- Copy the key (format:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx) - Paste it in CMF2MIC Settings or your
.envfile
Pricing: ~$0.01-0.05 per image depending on model and resolution. New accounts get free credits.
Miro is where your generated images will be uploaded.
- Log in to Miro
- Go to Developer Portal → Your Apps
- Click Create new app
- Fill in:
- App name:
CMF2MIC(or any name you like) - Description: Optional
- Team: Select your team
- App name:
- Click Create app
In your app settings, scroll to Permissions and enable:
boards:read- Read board databoards:write- Create and modify board content
Click Save.
- Scroll to Install app and get OAuth token
- Select your team from the dropdown
- Click Install app
- Copy the Access Token that appears
- Paste it in CMF2MIC Settings or your
.envfile
Note: The token starts with
eyJ...and is quite long. Copy the entire string.
Only needed if you want to use the AI prompt optimization feature.
- Go to OpenAI Platform
- Sign up or log in
- Click Create new secret key
- Copy the key (starts with
sk-...) - Paste it in CMF2MIC Settings or your
.envfile
Option A: Settings Dialog (Recommended)
- Open CMF2MIC
- Click the ⚙️ gear icon
- Paste your keys
- Click Save
Option B: Create a .env file
Create a file named .env in the project folder:
FAL_KEY=your-fal-api-key-here
MIRO_ACCESS_TOKEN=your-miro-token-here
OPENAI_API_KEY=your-openai-key-hereSecurity: Never share your
.envfile or commit it to git!
┌─────────────────────────────────────────────────────────────────┐
│ CMF2MIC │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Enter Prompt ──────────────────────────────────────────► │
│ "A futuristic cityscape at sunset" │
│ │
│ 2. (Optional) Add Reference Images ──────────────────────► │
│ Upload local images for image-to-image generation │
│ │
│ 3. Configure Settings ───────────────────────────────────► │
│ • Model: Nano Banana Pro / GPT Image 1.5 │
│ • Aspect Ratio: 1:1, 16:9, 9:16, etc. │
│ • Resolution: 1K, 2K, 4K │
│ • Number of images: 1-20 │
│ │
│ 4. Select Miro Board ────────────────────────────────────► │
│ Choose from your recent boards or create a new one │
│ │
│ 5. Click GENERATE ───────────────────────────────────────► │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Job Processing │
├─────────────────────────────────────────────────────────────────┤
│ │
│ • Job added to queue (max 3 parallel jobs) │
│ • Reference images uploaded to fal.ai (if any) │
│ • Images generated in batches of 4 │
│ • Each batch uploaded to Miro immediately │
│ • Progress shown in job card │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Miro Board │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ... │
│ │ 1 │ │ 2 │ │ 3 │ │ 4 │ │ 5 │ │ 6 │ │ 7 │ │ 8 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 9 │ │10 │ │11 │ │12 │ ... │
│ └───┘ └───┘ └───┘ └───┘ │
│ │
│ Images placed in grid (12 columns, 550px spacing) │
│ │
└─────────────────────────────────────────────────────────────────┘
| Model | Best For | Features |
|---|---|---|
| Nano Banana Pro | Fast generation, creative prompts | Resolution control (1K/2K/4K), image-to-image |
| GPT Image 1.5 | High quality, precise prompts | Quality control (low/medium/high), detailed output |
- fal.ai: ~$0.01-0.05 per image (varies by model and resolution)
- Miro: Free tier allows 3 boards, unlimited with paid plans
# Activate virtual environment
source venv/bin/activate
# Build macOS app
pyinstaller CMF2MIC.spec --clean --noconfirm
# Output in dist/CMF2MIC.appcmf2mic/
├── app.py # Main GUI application (CustomTkinter)
├── generator.py # fal.ai image generation
├── miro_upload.py # Miro API integration
├── config.py # API key configuration
├── prompt_optimizer.py # Optional GPT prompt enhancement
├── requirements.txt # Python dependencies
├── CMF2MIC.spec # PyInstaller build configuration
└── logo.png # Application logo
MIT License - feel free to use and modify.
- fal.ai for the image generation API
- Miro for the collaboration platform API
- CustomTkinter for the modern UI framework
