Nodes/MLTask_ComfyUI/SocialMan Poster
ComfyUI Node

SocialMan Poster

The node that actually hits Post — one token, eight networks

By misterjoessef·Created 2 years ago·Updated 2 years ago· 1
SocialMan Poster
  • token
  • post_data
  • tiktok_data
  • youtube_data
  • facebook_data
  • instagram_data
  • twitter_data
  • linkedin_data
  • pinterest_data
  • post_link
◄media_file_pathuse media to poster node►
◄show_status_bannerfalse►
◄prepare_onlyfalse►

This is the node you've actually been looking for. Every other node in the MLTask/SocialMan suite builds a data dictionary - captions, titles, which account to target. SocialManPoster is the one that talks to the network and makes the post real. You wire your image or video in, feed it the per-platform data dicts, and it publishes to Facebook, Instagram, Twitter, LinkedIn, Pinterest, TikTok, YouTube, and the generic post feed in one shot.

Here's the part to get straight before you start: this is not a local posting tool, and the name is not a lie about it calling an API - it does, and you need a token. The node is a thin client to MLTask's cloud service. When you run it, it POSTs to https://comfy.api.mltask.com/v1/create-post with your media's file path and every data dict you attached. The MLTask backend - not your machine - talks to each platform's real API, hands back a post ID and pre-signed upload URLs, and the node streams your image or video (plus thumbnails) up to those URLs before calling /complete-post to actually publish. If you're offline, nothing happens. If you don't have a SocialMan subscription, the backend rejects you with a user_not_subscribed error. It's a paid SaaS with a free token, not a forever-free thing.

What you set

The token input is the whole ballgame, and it's a custom widget, not a text field. The node shows you three buttons: Set Token, Set Password, and Get New Token. The last one opens mltask.com/user/comfyui, where you generate a token. The token is a 32-character hex string, stored in a socialman.json file inside the pack's directory - that's why the account-dropdown nodes (Facebook, Instagram, Pinterest, YouTube) stay stuck on "Refresh or set the token" until you do this. The password is a separate 4+-character PIN you invent; think of it as the local trigger you pull to authorize each post. Both are sent with every request, and neither belongs in a shared workflow. That default text is blunt for a reason: don't paste your token into a workflow you're going to share.

The inputs that matter after that:

  • media_file_path - a STRING file path. Easiest source is SocialManMediaToPoster, which turns an IMAGE tensor or a Video Helper Suite file into a real path for you.
  • post_data - title + description from SocialManPostData, the generic fallback when you don't want platform-specific settings.
  • The seven platform dicts - facebook_data, instagram_data, twitter_data, linkedin_data, pinterest_data, tiktok_data, youtube_data - each produced by its matching PosterData node. Connect only the ones you want to post to.
  • show_status_banner - toggles pop-up progress ("Uploading main file…") so you're not staring at a frozen graph.
  • prepare_only - uploads and stages the post but skips the final publish. Genuinely handy for testing a workflow without spamming your followers.

The single output is post_link (a STRING): the URL of the published post, which a success dialog also shows you.

Where people get burned

  • GIFs hard-fail. The code raises "Gif files not supported at the moment." Convert to a video or a static image first.
  • YouTube is video-only. If your media is an image, the node silently empties the YouTube data - the YouTube API can't take image posts. The Facebook, Instagram, and Pinterest thumbnails get dropped too, because they only serve as video covers.
  • Thumbnails only matter for video. Wire yt_thumbnail / fb_thumbnail / insta_thumbnail / pin_thumbnail when your media is a video; for images they're ignored.
  • Errors arrive as dialog messages, not console spam. "No token provided," "Token expired," "Wrong password," and "You are not subscribed" all map to specific hints. The generic "something went wrong, make sure the video is valid" one usually does mean the video file is corrupt or a format the backend won't take.

Installing it

The pack installs once, the normal way: ComfyUI Manager, search MLTask_ComfyUI, install, restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/misterjoessef/MLTask_ComfyUI

Its requirements.txt is just requests and aiohttp - light. The pack does use ffprobe (from ffmpeg) to time TikTok video covers, so keep ffmpeg on PATH. This is a small, low-traffic pack with a video tutorial linked from the README; if you hit something odd, that tutorial is more likely to save you than a search - there's almost no forum chatter about it yet.

CategoryMLTask/SocialMan

Inputs (12)

NameTypeDefaultDescription
tokenSM_TOKENput your token here and DO NOT SHARE IT WITH ANYONE—
media_file_pathoptSTRINGuse media to poster node—
post_dataoptMLT_SM_POST_DATA—
tiktok_dataoptMLT_SM_TIKTOK_DATA—
youtube_dataoptMLT_SM_YOUTUBE_DATA—
facebook_dataoptMLT_SM_FACEBOOK_DATA—
instagram_dataoptMLT_SM_INSTAGRAM_DATA—
twitter_dataoptMLT_SM_TWITTER_DATA—
linkedin_dataoptMLT_SM_LINKEDIN_DATA—
pinterest_dataoptMLT_SM_PINTEREST_DATA—
show_status_banneroptBOOLEANfalse—
prepare_onlyoptBOOLEANfalse—

Outputs (1)

NameTypeDescription
post_linkSTRING—