clipbait 1.9.0 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +2 -2
  2. package/index.js +6 -6
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -56,8 +56,8 @@ Seven tools are available to any agent:
56
56
  | `start_live_autoclip` | Auto-clip a **live** Twitch stream continuously (`channelUrl`, optional `cadenceMin`). Pro plan. |
57
57
  | `probe_video` | Get a video's duration before clipping (`url`). |
58
58
  | `download_clip` | Save a finished clip to your `~/Downloads/` folder and return the path (`jobId`, `clipIndex` 1-based). Max 500 MB. |
59
- | `list_social_accounts` | Show which accounts are connected for posting (X, TikTok, YouTube, Facebook). |
60
- | `schedule_post` | Schedule a clip to post on connected socials at a future time (`clipUrl`, `platforms`, `scheduledTime`, `caption`). |
59
+ | `list_social_accounts` | Show connected accounts. Posting is X/Twitter only today (TikTok, Facebook, Instagram coming soon). |
60
+ | `schedule_post` | Schedule a clip to post on X at a future time (`clipUrl`, `platforms: ["x"]`, `scheduledTime`, `caption`). |
61
61
  | `list_scheduled_posts` / `cancel_scheduled_post` | Review or cancel scheduled posts. |
62
62
 
63
63
  ## Terminal usage
package/index.js CHANGED
@@ -116,7 +116,7 @@ Guide them like a friendly assistant, conversationally and fast:
116
116
  4. When complete, list each finished clip as a numbered list: hook and URL.
117
117
  5. Then offer next steps and act on them by calling the tools:
118
118
  - \`download_clip\` — save a clip to ~/Downloads.
119
- - Post to social: call \`list_social_accounts\` to see connected platforms, then ask which platform(s), when to post (offer Today / Tomorrow / This weekend / a specific time), and the caption (offer to draft one). Show the plan (clip · platform · time · caption) and CONFIRM before calling \`schedule_post\` for each clip. Use \`list_scheduled_posts\` / \`cancel_scheduled_post\` to review or undo.
119
+ - Post to X (Twitter) — currently the only supported platform (TikTok, Facebook, Instagram coming soon). Call \`list_social_accounts\` to confirm X is connected, then ask when to post (offer Today / Tomorrow / This weekend / a specific time) and the caption (offer to draft one). Show the plan (clip · time · caption) and CONFIRM before calling \`schedule_post\` for each clip. Use \`list_scheduled_posts\` / \`cancel_scheduled_post\` to review or undo.
120
120
  - Regenerate at a different aspect ratio, pull more clips, or \`probe_video\` another URL.
121
121
  Keep it snappy. Don't ask for confirmation to start clipping unless the URL is missing — but always confirm before posting to social.
122
122
  `;
@@ -246,7 +246,7 @@ async function runMcpServer() {
246
246
 
247
247
  server.tool("generate_clips", "Generate short vertical viral clips from a long video (YouTube, Twitch VOD, Rumble, Ganjing). Returns a job id; poll get_job.",
248
248
  { videoUrl: z.string(), aspectRatio: z.enum(["9:16", "16:9"]).optional(), maxClips: z.number().int().min(1).max(20).optional() },
249
- async (a) => { try { const d = await api("POST", "/clips/generate", { videoUrl: a.videoUrl, aspectRatio: a.aspectRatio || "9:16", maxClips: a.maxClips || 9 }); return ok(`Clip job started: ${d.jobId}${d.duplicate ? " (duplicate of a recent job no extra credits)" : ""}. Poll get_job("${d.jobId}").`); } catch (e) { return fail(e); } });
249
+ async (a) => { try { const d = await api("POST", "/clips/generate", { videoUrl: a.videoUrl, aspectRatio: a.aspectRatio || "9:16", maxClips: a.maxClips || 9 }); return ok(`Clip job started: ${d.jobId}${d.duplicate ? " (duplicate of a recent job, no extra credits)" : ""}. Automatically call get_job("${d.jobId}") every 60 seconds until status is "complete", then share the download links. Do not ask whether to keep polling. Just keep checking on your own. Jobs take about 10 to 30 minutes.`); } catch (e) { return fail(e); } });
250
250
 
