hermoso 0.1.443 → 0.1.444
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 +2 -2
- package/mcp/tools.mjs +23 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ scripts. Research the ads already winning in a market, generate image & video ad
|
|
|
5
5
|
composited in, copy + CTA included), publish them to your own social channels, and build & manage the ad
|
|
6
6
|
campaigns behind them, all over [MCP](https://modelcontextprotocol.io) tools, a CLI, or installable Claude skills.
|
|
7
7
|
|
|
8
|
-
**
|
|
8
|
+
**932 tools.** `tools/list` is always the authoritative set; `hermoso_capabilities` (free) returns the live model
|
|
9
9
|
catalog with exact per-render credit costs plus the full capability map.
|
|
10
10
|
|
|
11
11
|
**No markup on models.** Stop overpaying markups on AI models. Plans: [hermoso.ai/pricing](https://hermoso.ai/pricing).
|
|
@@ -242,7 +242,7 @@ block entirely if you signed in above; it is there for CI, where the process can
|
|
|
242
242
|
|
|
243
243
|
Then ask your agent: *“Generate an image ad with Hermoso.”*
|
|
244
244
|
|
|
245
|
-
### What the
|
|
245
|
+
### What the 932 tools cover
|
|
246
246
|
|
|
247
247
|
**Ad spy / research** — `find_competitors`, `competitor_teardown`, `pull_competitor_ads`, `research_ads`; the
|
|
248
248
|
Meta / Google / LinkedIn ad libraries (`search_meta_ads`, `search_google_ads`, `search_linkedin_ads`); organic
|
package/mcp/tools.mjs
CHANGED
|
@@ -2850,7 +2850,7 @@ export const WITHHELD_FROM_DIRECTORY = new Set([
|
|
|
2850
2850
|
'buy_credits', 'upgrade_plan', 'set_auto_reload',
|
|
2851
2851
|
'generate_image', 'generate_video', 'generate_avatar', 'generate_voice', 'render_ad', 'plan_ad', 'plan_variations',
|
|
2852
2852
|
'make_thumbnail', 'make_explainer', 'product_sizzle', 'dub_video', 'change_voice', 'edit_video', 'recast_motion',
|
|
2853
|
-
'upscale_video', 'reframe_video', 'multiply_ad', 'clone_static', 'remix_static', 'stitch_video', 'fix_beat',
|
|
2853
|
+
'upscale_video', 'reframe_video', 'insert_scene', 'multiply_ad', 'clone_static', 'remix_static', 'stitch_video', 'fix_beat',
|
|
2854
2854
|
'hook_variants',
|
|
2855
2855
|
// 2026-09-25, after the directory review named "30+ model ids" and the prompt-only mode: the model catalog, the
|
|
2856
2856
|
// saved cast (it exists to star a person in a render) and mine_angles (its `next` is a render call) point at the
|
|
@@ -22111,6 +22111,28 @@ function memoryNoteVerdict(text) {
|
|
|
22111
22111
|
return okVideo(`Reframed video (${aspectRatio}): ${r.url}`, r);
|
|
22112
22112
|
}));
|
|
22113
22113
|
|
|
22114
|
+
// INSERT A NEW SCENE (2026-10-26, server workInsertScene + lib/insert-scene.mjs): H3 Max insert-video adds a NEW scene
|
|
22115
|
+
// between two points of a clip and returns the whole video. Every vendor rule is checked before anything is charged.
|
|
22116
|
+
server.registerTool('insert_scene', {
|
|
22117
|
+
title: 'Insert a new scene into a video',
|
|
22118
|
+
description: "INSERT a newly generated scene into a clip you already have: the video plays up to startTime, the new scene (5 to 13 seconds) plays, then the original picks up again at resumeTime. Use for a product close-up, a reaction, a reveal or a missing beat in the middle of an ad without re-rendering the rest. resumeTime = startTime keeps every second of the original; a later resumeTime also cuts the footage in between. Describe the scene in prompt and/or attach up to 4 reference pictures (refImages) or 1 reference clip (refVideos). Clips up to 60 seconds; both times between 1.625 and 60 seconds. Paid render (billed per second of NEW scene); returns the whole video's URL.",
|
|
22119
|
+
inputSchema: {
|
|
22120
|
+
video: z.string().describe('the source video URL (a render, job result or list_library item)'),
|
|
22121
|
+
startTime: z.number().describe('seconds into the clip where the new scene starts (1.625-60)'),
|
|
22122
|
+
resumeTime: z.number().describe('seconds into the ORIGINAL clip where it picks up again after the new scene (2.625-60, at or after startTime)'),
|
|
22123
|
+
prompt: z.string().optional().describe('what happens in the new scene: the action, the subject, the camera'),
|
|
22124
|
+
seconds: z.number().optional().describe('length of the new scene, 5-13 seconds (default 5)'),
|
|
22125
|
+
refImages: z.array(z.string()).optional().describe('up to 4 picture URLs of what should appear (the product, a person, a place)'),
|
|
22126
|
+
refVideos: z.array(z.string()).optional().describe('up to 1 clip URL whose look or motion the scene follows'),
|
|
22127
|
+
resolution: z.enum(['480p', '720p']).optional().describe("default 720p (rendered at 768p); '480p' is cheaper"),
|
|
22128
|
+
},
|
|
22129
|
+
outputSchema: { ...JOB_OUT },
|
|
22130
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
22131
|
+
}, wrap(async ({ video, startTime, resumeTime, prompt, seconds, refImages, refVideos, resolution }) => {
|
|
22132
|
+
const r = await renderJob('insertscene', { video, startTime, resumeTime, ...(prompt ? { prompt } : {}), ...(seconds != null ? { seconds } : {}), ...(refImages && refImages.length ? { refImages } : {}), ...(refVideos && refVideos.length ? { refVideos } : {}), ...(resolution ? { resolution } : {}) }, `Insert a scene at ${startTime}s`);
|
|
22133
|
+
return okVideo(`Video with the new scene inserted at ${startTime}s: ${r.url}`, r);
|
|
22134
|
+
}));
|
|
22135
|
+
|
|
22114
22136
|
server.registerTool('upscale_video', {
|
|
22115
22137
|
title: 'Upscale video',
|
|
22116
22138
|
description: "Upscale a video to higher resolution (2x) for final delivery. Paid render; returns the served URL. A 480p Seedance 2.5 draft: finish_draft (same take, native 1080p). Two engines: the default ('standard') is the safe precision upscaler; engine:'flux' is the FLUX 3 video upscaler (1080p/2K/4K) with an optional mode:'creative' detail-enhancement pass — pick it when the user asks for the FLUX upscaler or wants added detail rather than a faithful enlargement.",
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hermoso",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.444",
|
|
4
4
|
"mcpName": "io.github.hermoso-ai/hermoso",
|
|
5
|
-
"description": "AI marketing agent and AI ad generator, run from your own AI agent.
|
|
5
|
+
"description": "AI marketing agent and AI ad generator, run from your own AI agent. 932 tools. No markup on models. Publishing, scheduling, ad campaign management, comments, DMs and analytics are free on every plan. AD PLATFORMS: Meta, Google Ads, TikTok Ads, LinkedIn Ads, Reddit Ads, X Ads, Pinterest Ads, Snapchat Ads, Microsoft Advertising, Apple Search Ads, ChatGPT Ads and AppLovin Ads, plus product feeds in Google Merchant Center. PUBLISHING AND SCHEDULING: Facebook, Instagram, Threads, TikTok, YouTube, X, LinkedIn, Pinterest, Bluesky, Telegram and Google Business Profile. INSTAGRAM DM AUTOMATIONS: a keyword comment, a DM, a story reply or an ig.me link gets an automatic private reply from the brand. AD RESEARCH: the Meta, Google and LinkedIn ad libraries plus organic TikTok, Instagram, YouTube, Threads and Reddit. ANALYTICS: Google Analytics 4, Google Search Console and every connected platform's own post and campaign insights. Also brand onboarding, 50+ image and video generation models, ad scoring, competitor teardowns, Google Drive and OneDrive, a CLI and installable Claude skills.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"hermoso": "bin/hermoso.mjs"
|