@pixeldojo/mcp 0.23.0 → 0.25.0

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.
package/README.md CHANGED
@@ -55,7 +55,7 @@ Restart your agent. You'll see 23 new tools.
55
55
  | `pixeldojo_episode` | Faceless Studio: a narrated faceless video episode from a topic (script, scenes, voice, music, export). |
56
56
  | `pixeldojo_ad` | Marketing Studio: a product video ad from a URL or product images. |
57
57
  | `pixeldojo_upscale` | Enhance any image (up to 16×) or video (up to 4K). |
58
- | `pixeldojo_overlay` | Ad text layouts on a video: hook title, lower-third callout, review card, progress bar, offer badge and a branded end card with logo. Exact text, your brand color, clear of the platform UI. |
58
+ | `pixeldojo_overlay` | Ad text layouts on a video: hook title, lower-third callout, review card, progress bar, countdown timer, price tag, offer badge and a branded end card with logo. Exact text, your brand color, clear of the platform UI. |
59
59
  | `pixeldojo_caption` | Animated word-by-word captions on a video with speech, placed clear of the TikTok/Reels/Shorts buttons. Pop, Highlighter or Clean, any highlight color. |
60
60
  | `pixeldojo_audio` | Full audio scenes: dialogue + effects + music in one clip (Seed Audio 1.0). Reference clips are hosted URLs; local audio files are not accepted. |
61
61
  | `pixeldojo_library` | Search your media library: saved Library items + recent generations. |
package/dist/cli.cjs CHANGED
@@ -1311,9 +1311,12 @@ var init_caption = __esm({
1311
1311
  }
1312
1312
  });
