Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ MODAL_LTX2_ENDPOINT_URL= # Modal self-hosted LTX-2 endpoint (optional)
PEXELS_API_KEY= # Pexels stock footage/images (free)
PIXABAY_API_KEY= # Pixabay stock footage/images (free)

# --- Social Publishing ---
UPLOADPOST_API_KEY= # Publish to 11 platforms (IG, TikTok, YT, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, FB, Google Business)
# Free tier: 10 uploads/month, no credit card required
# Get one at https://upload-post.com

# --- Analysis ---
HF_TOKEN= # HuggingFace token — enables speaker diarization in transcriber

Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/animated-explainer.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,8 @@ stages:
- proposal_packet
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/animation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ stages:
- script
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/avatar-spokesperson.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,8 @@ stages:
- script
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/cinematic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,8 @@ stages:
- script
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/clip-factory.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,8 @@ stages:
- brief
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/hybrid.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,8 @@ stages:
- script
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/localization-dub.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,8 @@ stages:
- script
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/podcast-repurpose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,8 @@ stages:
- brief
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/screen-demo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,8 @@ stages:
- brief
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
3 changes: 2 additions & 1 deletion pipeline_defs/talking-head.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,8 @@ stages:
- final_review
produces:
- publish_log
tools_available: []
tools_available:
- uploadpost_publisher
checkpoint_required: true
human_approval_default: true
review_focus:
Expand Down
2 changes: 2 additions & 0 deletions skills/INDEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ Key capability families to look for in the output:
| `subtitle` | — | Pure Python |
| `avatar` | — | Local GPU models |
| `video_post` | — | FFmpeg-based local tools |
| `social_publishing` | — | Upload-Post API (11 platforms) |

### Adding New Tools

Expand All @@ -82,6 +83,7 @@ Key capability families to look for in the output:
| WhisperX | `core/whisperx.md` | Transcription with word-level timestamps | `speech-to-text` |
| Subtitle Sync | `core/subtitle-sync.md` | Subtitle timing and alignment | `remotion-best-practices` |
| Color Grading | `core/color-grading.md` | FFmpeg color profiles, LUT workflow, accessibility | `ffmpeg` |
| Social Publishing | `core/social-publishing.md` | Publish to 11 social platforms via Upload-Post API | — |

## Creative Skills

Expand Down
68 changes: 68 additions & 0 deletions skills/core/social-publishing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Social Publishing via Upload-Post

## When To Use

When the pipeline's publish stage needs to distribute the final video (or photos/text) to one or more social media platforms. Upload-Post replaces manual export-and-upload workflows with a single API call.

## Tool

`uploadpost_publisher` — registered in `tools/publishers/uploadpost_publisher.py`

| Field | Value |
|-------|-------|
| Tier | publish |
| Capability | `social_publishing` |
| Runtime | API |
| Env var | `UPLOADPOST_API_KEY` |

## Supported Platforms

Instagram, TikTok, YouTube, LinkedIn, Facebook, X (Twitter), Threads, Pinterest, Bluesky, Reddit, Google Business Profile.

## How It Works

1. The user connects social accounts through the Upload-Post dashboard (two clicks per account — no app creation, no developer tokens, no OAuth flows to build).
2. A single API key handles all connected platforms.
3. The tool sends the rendered video (or photos) to `POST /api/upload_videos` (or `/upload_photos`, `/upload_text`) with the target platforms in one request.
4. Upload-Post handles platform-specific formatting, aspect ratios, and API requirements.

## Integration With The Publish Stage

During the `publish` pipeline step:

```python
from tools.publishers.uploadpost_publisher import UploadPostPublisher

publisher = UploadPostPublisher()
result = publisher.execute({
"video_path": "pipeline/compose/final.mp4",
"platforms": ["youtube", "tiktok", "instagram"],
"profile_username": "my_profile",
"title": "My OpenMontage Video",
"description": "Created with OpenMontage",
})
```

The returned `ToolResult.data` maps directly to `publish_log` schema entries:

| ToolResult field | publish_log field |
|------------------|-------------------|
| `results[].platform` | `entries[].platform` |
| `results[].post_url` | `entries[].url` |
| `results[].platform_post_id` | `entries[].video_id` |

## Scheduling & Queue

- Set `scheduled_date` (ISO-8601) to schedule for a specific time.
- Set `add_to_queue: true` to auto-schedule to the next available queue slot.
- Queue slots are configurable per-profile in the Upload-Post dashboard.

## Cost

Free tier: 10 uploads/month across all platforms. No credit card required.

## Common Pitfalls

- Forgetting to set `profile_username` — this identifies which connected accounts to use.
- Not including `title` for YouTube or Reddit uploads (required by those platforms).
- Sending a vertical video to platforms that expect landscape without setting aspect ratio metadata in the render stage.
4 changes: 4 additions & 0 deletions skills/pipelines/animation/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ Store in `publish_log.metadata`:
- exports are labeled by purpose and platform,
- the package is usable without extra manual work.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Writing generic metadata that ignores the animation style.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/avatar-spokesperson/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ If the avatar path has limitations such as visible lip-sync risk, retain that no
- poster frame or thumbnail concept features the presenter cleanly,
- review notes stay attached to the package.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Mixing hero and derivative exports without clear naming.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/cinematic/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ Store in `publish_log.metadata`:
- metadata fits the tone,
- the package is usable without manual cleanup.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Mixing teaser and hero outputs without clear naming.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/clip-factory/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ Store in `publish_log.metadata`:
- export folders are usable without extra cleanup,
- the batch catalog clearly links ranking, file paths, and publishing intent.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Publishing the whole batch on the same day.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/explainer/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ If any dimension scores below 3, revise.

Validate the publish_log against the schema and persist via checkpoint.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- **Generic titles**: "Video About X" loses to "X Explained in 60 Seconds" every time. Be specific and compelling.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/hybrid/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ Recommended metadata keys:
- export folders are organized by purpose,
- the package is ready to use without manual cleanup.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Hiding which output is the hero cut.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/localization-dub/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ If a language output has pronunciation caveats, timing warnings, or missing lip
- supporting text assets are present,
- warnings and review notes are not lost.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Shipping localized videos without the matching subtitle or transcript files.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/podcast-repurpose/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ Recommended metadata keys:
- copy matches the platform,
- the release order reflects actual clip strength.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Publishing clips without clear episode references.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/screen-demo/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ For developer or product-demo content, also package:
- export folders are clean and reusable,
- copy is tailored to the platform instead of duplicated.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.

## Common Pitfalls

- Publishing with generic titles that omit the actual software or task.
Expand Down
4 changes: 4 additions & 0 deletions skills/pipelines/talking-head/publish-director.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,7 @@ Document the publish event with platform, status (draft), and export path.
### Step 6: Submit

Validate the publish_log against the schema and persist via checkpoint.

## Direct Publishing (Optional)

If `UPLOADPOST_API_KEY` is set, use the `uploadpost_publisher` tool to publish the final video directly to social platforms (Instagram, TikTok, YouTube, LinkedIn, X, Threads, Pinterest, Bluesky, Reddit, Facebook, Google Business) instead of only exporting locally. See `skills/core/social-publishing.md` for integration details.
Loading