SocialMan Poster
The node that actually hits Post — one token, eight networks
- token
- post_data
- tiktok_data
- youtube_data
- facebook_data
- instagram_data
- twitter_data
- linkedin_data
- pinterest_data
- post_link
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_thumbnailwhen 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.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| token | SM_TOKEN | put your token here and DO NOT SHARE IT WITH ANYONE | — |
| media_file_pathopt | STRING | use media to poster node | — |
| post_dataopt | MLT_SM_POST_DATA | — | |
| tiktok_dataopt | MLT_SM_TIKTOK_DATA | — | |
| youtube_dataopt | MLT_SM_YOUTUBE_DATA | — | |
| facebook_dataopt | MLT_SM_FACEBOOK_DATA | — | |
| instagram_dataopt | MLT_SM_INSTAGRAM_DATA | — | |
| twitter_dataopt | MLT_SM_TWITTER_DATA | — | |
| linkedin_dataopt | MLT_SM_LINKEDIN_DATA | — | |
| pinterest_dataopt | MLT_SM_PINTEREST_DATA | — | |
| show_status_banneropt | BOOLEAN | false | — |
| prepare_onlyopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| post_link | STRING | — |