1313
1313
  async function run7(input, ctx) {
1314
- const { hook, callout, review, offer, end_card: card } = input;
1315
- if (!hook && !callout && !review && !input.progress_bar && !offer && !card) {
1316
- return { kind: "text", text: "pixeldojo_overlay needs at least one of hook, callout, review, progress_bar, offer or end_card." };
1314
+ const { hook, callout, review, countdown, price_tag: price, offer, end_card: card } = input;
1315
+ if (!hook && !callout && !review && !input.progress_bar && !countdown && !price && !offer && !card) {
1316
+ return {
1317
+ kind: "text",
1318
+ text: "pixeldojo_overlay needs at least one of hook, callout, review, progress_bar, countdown, price_tag, offer or end_card."
1319
+ };
1317
1320
  }
1318
1321
  const submitted = await ctx.client.run(MODEL2, {
1319
1322
  prompt: "",
@@ -1323,6 +1326,7 @@ async function run7(input, ctx) {
1323
1326
  ...callout ? {
1324
1327
  callout_title: callout.title,
1325
1328
  callout_subtitle: callout.subtitle,
1329
+ callout_style: callout.style,
1326
1330
  callout_start: callout.start_sec,
1327
1331
  callout_duration: callout.duration_sec
1328
1332
  } : {},
@@ -1334,6 +1338,19 @@ async function run7(input, ctx) {
1334
1338
  review_duration: review.duration_sec
1335
1339
  } : {},
1336
1340
  ...input.progress_bar ? { progress_bar: true } : {},
1341
+ ...countdown ? {
1342
+ countdown_from: countdown.from,
1343
+ countdown_label: countdown.label,
1344
+ countdown_start: countdown.start_sec,
1345
+ countdown_duration: countdown.duration_sec
1346
+ } : {},
1347
+ ...price ? {
1348
+ price_now: price.now,
1349
+ price_was: price.was,
1350
+ price_label: price.label,
1351
+ price_start: price.start_sec,
1352
+ price_duration: price.duration_sec
1353
+ } : {},
1337
1354
  ...offer ? {
1338
1355
  offer_text: offer.text,
1339
1356
  offer_subtext: offer.subtext,
@@ -1373,6 +1390,7 @@ var init_overlay = __esm({
1373
1390
  callout: zod.z.object({
1374
1391
  title: zod.z.string().max(32),
1375
1392
  subtitle: zod.z.string().max(40).optional(),
1393
+ style: zod.z.enum(["label", "classic"]).optional(),
1376
1394
  start_sec: zod.z.number().min(0).optional(),
1377
1395
  duration_sec: zod.z.number().min(1).max(10).optional()
1378
1396
  }).optional(),
@@ -1384,6 +1402,19 @@ var init_overlay = __esm({
1384
1402
  duration_sec: zod.z.number().min(1).max(10).optional()
1385
1403
  }).optional(),
1386
1404
  progress_bar: zod.z.boolean().optional(),
1405
+ countdown: zod.z.object({
1406
+ from: zod.z.string(),
1407
+ label: zod.z.string().max(16).optional(),
1408
+ start_sec: zod.z.number().min(0).optional(),
1409
+ duration_sec: zod.z.number().min(1).max(10).optional()
1410
+ }).optional(),
1411
+ price_tag: zod.z.object({
1412
+ now: zod.z.string().max(12),
1413
+ was: zod.z.string().max(12).optional(),
1414
+ label: zod.z.string().max(16).optional(),
1415
+ start_sec: zod.z.number().min(0).optional(),
1416
+ duration_sec: zod.z.number().min(1).max(10).optional()
1417
+ }).optional(),
1387
1418
  offer: zod.z.object({
1388
1419
  text: zod.z.string().max(24),
1389
1420
  subtext: zod.z.string().max(40).optional(),
@@ -1416,11 +1447,12 @@ var init_overlay = __esm({
1416
1447
  },
1417
1448
  callout: {
1418
1449
  type: "object",
1419
- description: 'Lower-third label that slides in from the left: a benefit ("Ships in 24h") or a name and title.',
1450
+ description: 'Lower third: a benefit ("Ships in 24h") or a name and title. style label (default) is a brand-colored box sliding in; classic is the broadcast strap, an accent bar beside a bold name and a lighter title (bottom band on 16:9).',
1420
1451
  required: ["title"],
1421
1452
  properties: {
1422
1453
  title: { type: "string", maxLength: 32, description: "The label." },
1423
- subtitle: { type: "string", maxLength: 40, description: "Optional second line." },
1454
+ subtitle: { type: "string", maxLength: 40, description: "Optional second line (the title, for classic)." },
1455
+ style: { type: "string", enum: ["label", "classic"], description: "Default label." },
1424
1456
  start_sec: { type: "number", description: "Default 3." },
1425
1457
  duration_sec: { type: "number", minimum: 1, maximum: 10, description: "Default 4." }
1426
1458
  }
@@ -1438,6 +1470,29 @@ var init_overlay = __esm({
1438
1470
  }
1439
1471
  },
1440
1472
  progress_bar: { type: "boolean", description: "A thin bar in the brand color across the top that fills as the video plays." },
1473
+ countdown: {
1474
+ type: "object",
1475
+ description: "Urgency timer under the offer badge; the digits tick down each second.",
1476
+ required: ["from"],
1477
+ properties: {
1478
+ from: { type: "string", description: 'Start time, "23:59:59" or "04:59".' },
1479
+ label: { type: "string", maxLength: 16, description: 'Words above the timer. Default "Ends in".' },
1480
+ start_sec: { type: "number", description: "Default just after the hook." },
1481
+ duration_sec: { type: "number", minimum: 1, maximum: 10, description: "Default 4." }
1482
+ }
1483
+ },
1484
+ price_tag: {
1485
+ type: "object",
1486
+ description: "Tilted sticker on the left: new price big, old price struck through.",
1487
+ required: ["now"],
1488
+ properties: {
1489
+ now: { type: "string", maxLength: 12, description: 'e.g. "$49".' },
1490
+ was: { type: "string", maxLength: 12, description: 'Old price, struck through, e.g. "$79".' },
1491
+ label: { type: "string", maxLength: 16, description: 'e.g. "Today only".' },
1492
+ start_sec: { type: "number", description: "Default just after the hook." },
1493
+ duration_sec: { type: "number", minimum: 1, maximum: 10, description: "Default 4." }
1494
+ }
1495
+ },
1441
1496
  offer: {
1442
1497
  type: "object",
1443
1498
  description: "Offer callout: a badge that pops in on cue (after the hook when there is one).",
@@ -1466,7 +1521,7 @@ var init_overlay = __esm({
1466
1521
  };
1467
1522
  overlaySkill = {
1468
1523
  name: "pixeldojo_overlay",
1469
- description: 'Add short-form ad text layouts to a finished video, exact text in the brand color, clear of the TikTok/Reels/Shorts UI: hook (title over the first seconds), callout (lower-third label), review (stars, quote, name), progress_bar, offer ("50% OFF" badge) and end_card (logo, headline, button, web address over the held last frame). Pass video_url plus any of them; one call does all. 2 credits.',
1524
+ description: 'Add short-form ad text layouts to a finished video, exact text in the brand color, clear of the TikTok/Reels/Shorts UI: hook (title over the first seconds), callout (lower-third label), review (stars, quote, name), progress_bar, countdown (ticking timer), price_tag (new price, old one struck through), offer ("50% OFF" badge) and end_card (logo, headline, button, web address over the held last frame). Pass video_url plus any of them; one call does all. 2 credits.',
1470
1525
  inputZod: InputSchema7,
1471
1526
  inputJsonSchema: InputJsonSchema7,
1472
1527
  allowedModels: [MODEL2],
@@ -3955,7 +4010,7 @@ function makeRedactedLogger(target = console) {
3955
4010
  }
3956
4011
 
3957
4012
  // src/server.ts
3958
- var PACKAGE_VERSION = "0.23.0" ;
4013
+ var PACKAGE_VERSION = "0.25.0" ;
3959
4014
  var SERVER_INSTRUCTIONS = "Pixel Dojo generates images, video, audio and short films from one catalog of AI models, billed in credits from the connected Pixel Dojo account. A job that runs past the 30-second wait returns a jobId to check later; check it rather than submitting again, since every new submission is charged. Generated asset URLs are deleted one hour after they are created: pixeldojo_save keeps one in the user's My Media permanently (after a safety check), and finished films stay in the account library. In any prompt, @Name uses a character, product, outfit, location, prop or style the user saved in Character Studio: its photos are attached automatically. pixeldojo_library source=characters lists them, and pixeldojo_save_character saves a new one from 3 to 5 photos.";
3960
4015
  function buildServer(options) {
3961
4016
  if (!options.apiKey) {