mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 07:19:39 +02:00
- Generate images via Picture backend with `!generate` command - Support prompt options (--width, --height, --steps, --negative) - Model selection with `!models` and `!model [id]` - Image history and deletion - Login/logout via mana-core-auth - Credit balance display Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
Matrix Picture Bot - Claude Code Guidelines
Overview
Matrix Picture Bot provides AI image generation via Matrix chat. It integrates with the Picture backend to generate images using various AI models (Replicate).
Tech Stack
- Framework: NestJS 10
- Matrix: matrix-bot-sdk
- Backend: Picture API (port 3006)
- Auth: Mana Core Auth (JWT)
Commands
# Development
pnpm install
pnpm start:dev # Start with hot reload
# Build
pnpm build # Production build
# Type check
pnpm type-check # Check TypeScript types
Project Structure
services/matrix-picture-bot/
├── src/
│ ├── main.ts # Application entry point (port 3319)
│ ├── app.module.ts # Root module
│ ├── health.controller.ts # Health check endpoint
│ ├── config/
│ │ └── configuration.ts # Configuration & help messages
│ ├── bot/
│ │ ├── bot.module.ts
│ │ └── matrix.service.ts # Matrix client & command handlers
│ ├── picture/
│ │ ├── picture.module.ts
│ │ └── picture.service.ts # Picture Backend API client
│ └── session/
│ ├── session.module.ts
│ └── session.service.ts # User session & auth management
├── Dockerfile
└── package.json
Bot Commands
| Command | Aliases | Description |
|---|---|---|
!help |
hilfe | Show help message |
!generate [prompt] |
bild, gen | Generate an image |
!models |
modelle | List available models |
!model [id] |
modell | Switch model |
!history |
verlauf | Show recent images |
!delete [nr] |
loeschen | Delete an image |
!credits |
guthaben | Show credit balance |
!login email pass |
- | Login to Picture |
!logout |
- | Logout |
!cancel |
abbrechen | Cancel active generation |
!status |
- | Bot status |
Prompt Options
Options can be added to the generate command:
!generate A beautiful sunset --width 1280 --height 720 --steps 40
!bild Ein Hund --negative blurry, low quality --style photorealistic
| Option | Description | Default |
|---|---|---|
--width N |
Image width | 1024 |
--height N |
Image height | 1024 |
--steps N |
Generation steps | 25 |
--negative [text] |
Negative prompt | - |
--style [name] |
Style preset | - |
Environment Variables
# Server
PORT=3319
# Matrix
MATRIX_HOMESERVER_URL=http://localhost:8008
MATRIX_ACCESS_TOKEN=syt_xxx
MATRIX_ALLOWED_ROOMS=#picture:matrix.mana.how
MATRIX_STORAGE_PATH=./data/bot-storage.json
# Picture Backend
PICTURE_BACKEND_URL=http://localhost:3006
PICTURE_API_PREFIX=/api/v1
# Mana Core Auth
MANA_CORE_AUTH_URL=http://localhost:3001
Docker
# Build locally
docker build -f services/matrix-picture-bot/Dockerfile -t matrix-picture-bot services/matrix-picture-bot
# Run
docker run -p 3319:3319 \
-e MATRIX_HOMESERVER_URL=http://synapse:8008 \
-e MATRIX_ACCESS_TOKEN=syt_xxx \
-e PICTURE_BACKEND_URL=http://picture-backend:3006 \
-e MANA_CORE_AUTH_URL=http://mana-core-auth:3001 \
-v matrix-picture-bot-data:/app/data \
matrix-picture-bot
Health Check
curl http://localhost:3319/health
Getting a Matrix Access Token
# Create bot user first, then login
curl -X POST "https://matrix.mana.how/_matrix/client/v3/login" \
-H "Content-Type: application/json" \
-d '{
"type": "m.login.password",
"user": "picture-bot",
"password": "your-password"
}'
# Response contains: {"access_token": "syt_xxx", ...}
Authentication Flow
- User sends
!login email password - Bot calls mana-core-auth
/api/v1/auth/login - JWT token stored in session (in-memory)
- Token used for all Picture API calls
- Token expires after 7 days (re-login required)
Picture Backend API Endpoints Used
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/api/v1/models |
GET | List available models |
/api/v1/models/:id |
GET | Get model details |
/api/v1/generate |
POST | Generate image |
/api/v1/images |
GET | List user's images |
/api/v1/images/:id |
DELETE | Delete image |
/api/v1/credits/balance |
GET | Get credit balance |
Credit System
- Cost: 10 credits per image generation
- Free tier: 3 free generations for new users
- Enforcement: Only in production environment
- Development: Fail-open (no credit enforcement)
Image Upload Flow
- User sends
!generate [prompt] - Bot calls Picture Backend with
waitForResult: true - Backend generates image via Replicate
- Bot downloads image from storage URL
- Bot uploads image to Matrix media server
- Bot sends image message to room