PrintPal 3D Generation
by @plebbyd
Generate 3D models for 3D printing from images or text prompts using PrintPal API, plus SEO product listing generation. Supports text-to-image via WaveSpeed...
clawhub install printpal-3dπ About This Skill
name: printpal-3d description: Generate 3D models for 3D printing from images or text prompts using PrintPal API, plus SEO product listing generation. Supports text-to-image via WaveSpeed when WAVESPEED_API_KEY is configured. Includes a reference guide for Bambu Lab printer control via the separate @versatly/bambu CLI (printer integration requires manual CLI setup). Works with file paths, URLs, or images pasted directly into chat. metadata: { "openclaw": { "requires": { "bins": ["python3"], "env": ["PRINTPAL_API_KEY"] } } }
PrintPal 3D Model Generator
Generate 3D models from images or text prompts for 3D printing.
Quick Start
From an image path or URL:
python3 {baseDir}/scripts/generate_3d.py --image /path/to/image.png
From text prompt:
python3 {baseDir}/scripts/generate_3d.py --prompt "a cute robot toy"
Installation
Required Python packages:
pip install printpal requests
For text-to-image and SEO features:
pip install wavespeed
Configure API keys in your OpenClaw settings (~/.openclaw/openclaw.json under env):
PRINTPAL_API_KEY - required for 3D generationWAVESPEED_API_KEY - for text-to-image and product photosOPENROUTER_API_KEY - for SEO metadata generationWorkflow
1. Get the image: - If user provides a file path β use it directly - If user provides a URL β download it - If user pastes an image β use it directly (it will be available as a file path or URL in context) - If user provides text β generate image via WaveSpeed first
2. Generate 3D model:
- Use PrintPal API with super quality (768 cubed)
- Default output format: STL
- Save to printpal-output/ directory in workspace
3. Provide downloads: - Start file server if needed - Return clickable URLs
Default Settings
| Setting | Default | Options | |---------|---------|---------| | Quality | super | default, high, ultra, super, super_texture, superplus, superplus_texture | | Format | stl | stl, glb, obj, ply, fbx |
Scripts
generate_3d.py
Main script for generating 3D models.
python3 scripts/generate_3d.py [OPTIONS]Options:
-i, --image PATH Input image file path or URL
-p, --prompt TEXT Text prompt (uses WaveSpeed to generate image first)
-q, --quality TEXT Quality level (default: super)
-f, --format TEXT Output format (default: stl)
-o, --output-dir DIR Output directory
--json Output results as JSON
serve_files.py
Start HTTP server for file downloads.
python3 scripts/serve_files.py [OPTIONS]Options:
-d, --directory DIR Directory to serve (default: printpal-output/)
-p, --port PORT Port number (default: 8765)
--host HOST Host to bind to (default: 127.0.0.1)
--public Bind to 0.0.0.0 to allow network access
--url-only Just print URL without starting server
Quality Levels
| Quality | Resolution | Credits | Est. Time | |---------|-----------|---------|-----------| | default | 256Β³ | 4 | 20 sec | | high | 384Β³ | 6 | 30 sec | | ultra | 512Β³ | 8 | 60 sec | | super | 768Β³ | 20 | 3 min | | superplus | 1024Β³ | 30 | 4 min |
Output Formats
| Format | Best For | |--------|----------| | STL | 3D printing (default) | | GLB | Web/games | | OBJ | Universal compatibility | | PLY | Point clouds | | FBX | Autodesk software |
API Keys
Required environment variables (configure in ~/.openclaw/openclaw.json under env):
PRINTPAL_API_KEY - Get from https://printpal.io/api-keys (required for 3D generation)WAVESPEED_API_KEY - Get from https://wavespeed.ai/accesskey (optional, for text-to-image)OPENROUTER_API_KEY - Get from https://openrouter.ai/keys (optional, for SEO generation)Output Directory
Default output is printpal-output/ in the skill's workspace. Override with:
PRINTPAL_OUTPUT_DIR=/path/to/output--output-dir /path/to/outputSecurity Notes
--host 0.0.0.0 if you need network access, but be aware this exposes the server to your network.printpal, wavespeed, and requests packages. Review these packages before installing.Error Handling
| Error | Solution |
|-------|----------|
| WAVESPEED_API_KEY not set | Provide image directly or configure API key |
| PRINTPAL_API_KEY not set | Configure in OpenClaw settings |
| Insufficient credits | Purchase at printpal.io/buy-credits |
| Package not installed | Run pip install printpal wavespeed |
SEO Product Listing Generator
Generate SEO-optimized metadata and product photos for selling 3D models/prints on marketplaces like Etsy, TikTok Shop, etc.
Quick Start
python3 scripts/seo_product_photos.py \
--image /path/to/model_photo.jpg \
--description "A cute dragon figurine" \
--purpose "Collectible toy for fantasy fans" \
--audience "Fantasy enthusiasts, collectors, parents buying for kids"
Workflow
1. Input: User provides an image of their 3D model/print + description, purpose, and target audience 2. SEO Generation: OpenRouter MiniMax generates optimized title, description, tags 3. Photo Generation: WaveSpeed nano-banana/edit creates 5 polished product photos 4. Output: ZIP file with metadata + photos, served via local HTTP server
Required Environment Variables
# OpenRouter (for SEO generation)
OPENROUTER_API_KEY=your_openrouter_keyWaveSpeed (for product photos)
WAVESPEED_API_KEY=your_wavespeed_key
Get OpenRouter key: https://openrouter.ai/keys Get WaveSpeed key: https://wavespeed.ai/accesskey
Options
| Option | Short | Description | Default | |--------|-------|-------------|---------| | --image | -i | Path or URL to input image | (required) | | --description | -d | Description of the 3D model/print | (required) | | --purpose | -p | What the item is for/its use | (required) | | --audience | -a | Target audience/customers | (required) | | --num-photos | -n | Number of photos to generate | 5 | | --port | - | Download server port | 8766 | | --json | - | Output results as JSON | false |
Output
The script generates:
seo_metadata.txt - Full metadata (title, description, tags, features, etc.)product_photo_01.png through product_photo_05.png - Generated product photosseo_product_listing.zip - All files packaged for downloadDownload URL is provided at the end (e.g., http://hostname:8766/seo_product_listing.zip)
SEO Metadata Fields
The generated metadata includes:
Example
``bash# Generate SEO listing for a custom 3D printed mug holder
python3 scripts/seo_product_photos.py \
--image /workspace/my_mug_holder.jpg \
--description "A custom 3D printed mug holder with dragon design" \
--purpose "Keeps mugs organized on desk or kitchen, great gift" \
--audience "Office workers, coffee lovers, home office enthusiasts"
Troubleshooting
| Error | Solution |
|-------|----------|
| OPENROUTER_API_KEY not set | Configure in OpenClaw settings |
| Photo generation fails | Check WAVESPEED_API_KEY and credits |
| Port in use | Use --port to specify different port |
Reference
For detailed API documentation, see api-reference.md. For Bambu Lab printer control (printing generated models, monitoring, hardware management), see bambu-printer-guide.md.
Bambu Lab Printer Integration (Reference Guide)
This section documents how to use the separate @versatly/bambu CLI to send PrintPal-generated models to Bambu Lab printers. This skill does not include built-in printer integration code β you must install and configure the Bambu CLI yourself.
Prerequisites
When to Use
Use the bambu CLI when the user wants to:
Quick Reference
bash
Upload and start printing a generated model
bambu job upload-and-print ./printpal-output/model.3mfMonitor until done
bambu watchCheck printer readiness
bambu status --json | jq '.gcode_state'IDLE = ready, RUNNING = busy, FAILED = needs attention
`Typical End-to-End Flow
1. Generate model via PrintPal β output lands in
printpal-output/
2. Upload to printer: bambu job upload-and-print
3. Monitor: bambu watch or bambu status
4. When done: bambu cooldown && bambu light off`For full command reference, temperature presets, AMS management, calibration, and troubleshooting, see bambu-printer-guide.md.
β‘ When to Use
π‘ Examples
``bash# Generate SEO listing for a custom 3D printed mug holder
python3 scripts/seo_product_photos.py \
--image /workspace/my_mug_holder.jpg \
--description "A custom 3D printed mug holder with dragon design" \
--purpose "Keeps mugs organized on desk or kitchen, great gift" \
--audience "Office workers, coffee lovers, home office enthusiasts"
``
βοΈ Configuration
| Option | Short | Description | Default | |--------|-------|-------------|---------| | --image | -i | Path or URL to input image | (required) | | --description | -d | Description of the 3D model/print | (required) | | --purpose | -p | What the item is for/its use | (required) | | --audience | -a | Target audience/customers | (required) | | --num-photos | -n | Number of photos to generate | 5 | | --port | - | Download server port | 8766 | | --json | - | Output results as JSON | false |
π Tips & Best Practices
| Error | Solution |
|-------|----------|
| OPENROUTER_API_KEY not set | Configure in OpenClaw settings |
| Photo generation fails | Check WAVESPEED_API_KEY and credits |
| Port in use | Use --port to specify different port |