5.1 KiB
name, description
| name | description |
|---|---|
| gemini-api | Use when needing to call Gemini LLM for text generation or Gemini LMM for image generation via the local network Master API at 192.168.1.5:10900. Supports chat completion and image generation with concurrency control. |
Gemini API (Local Network)
Overview
Wraps the local Gemini Master API (192.168.1.5:10900) for LLM text and LMM image generation. Max concurrency = 2. Uses gemini_client.py helper script.
When to Use
- Need LLM text generation (chat/completion) via Gemini
- Need image generation via Gemini LMM
- Any task requiring Gemini model capabilities on the local network
Quick Reference
| Capability | Endpoint | Model Options | Timeout |
|---|---|---|---|
| LLM Chat (sync) | /api/v1/llm/chat/sync |
pro (default), flash |
~200s |
| LMM Image (sync) | /api/v1/lmm/image/sync |
nano-bananapro (default) |
~350s |
Usage
Helper Script
All calls go through ~/.claude/skills/gemini-api/gemini_client.py:
# LLM: text generation
python ~/.claude/skills/gemini-api/gemini_client.py chat "你的问题"
# LLM: with model selection
python ~/.claude/skills/gemini-api/gemini_client.py chat "你的问题" --model flash
# LMM: image generation (saves to file)
python ~/.claude/skills/gemini-api/gemini_client.py image --prompt "图片描述" --output result.png
# LMM: image + auto-remove Gemini watermark
python ~/.claude/skills/gemini-api/gemini_client.py image --prompt "图片描述" --output result.png --remove-watermark
# LMM: image from event data (JSON file)
python ~/.claude/skills/gemini-api/gemini_client.py image --event-data event.json --output result.png
# Batch: multiple requests with concurrency=2
python ~/.claude/skills/gemini-api/gemini_client.py batch requests.jsonl --output-dir ./results/
python ~/.claude/skills/gemini-api/gemini_client.py batch requests.jsonl --output-dir ./results/ --remove-watermark
Python API (recommended for agents)
When writing inline Python scripts (not via CLI), import the module directly:
import sys
sys.path.insert(0, r'C:\Users\ZhuanZ(无密码)\.claude\skills\gemini-api')
# Or on Linux/Mac: sys.path.insert(0, os.path.expanduser('~/.claude/skills/gemini-api'))
from gemini_client import image_sync, save_image_from_response, remove_watermark
# Generate image (always use base64 format)
resp = image_sync(prompt="your prompt here")
# Save to file
save_image_from_response(resp, "output.png")
# Remove watermark (optional)
remove_watermark("output.png")
# Or combine: generate + save + remove watermark in one flow
resp = image_sync(prompt="your prompt here")
save_image_from_response(resp, "output.png")
remove_watermark("output.png") # overwrites in-place
Image Generation: Critical Notes
MUST use base64 format (NOT url)
The output_format="url" mode is broken — returned URLs consistently 404. The client defaults to base64 which works reliably.
# CORRECT — base64 (default, works)
resp = image_sync(prompt="...", output_format="base64")
save_image_from_response(resp, "out.png")
# WRONG — url download will fail with 404
resp = image_sync(prompt="...", output_format="url")
download_image_by_url(resp["result"]["image_url"], "out.png") # 404!
Watermark Removal
Gemini nano-bananapro adds a small star/sparkle watermark in the bottom-right corner of every generated image. Use --remove-watermark (CLI) or remove_watermark() (Python) to clean it.
Requires: pip install opencv-python numpy (one-time setup).
from gemini_client import remove_watermark
# Remove watermark in-place
remove_watermark("image.png")
# Or save to a different file
remove_watermark("input.png", "clean.png")
# Custom region size (for non-standard watermark placement)
remove_watermark("input.png", region_w=300, region_h=250)
How it works: OpenCV cv2.inpaint with TELEA algorithm. Detects the watermark region by corner position, creates a mask, and fills in using surrounding pixels. Works well on both solid and complex backgrounds.
Constraints
- Concurrency: Max 2 simultaneous requests (enforced by helper script)
- API Key: Uses one key per request, rotated from pool of 3
- Rate Limit: 10 req/min, 400 req/hour (server-side)
- Proxy: Must bypass system proxy for 192.168.1.5
- Image format: Always use
output_format="base64", not"url" - Watermark deps:
remove_watermark()needsopencv-pythonandnumpy
Common Mistakes
| Mistake | Consequence | Fix |
|---|---|---|
Using output_format="url" |
URL downloads return 404 | Use "base64" (default) |
Forgetting --noproxy '*' with curl |
Request hangs (proxy intercepts LAN) | Always add --noproxy '*' |
Using 127.0.0.1 instead of 192.168.1.5 |
Wrong host | Use 192.168.1.5 |
Calling download_image_by_url() |
404 error | Use save_image_from_response() |
| Exceeding concurrency=2 | Queuing delays, timeouts | Use batch mode |
Not checking status field |
Missing errors silently | Check resp.get("status") == "completed" |
| Forgetting watermark removal | Star logo in bottom-right | Add --remove-watermark or call remove_watermark() |