Skip to content

social-publisher

Publish content to social media platforms. YouTube and Instagram use PEP 723 API scripts runnable with uv run. LinkedIn and Substack use Playwright browser automation (no API registration needed).

  • Area: Marketing
  • Category: marketing seo
  • Level: expert
  • Input: url
  • Output: document
  • Setup: config, api-key, mcp
  • Roles: Head of Marketing, Content Manager

Publishes content to YouTube, LinkedIn, Substack, and Instagram (own Business account via the Graph API).

How you ask

  • “Set a custom thumbnail on my YouTube video”
  • “Post this to LinkedIn”
  • “Schedule LinkedIn post for Monday”
  • “Publish this article to Substack”
  • “List my Substack drafts”
  • “Post these three images to my Instagram as a carousel”

Inputs

  • operator-profile — Operator profile — personal-scope publishing identity.
  • profile — Company or client profile — entity and relationship context.
  • video-file — Video file to upload
  • channel — YouTube channel handle (e.g. @thirdbrain-bob)
  • image — Source image for thumbnail
  • text — Overlay text for the thumbnail
  • video-id — ID of the existing video
  • channel — YouTube channel handle with the @ prefix; selects the cached per-channel OAuth token
  • privacy — Target privacyStatus; always passed explicitly because the script defaults to public (public | unlisted | private)
  • content — Markdown file with post content and optional frontmatter (title, image, visibility)
  • content — Markdown file with schedule datetime in frontmatter
  • caption — Post caption/hook text (accompanies the carousel)
  • carousel-pdf — Flattened/rasterized PDF deck, plain ASCII filename (render slides to PNG then reassemble into an image-only PDF — do not upload a vector-text print-to-PDF export)
  • article — Markdown file with frontmatter (title, subtitle, tags, audience, status)
  • content — Plain text or short markdown content for the note
  • request — List posts request
  • draft-title — Title of the draft to delete
  • account — Instagram handle with the @ prefix; selects the stored Graph API credentials
  • images — One image (--image) or 2 to 20 images (--carousel)
  • caption — Caption text, or a caption file (--caption-file)
  • video_path — Path to rendered MP4
  • title — Video title
  • description_path — Path to description .md file (from yt-description-seo)
  • tags — YouTube tags
  • thumbnail_path — Thumbnail PNG path
  • quartz_vault_path — Root path of the Quartz content directory (default: read from thirdbrain_config.json under the resources root, resource.root)
  • topic_tags — Topic tags for the local video registry

Outputs

  • Graph API media ID of the published post
  • JPEG saved beside the source image by default; use --output to place it with the video's project assets when the source image is elsewhere.
  • Published YouTube video URL
  • Quartz note with the YouTube embed, dated by the video publish date. The scratch path is the fallback when no Quartz content directory is configured.
  • The video's privacyStatus as returned by the API after the change
  • article (markdown)
  • confirmation (markdown)
  • conversation
  • note (markdown)
  • post-list (markdown)
  • prefer a permanent directory)
  • registry-entry (json)
  • video (video)
  • {quartz_content_path}/ai-news/{YYYY-MM-DD}.md
  • {resource.root}/thirdbrain_videos.json
  • {source-image-dir}/{source-image-stem}-thumbnail.jpg