343 lines
7.8 KiB
Markdown
343 lines
7.8 KiB
Markdown
# Postiz CLI - Command Line Guide
|
|
|
|
## New Syntax: Multiple `-c` and `-m` Flags
|
|
|
|
The CLI now supports a much more intuitive syntax for creating posts with comments that have their own media.
|
|
|
|
## Basic Syntax
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "content" -m "media" \ # Can be repeated multiple times
|
|
-c "content" -m "media" \ # Each pair = one post/comment
|
|
-i "integration-id"
|
|
```
|
|
|
|
### How It Works
|
|
|
|
- **First `-c`**: Main post content
|
|
- **Subsequent `-c`**: Comments/replies
|
|
- **Each `-m`**: Media for the corresponding `-c`
|
|
- `-m` is optional (text-only posts/comments)
|
|
- Order matters: `-c` and `-m` are paired in order
|
|
|
|
## Examples
|
|
|
|
### 1. Simple Post
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Hello World!" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
### 2. Post with Multiple Images
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Check out these photos!" \
|
|
-m "photo1.jpg,photo2.jpg,photo3.jpg" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Result:**
|
|
- Main post with 3 images
|
|
|
|
### 3. Post with Comments, Each Having Their Own Media
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Main post 🚀" \
|
|
-m "main-image1.jpg,main-image2.jpg" \
|
|
-c "First comment 📸" \
|
|
-m "comment1-image.jpg" \
|
|
-c "Second comment 🎨" \
|
|
-m "comment2-img1.jpg,comment2-img2.jpg" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Result:**
|
|
- Main post with 2 images
|
|
- First comment (posted 5s later) with 1 image
|
|
- Second comment (posted 10s later) with 2 images
|
|
|
|
### 4. Comments Can Contain Semicolons! 🎉
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Main post" \
|
|
-c "First comment; with a semicolon!" \
|
|
-c "Second comment; with multiple; semicolons; works fine!" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**No escaping needed!** Each `-c` is a separate argument, so special characters work perfectly.
|
|
|
|
### 5. Twitter Thread
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "🧵 Thread about X (1/5)" \
|
|
-m "thread1.jpg" \
|
|
-c "Key point 1 (2/5)" \
|
|
-m "thread2.jpg" \
|
|
-c "Key point 2 (3/5)" \
|
|
-m "thread3.jpg" \
|
|
-c "Key point 3 (4/5)" \
|
|
-m "thread4.jpg" \
|
|
-c "Conclusion 🎉 (5/5)" \
|
|
-m "thread5.jpg" \
|
|
-d 2000 \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Result:** 5-part thread with 2-second delays between tweets
|
|
|
|
### 6. Mix: Some with Media, Some Without
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Amazing sunset! 🌅" \
|
|
-m "sunset.jpg" \
|
|
-c "Taken at 6:30 PM" \
|
|
-c "Location: Santa Monica Beach" \
|
|
-c "Camera: iPhone 15 Pro" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Result:**
|
|
- Main post with 1 image
|
|
- 3 text-only comments
|
|
|
|
### 7. Multi-Platform with Same Content
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Big announcement! 🎉" \
|
|
-m "announcement.jpg" \
|
|
-c "More details coming soon..." \
|
|
-i "twitter-123,linkedin-456,facebook-789"
|
|
```
|
|
|
|
**Result:** Same post + comment posted to all 3 platforms
|
|
|
|
### 8. Scheduled Post with Follow-ups
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Product launching today! 🚀" \
|
|
-m "product-hero.jpg,product-features.jpg" \
|
|
-c "Special launch offer: 50% off!" \
|
|
-m "discount-banner.jpg" \
|
|
-c "Limited to first 100 customers!" \
|
|
-s "2024-12-25T09:00:00Z" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Result:** Scheduled main post with 2 follow-up comments
|
|
|
|
### 9. Product Tutorial
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Tutorial: How to Use Feature X 📖" \
|
|
-m "tutorial-intro.jpg" \
|
|
-c "Step 1: Open the settings menu" \
|
|
-m "step1-screenshot.jpg" \
|
|
-c "Step 2: Toggle the feature on" \
|
|
-m "step2-screenshot.jpg" \
|
|
-c "Step 3: Customize your preferences" \
|
|
-m "step3-screenshot.jpg" \
|
|
-c "That's it! You're all set 🎉" \
|
|
-d 3000 \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
## Options Reference
|
|
|
|
| Flag | Alias | Description | Multiple? |
|
|
|------|-------|-------------|-----------|
|
|
| `--content` | `-c` | Post/comment content | ✅ Yes |
|
|
| `--media` | `-m` | Comma-separated media URLs | ✅ Yes |
|
|
| `--integrations` | `-i` | Comma-separated integration IDs | ❌ No |
|
|
| `--schedule` | `-s` | ISO 8601 date (schedule post) | ❌ No |
|
|
| `--delay` | `-d` | Delay between comments (minutes) | ❌ No |
|
|
| `--shortLink` | - | Use URL shortener | ❌ No |
|
|
| `--json` | `-j` | Load from JSON file | ❌ No |
|
|
|
|
## How `-c` and `-m` Pair Together
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "First content" -m "first-media.jpg" \ # Pair 1 → Main post
|
|
-c "Second content" -m "second-media.jpg" \ # Pair 2 → Comment 1
|
|
-c "Third content" -m "third-media.jpg" \ # Pair 3 → Comment 2
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Pairing logic:**
|
|
- 1st `-c` pairs with 1st `-m` (if provided)
|
|
- 2nd `-c` pairs with 2nd `-m` (if provided)
|
|
- 3rd `-c` pairs with 3rd `-m` (if provided)
|
|
- If no `-m` for a `-c`, it's text-only
|
|
|
|
## Delay Between Comments
|
|
|
|
Use `-d` or `--delay` to set the delay (in minutes) between comments:
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Main post" \
|
|
-c "Comment 1" \
|
|
-c "Comment 2" \
|
|
-d 10 \ # 10 minutes between each
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Default:** 0 (no delay)
|
|
|
|
## Comparison: Old vs New Syntax
|
|
|
|
### ❌ Old Way (Limited)
|
|
|
|
```bash
|
|
# Could only do simple comments without custom media
|
|
postiz posts:create \
|
|
-c "Main post" \
|
|
--comments "Comment 1;Comment 2;Comment 3" \
|
|
--image "main-image.jpg" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Problems:**
|
|
- Comments couldn't have their own media
|
|
- Semicolons in content would break it
|
|
- Less intuitive
|
|
|
|
### ✅ New Way (Flexible)
|
|
|
|
```bash
|
|
postiz posts:create \
|
|
-c "Main post" -m "main.jpg" \
|
|
-c "Comment 1; with semicolon!" -m "comment1.jpg" \
|
|
-c "Comment 2" -m "comment2.jpg" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
**Benefits:**
|
|
- ✅ Each comment can have its own media
|
|
- ✅ Semicolons work fine
|
|
- ✅ More readable
|
|
- ✅ More flexible
|
|
|
|
## When to Use JSON vs Command Line
|
|
|
|
### Use Command Line (`-c` and `-m`) When:
|
|
- ✅ Same content for all integrations
|
|
- ✅ Simple, straightforward posts
|
|
- ✅ Quick one-off posts
|
|
- ✅ Scripting with dynamic content
|
|
|
|
### Use JSON (`--json`) When:
|
|
- ✅ Different content per platform
|
|
- ✅ Complex settings or metadata
|
|
- ✅ Reusable post templates
|
|
- ✅ Very long or formatted content
|
|
|
|
## Tips for AI Agents
|
|
|
|
### Generate Commands Programmatically
|
|
|
|
```bash
|
|
# Generate a thread command with multiple tweets
|
|
postiz posts:create \
|
|
-c "Tweet 1/3" \
|
|
-m "img1.jpg" \
|
|
-c "Tweet 2/3" \
|
|
-m "img2.jpg" \
|
|
-c "Tweet 3/3" \
|
|
-m "img3.jpg" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
### Escape Special Characters
|
|
|
|
In bash, you may need to escape some characters:
|
|
|
|
```bash
|
|
# Single quotes prevent interpolation
|
|
postiz posts:create \
|
|
-c 'Message with $variables and "quotes"' \
|
|
-i "twitter-123"
|
|
|
|
# Or use backslashes
|
|
postiz posts:create \
|
|
-c "Message with \$variables and \"quotes\"" \
|
|
-i "twitter-123"
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
### Missing Integration
|
|
|
|
```bash
|
|
postiz posts:create -c "Post" -m "img.jpg"
|
|
# ❌ Error: --integrations is required when not using --json
|
|
```
|
|
|
|
**Fix:** Add `-i` flag
|
|
|
|
### No Content
|
|
|
|
```bash
|
|
postiz posts:create -i "twitter-123"
|
|
# ❌ Error: Either --content or --json is required
|
|
```
|
|
|
|
**Fix:** Add at least one `-c` flag
|
|
|
|
### Mismatched Count (OK!)
|
|
|
|
```bash
|
|
# This is fine! Extra -m flags are ignored
|
|
postiz posts:create \
|
|
-c "Post 1" -m "img1.jpg" \
|
|
-c "Post 2" \
|
|
-c "Post 3" -m "img3.jpg" \
|
|
-i "twitter-123"
|
|
|
|
# Result:
|
|
# - Post 1 with img1.jpg
|
|
# - Post 2 with no media
|
|
# - Post 3 with img3.jpg
|
|
```
|
|
|
|
## Full Example: Product Launch
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
|
|
export POSTIZ_API_KEY=your_key
|
|
|
|
postiz posts:create \
|
|
-c "🚀 Launching ProductX today!" \
|
|
-m "https://cdn.example.com/hero.jpg,https://cdn.example.com/features.jpg" \
|
|
-c "🎯 Key Features:\n• AI-powered\n• Cloud-native\n• Open source" \
|
|
-m "https://cdn.example.com/features-detail.jpg" \
|
|
-c "💰 Special launch pricing: 50% off for early adopters!" \
|
|
-m "https://cdn.example.com/pricing.jpg" \
|
|
-c "🔗 Get started: https://example.com/productx" \
|
|
-s "2024-12-25T09:00:00Z" \
|
|
-d 3600000 \
|
|
-i "twitter-123,linkedin-456,facebook-789"
|
|
|
|
echo "✅ Product launch scheduled!"
|
|
```
|
|
|
|
## See Also
|
|
|
|
- **EXAMPLES.md** - JSON file examples
|
|
- **SKILL.md** - AI agent patterns
|
|
- **README.md** - Full documentation
|
|
- **examples/*.json** - Template files
|