Vellocity Media Automation Tools¶
Scripts and templates for mechanizing the media growth strategy.
Quick Start¶
1. Daily Content Briefing (OpenClaw cron — 8 AM CT)¶
node daily-briefing.js # Today's briefing
node daily-briefing.js --day Tuesday # Preview a specific day
node daily-briefing.js --json # JSON for Telegram bot integration
Deploy to OpenClaw:
# Copy to OpenClaw workspace
scp daily-briefing.js content-calendar.json openclaw:/home/node/openclaw/media-tools/
# Add cron job (via OpenClaw admin or config)
# Schedule: 8 AM CT daily, isolated session
# Command: node /home/node/openclaw/media-tools/daily-briefing.js
# Action: Send output to Telegram
2. Content Buffer Monitor (OpenClaw cron — Mondays 9 AM CT)¶
node buffer-monitor.js # Full status report
node buffer-monitor.js --log youtube 2 # Log 2 YouTube videos published
node buffer-monitor.js --log tiktok 3 # Log 3 TikToks published
node buffer-monitor.js --set-start 2026-04-07 # Set campaign start date
node buffer-monitor.js --json # JSON for Telegram
node buffer-monitor.js --reset # New campaign
Deploy to OpenClaw:
scp buffer-monitor.js openclaw:/home/node/openclaw/media-tools/
# Cron: Mondays 9 AM CT, isolated session
# Command: node /home/node/openclaw/media-tools/buffer-monitor.js
# Also: OpenClaw can accept "log youtube 2" commands via Telegram to update counts
3. YouTube Script → Substack Draft (Claude dispatch)¶
claude dispatch -p "$(cat dispatch-substack.md)
---
SCRIPT:
$(cat path/to/youtube-script.txt)
PILLAR: Cloud Marketplace GTM Mastery
EPISODE_TITLE: Why 90% of Marketplace Listings Never Generate Pipeline
"
4. YouTube Script → SEO Metadata (Claude dispatch)¶
claude dispatch -p "$(cat dispatch-youtube-seo.md)
---
SCRIPT:
$(cat path/to/youtube-script.txt)
TARGET_KEYWORD: cloud marketplace GTM strategy
SERIES: Marketplace GTM Playbook
EPISODE_NUMBER: 1
PILLAR: Cloud Marketplace GTM Mastery
"
5. Full Repurposing Pipeline — 1 Script → 8 Assets (Claude cowork)¶
./repurpose-pipeline.sh path/to/script.txt \
"Cloud Marketplace GTM Mastery" \
"Why 90% of Marketplace Listings Never Generate Pipeline" \
"cloud marketplace GTM strategy"
Launches 8 parallel Claude agents. Output goes to ./output/<date>-<slug>/:
- substack-article.md — Newsletter draft
- youtube-seo.md — Title, description, tags, thumbnail brief
- clip-suggestions.md — 3-4 TikTok/Reels timestamps + captions
- linkedin-carousel.md — 8-slide carousel text
- instagram-carousel.md — 7-slide carousel text
- linkedin-polls-text-threads.md — Poll + 2 text posts + Threads versions
- thumbnail-brief.md — 3-element thumbnail spec
- podcast-show-notes.md — Episode notes + audiogram suggestions
6. LinkedIn → Threads Cross-Post Queue (OpenClaw cron — daily 10 AM CT)¶
node crosspost-threads.js --add "Your LinkedIn text post here"
node crosspost-threads.js --add-from-file posts.txt # --- separated
node crosspost-threads.js --list # Queue status
node crosspost-threads.js --dry-run # Preview
node crosspost-threads.js # Post next item
node crosspost-threads.js --mark-posted <id> # Manual confirmation
Environment variables (for API mode):
Without API credentials, the script outputs the post text for manual copy-paste and tracks status via --mark-posted.
Deploy to OpenClaw:
scp crosspost-threads.js openclaw:/home/node/openclaw/media-tools/
# Cron: Daily 10 AM CT (Threads rush hour per Metricool 2026)
# Command: node /home/node/openclaw/media-tools/crosspost-threads.js
File Overview¶
| File | Purpose | Runs on |
|---|---|---|
content-calendar.json |
Weekly schedule, cadence targets, milestones | Data file |
daily-briefing.js |
Daily "what to post today" briefing | OpenClaw (8 AM cron) |
buffer-monitor.js |
Track published vs. target cadence | OpenClaw (Mon 9 AM cron) |
dispatch-substack.md |
Prompt template: script → Substack article | Claude dispatch |
dispatch-youtube-seo.md |
Prompt template: script → SEO metadata | Claude dispatch |
repurpose-pipeline.sh |
1 script → 8 assets via parallel agents | Local (claude cowork) |
crosspost-threads.js |
Queue-based LinkedIn → Threads cross-posting | OpenClaw (10 AM cron) |
email-monitor.js |
Poll agent01@vell.ai inbox via IMAP | OpenClaw (every 5 min cron) |
OpenClaw Cron Summary¶
| Job | Schedule | Command |
|---|---|---|
| Daily briefing | 8 AM CT, 7 days/week | node media-tools/daily-briefing.js |
| Buffer monitor | Monday 9 AM CT | node media-tools/buffer-monitor.js |
| Threads cross-post | Daily 10 AM CT | node media-tools/crosspost-threads.js |
| Email monitor | Every 5 minutes | node media-tools/email-monitor.js |
7. Email Monitor (OpenClaw cron — every 5 minutes)¶
node email-monitor.js # Check for unread emails
node email-monitor.js --summary # Quick inbox status
node email-monitor.js --json # JSON for Telegram
node email-monitor.js --mark-read <uid> # Mark a message as read
node email-monitor.js --since 48h # Emails from last 48 hours
node email-monitor.js --test # Test IMAP connection
Environment variables:
export GMAIL_IMAP_USER=agent01@vell.ai
export GMAIL_IMAP_PASSWORD=<app-password> # Google App Password, NOT account password
Setup:
1. Enable IMAP: Google Workspace Admin > Apps > Gmail > IMAP access > ON
2. Enable 2-Step Verification for agent01@vell.ai
3. Generate App Password: myaccount.google.com > Security > App Passwords
4. Install dependency on OpenClaw: npm install imapflow
Deploy to OpenClaw:
scp email-monitor.js openclaw:/home/node/openclaw/media-tools/
# Cron: Every 5 minutes
# Command: node /home/node/openclaw/media-tools/email-monitor.js
# Action: Send output to Telegram (only when new emails found)
Integration with Repurpose Pipeline¶
The repurpose pipeline's linkedin-polls-text-threads.md output includes Threads-ready text.
Feed it directly into the cross-post queue: