hermoso 0.1.394 → 0.1.396
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/mcp/tools.mjs
CHANGED
|
@@ -315,7 +315,7 @@ export const MCP_INSTRUCTIONS = [
|
|
|
315
315
|
// instead of a render, once after being told in terms to pass an image and run generate_video. A "do X first" that
|
|
316
316
|
// is not actually required is a trap in an instruction an agent reads before acting, and this one was not
|
|
317
317
|
// required: `model` is OPTIONAL on generate_image, generate_video and render_ad, and an unnamed render resolves to
|
|
318
|
-
// GEN_MODELS.<kind>[0] in workImage/workVideo, which is the catalog's `best: true` row (nano-banana-
|
|
318
|
+
// GEN_MODELS.<kind>[0] in workImage/workVideo, which is the catalog's `best: true` row (nano-banana-2.1 for image since 2026-10-06)
|
|
319
319
|
// and, for video, model-belt.mjs's AUTO_VIDEO_DEFAULT (seedance-2.5, also `video[0]`). The prose below says "the
|
|
320
320
|
// server's own default" rather than "the best row" on purpose: hermoso_capabilities' own _pickLine states as a RULE
|
|
321
321
|
// that neither `best` nor the longest-clip row decides where an unnamed ask lands, and two shipped sentences that
|
|
@@ -21188,7 +21188,7 @@ function memoryNoteVerdict(text) {
|
|
|
21188
21188
|
title: 'Recast motion',
|
|
21189
21189
|
description: "Motion transfer: re-perform a clip's motion, camera and timing with YOUR character, product, clothes or place; the clip's sound is kept. image (+ images, named @Image1, @Image2… in prompt) supply who and what. engine auto (default): a person clip recast with photos of people -> h3 (H3 Max Recast: ≤4 photos, one per person, 5-30s, no shot over 15s, keeps the set, light, cuts and every beat); otherwise seedance (Seedance 2.5, ≤9 pictures, 4-30s, keeps the set and every beat; a person clip needs it to be our render or faceRoute, else wan ≤15s / kling). kling = Kling Motion Control (ONE picture, its background becomes the set, 3-30s); wan = Wan 3.0 Prime (≤9 pictures, keeps the set, ≤15s). Billed per output second; ~5 min for 5s; dryRun quotes it.",
|
|
21190
21190
|
inputSchema: {
|
|
21191
|
-
image: z.string().optional().describe('who performs it: the actor/character image URL (@Image1). Required on kling. ' + LIKENESS_TERMS),
|
|
21191
|
+
image: z.string().optional().describe('who performs it: the actor/character image URL (@Image1). Required on kling. No one yet: generate_image a portrait of an AI person from words (no reference photo) and pass its url, or a saved / preset creator’s portrait (list_creators). ' + LIKENESS_TERMS),
|
|
21192
21192
|
images: z.array(z.string()).max(8).optional().describe('seedance/wan: more pictures, @Image2…: a character, product, outfit or place'),
|
|
21193
21193
|
video: z.string().describe('the reference video whose motion to re-perform'),
|
|
21194
21194
|
prompt: z.string().optional().describe("optional, e.g. 'same moves, new location: Tokyo at night'"),
|
|
@@ -21217,7 +21217,7 @@ function memoryNoteVerdict(text) {
|
|
|
21217
21217
|
description: "RECAST A VIRAL HOOK with the brand's own subject (the egg rolling off the table becomes your product; your host does the viral move), then join it into your clip. hook: a public post link (TikTok, Reel, Facebook, X, YouTube; one lookup) or a video file. Subject: creator (a saved creator's name or id), image (a product or a person; a real person's photo records their consent), or neither for the brand's first product photo. A DUO OR GROUP (2-4 people): subjects [{creator or image, position: 'left'|'right'|'center' or your own words, refs?, outfit?}], each bound to its place in the frame, keeping that performer's movement and timing on the original sound. LOCATION AND OUTFITS, same pass: location (a place photo or words) moves the scene; outfit (a photo or words) re-dresses the subject, subjects[].outfit each person; with no subject named nobody is swapped and only those change (useBrand:true also swaps in the brand product). Pictures are references, 4 in all (people or product, then location, then outfits); past 4 it is refused by name: put one in words. FULL LENGTH: past the editor's one pass (15 s with a face) the window is recast in passes, each continuing from the previous one's frame and crossfaded across the cut, under the original sound: one video up to 60 s, quoted as passes plus join; the reply names the moment to watch. mode 'auto' is always 'swap' (a region edit: camera, set, light, timing, text and sound kept, a person too; a multi-shot hook goes shot by shot); 'motion' only if asked: your person does the moves in their own photo's setting. swap: your own words for what changes. start/end pick the window (3 s minimum; default: a group or a location/outfit change takes the whole clip, one subject the first 10 s). PAID, QUOTED FIRST: without confirm it returns the plan and credits; call again with confirm:true once the user okays it. Then get_job until done, and post_edit with videoUrl = the result and ops [{op:'join', clips:[{url: your clip}], bridge:{kind:'impact'}}].",
|
|
21218
21218
|
inputSchema: {
|
|
21219
21219
|
hook: z.string().describe('the viral hook: a post link or a video URL'),
|
|
21220
|
-
creator: z.string().optional().describe("a saved creator's name or id (list_creators)"),
|
|
21220
|
+
creator: z.string().optional().describe("a saved creator's name or id (list_creators). NONE SAVED: cast a preset by exact name (list_creators), or make an AI person from words: generate_image a head-and-shoulders portrait with no reference photo, then save_creator (source generated) and pass that name. A described lookalike of the user is fine on every plan; a photo of anyone is a real face (paid plan)"),
|
|
21221
21221
|
image: z.string().optional().describe('a picture of the subject instead: a product or a person'),
|
|
21222
21222
|
subjects: z.array(z.object({ creator: z.string().optional().describe("a saved creator's name or id"), image: z.string().optional().describe('or a picture of this person'), position: z.string().optional().describe("where they are in the hook: 'left', 'right', 'center', or your own words ('who raps first'); all or none"), refs: z.array(z.string()).optional().describe("up to 3 more views of the SAME person (a saved creator's pose plates ride automatically)"), name: z.string().optional(), outfit: z.string().optional().describe('what this person wears instead: an outfit photo URL or words; alone (no creator/image) it keeps this person and changes only the clothes') }).passthrough()).max(4).optional().describe('a duo or group recast, 2-4 people, instead of creator/image'),
|
|
21223
21223
|
location: z.string().optional().describe('move the scene: a photo URL of the place, or words ("a sunny beach at golden hour")'),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hermoso",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.396",
|
|
4
4
|
"mcpName": "io.github.hermoso-ai/hermoso",
|
|
5
5
|
"description": "Marketing on autopilot, run from your own AI agent. 906 tools. Publishing, scheduling, ad campaign management, comments, DMs and analytics cost no credits on every plan; credits are only for generating creative and for Ad Spy research. 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 and Telegram. 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",
|
|
@@ -21,7 +21,7 @@ You drive the **Hermoso CLI** (`hermoso`) to render images and videos. Always re
|
|
|
21
21
|
|
|
22
22
|
## Procedure
|
|
23
23
|
1. **Always run `hermoso capabilities` first.** It lists the valid image/video **model ids**, their credit costs, aspect ratios, video durations, and the recipe ids. Never guess a model id.
|
|
24
|
-
2. Pick a **high-quality default** (quality over cost is the house rule): for images prefer the model marked `★best` (e.g. `nano-banana-
|
|
24
|
+
2. Pick a **high-quality default** (quality over cost is the house rule): for images prefer the model marked `★best` (e.g. `nano-banana-2.1`); for product composites pass the real product image with `--ref`. For video, use a featured model and a sensible duration.
|
|
25
25
|
3. Generate:
|
|
26
26
|
- Image: `hermoso generate image --prompt "<full prompt incl. any on-image text>" [--ref ./product.png] [--model <id>] [--aspect 1:1]`
|
|
27
27
|
- Video: `hermoso generate video --prompt "<shot description>" [--ref ./frame.png] [--duration 8] [--aspect 9:16] [--model <id>] [--tts "<voiceover>"] [--voice Rachel] --wait`
|