251
251
  server.tool("get_job", "Check a clip job's status and get finished clip URLs.", { jobId: z.string() },
252
252
  async (a) => { try { const d = await api("GET", "/clips/status/" + a.jobId); const clips = (d.clips || []).map((x, i) => `#${i + 1} ${x.hook || ""} — ${x.url || "(rendering)"}`).join("\n"); return ok(`Status: ${d.status} (${d.progress ?? 0}%)\n${clips || "No clips yet."}`); } catch (e) { return fail(e); } });
@@ -279,11 +279,11 @@ async function runMcpServer() {
279
279
  } catch (e) { return fail(e); }
280
280
  });
281
281
 
282
- server.tool("list_social_accounts", "List which social accounts are connected for posting (X, TikTok, YouTube, Facebook). Check before scheduling.", {},
283
- async () => { try { const d = await api("GET", "/auth/social/status"); const map = { twitter: "x", tiktok: "tiktok", youtube: "youtube", facebook: "facebook" }; const c = Object.entries(d || {}).filter(([, v]) => v && v.connected).map(([k]) => map[k] || k); return ok(c.length ? `Connected for posting: ${c.join(", ")}` : "No social accounts connected yet. Connect them at https://app.clipbait.ai/me."); } catch (e) { return fail(e); } });
282
+ server.tool("list_social_accounts", "List connected social accounts. Posting is currently supported on X (Twitter) only — TikTok, Facebook, Instagram coming soon.", {},
283
+ async () => { try { const d = await api("GET", "/auth/social/status"); const x = d?.twitter?.connected; return ok(`X (Twitter): ${x ? `connected${d.twitter.username ? ` as @${d.twitter.username}` : ""}` : "not connected connect at https://app.clipbait.ai/me"}.\nTikTok, Facebook, Instagram: coming soon.`); } catch (e) { return fail(e); } });
284
284
 
285
- server.tool("schedule_post", "Schedule a finished clip to post on connected social accounts at a future time. Get clip URLs from get_job first; confirm the platform is connected via list_social_accounts.",
286
- { clipUrl: z.string(), platforms: z.array(z.enum(["x", "tiktok", "youtube", "facebook"])).min(1), scheduledTime: z.string().describe("Future ISO 8601 time"), caption: z.string().optional(), clipTitle: z.string().optional(), clipJobId: z.string().optional(), clipIndex: z.number().int().optional() },
285
+ server.tool("schedule_post", "Schedule a finished clip to post on X (Twitter) at a future time. Get clip URLs from get_job first; confirm X is connected via list_social_accounts. NOTE: only X posting is live today — TikTok, Facebook, Instagram coming soon.",
286
+ { clipUrl: z.string(), platforms: z.array(z.enum(["x"])).min(1).describe("only \"x\" supported today"), scheduledTime: z.string().describe("Future ISO 8601 time"), caption: z.string().optional(), clipTitle: z.string().optional(), clipJobId: z.string().optional(), clipIndex: z.number().int().optional() },
287
287
  async (a) => { try { const d = await api("POST", "/scheduled-posts", { clipUrl: a.clipUrl, platforms: a.platforms, scheduledTime: a.scheduledTime, caption: a.caption || "", clipTitle: a.clipTitle, clipJobId: a.clipJobId, clipIndex: a.clipIndex }); return ok(`Scheduled to ${a.platforms.join(", ")} for ${a.scheduledTime} (post ${d.scheduledPost?._id || "?"}).`); } catch (e) { return fail(e); } });
288
288
 
289
289
  server.tool("list_scheduled_posts", "List the user's scheduled/posted social posts.", { status: z.enum(["pending", "posted", "failed", "cancelled"]).optional() },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clipbait",
3
- "version": "1.9.0",
3
+ "version": "1.9.2",
4
4
  "description": "Clipbait CLI + MCP server — turn any video into viral clips, and auto-clip live streams, from your terminal or any AI agent.",
5
5
  "bin": { "clipbait": "index.js" },
6
6
  "type": "commonjs",