@facelessad/cli 2.1.2 → 2.2.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 +14 -0
- package/SKILL.md +33 -0
- package/index.js +23 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -109,11 +109,25 @@ These are not alternative spellings but forms of their own, and they stay:
|
|
|
109
109
|
| `--no-voice` | no narration |
|
|
110
110
|
| `--no-brand-kit` | build without the Brand Kit |
|
|
111
111
|
| `--no-refine-style` | use the custom style text verbatim |
|
|
112
|
+
| `--visual-direction-refine "<preset\|text>"` | how the story is told, not how it looks (2.2.0) |
|
|
113
|
+
| `--layout <A\|HA\|AC\|HAC\|AIA\|HAIA\|AIAC\|HAIAC>` | card layout; data card drops if too short, hook/CTA stay (2.2.0) |
|
|
112
114
|
|
|
113
115
|
`--no-brand-kit` now works; before 1.0.1 it was accepted on the command line
|
|
114
116
|
and silently dropped, so the video was built with the Brand Kit anyway. **An unknown flag is now an error** rather than
|
|
115
117
|
something quietly ignored — that silence is what hid the whole problem.
|
|
116
118
|
|
|
119
|
+
## 2.2.0 — `--visual-direction-refine`
|
|
120
|
+
|
|
121
|
+
Animated Ad and Music Video: a preset id (`metaphoric`, `realistic`,
|
|
122
|
+
`dramatic`, `calm`, `playful`, `dark`, `bright`, `magical` — `facelessad tools`
|
|
123
|
+
lists them) or your own instruction up to 300 characters. Reshapes how the
|
|
124
|
+
visual story is told, not how it looks; applied on top of `--visual-direction`
|
|
125
|
+
or the generated one. Free.
|
|
126
|
+
|
|
127
|
+
`--layout` (same two tools) picks the card layout. Too short for the data
|
|
128
|
+
card? It is dropped, the hook/CTA you chose stay, and the output says so.
|
|
129
|
+
`facelessad tools` lists the layouts and what each becomes per duration.
|
|
130
|
+
|
|
117
131
|
## 1.3.0 — turn any text file into a video
|
|
118
132
|
|
|
119
133
|
**Agent skill included.** The package ships `SKILL.md` — drop it where your
|
package/SKILL.md
CHANGED
|
@@ -140,6 +140,8 @@ you leave out is chosen for you** from the materials.
|
|
|
140
140
|
| `--voice-over` / `--no-voice` | force narration on or off, where the tool allows a choice |
|
|
141
141
|
| `--voiceover-text "<script>"` / `--voiceover-file <path>` | your own narration (see below) |
|
|
142
142
|
| `--visual-direction "<...>"` | how it should look and what happens, max 600 |
|
|
143
|
+
| `--visual-direction-refine "<preset\|text>"` | how the story is TOLD, not how it looks: preset id or your own instruction, max 300. Animated Ad, Music Video. Free |
|
|
144
|
+
| `--layout <A\|HA\|AC\|HAC\|AIA\|HAIA\|AIAC\|HAIAC>` | card layout — hook/CTA stay, data card drops if too short. Animated Ad, Music Video |
|
|
143
145
|
| `--hook-text "<...>"` | your own first-frame card text, max 120 |
|
|
144
146
|
| `--cta "<...>"` | the call to action it ends on |
|
|
145
147
|
| `--brand-name "<...>"` / `--brand-color "#RRGGBB"` | brand as said and shown, and its colour |
|
|
@@ -170,6 +172,35 @@ before sending. Not on music-video (its script is sung) or video-banner.
|
|
|
170
172
|
`--visual-direction` steers the storyboard and `--hook-text` the first frame.
|
|
171
173
|
Neither replaces the style: the look still comes from `--style`.
|
|
172
174
|
|
|
175
|
+
## Refining the visual story (optional)
|
|
176
|
+
|
|
177
|
+
`--visual-direction-refine` reshapes **how the visual story is told** — its
|
|
178
|
+
narrative device, scale, tempo, mood, what the product's effect leads to — not
|
|
179
|
+
how it looks. It is applied on top of `--visual-direction` if you gave one,
|
|
180
|
+
and otherwise on the visual direction the script writer generates, so an
|
|
181
|
+
intent is enough.
|
|
182
|
+
|
|
183
|
+
Two forms: a preset id (`metaphoric`, `realistic`, `dramatic`, `calm`,
|
|
184
|
+
`playful`, `dark`, `bright`, `magical` — `facelessad tools` lists them under
|
|
185
|
+
`visual_direction_refine.presets`) or any other text, max 300 characters,
|
|
186
|
+
used as your own instruction. Animated Ad and Music Video only; elsewhere it
|
|
187
|
+
is an error, not ignored. Free. Art-style words belong in `--custom-style`.
|
|
188
|
+
|
|
189
|
+
## Card layout (optional)
|
|
190
|
+
|
|
191
|
+
`--layout` picks the card layout on Animated Ad and Music Video: `A` (scenes
|
|
192
|
+
only), `HA` (hook card + scenes), `AC` (scenes + CTA card), `HAC`, `AIA`
|
|
193
|
+
(scenes + data card + scenes), `HAIA`, `AIAC`, `HAIAC`. `facelessad tools`
|
|
194
|
+
lists them under `layouts` with a name and, per duration, what each becomes.
|
|
195
|
+
|
|
196
|
+
Length is never an error. The hook and CTA cards you chose always stay; the
|
|
197
|
+
data card is dropped when the video is too short for it — `HAIAC` at 30 s
|
|
198
|
+
becomes `HAC`, `AIA` at 15 s becomes `A`. The create response reports
|
|
199
|
+
`layout.applied` and a `layout.notice` when it was reduced. Omit `--layout` to
|
|
200
|
+
let the ad structure decide (its own layout, fitted to the duration the same
|
|
201
|
+
way).
|
|
202
|
+
|
|
203
|
+
|
|
173
204
|
## Captions
|
|
174
205
|
|
|
175
206
|
On by default, outline style, no dark box over the visuals.
|
|
@@ -308,6 +339,8 @@ names the offending field and usually the valid values.
|
|
|
308
339
|
- `custom_style_without_custom` — `--custom-style` without `--style custom`.
|
|
309
340
|
- `custom_style_not_supported` — that tool's styles are fixed presets.
|
|
310
341
|
- `custom_script_too_long` / `custom_script_too_short` — `--voiceover-text` does not fit the duration.
|
|
342
|
+
- `visual_direction_refine_too_long` / `visual_direction_refine_not_supported` — free-text instruction over 300, or a tool other than animated-ad / music-video.
|
|
343
|
+
- `unknown_layout` / `layout_not_supported` — a layout id not in the list, or a tool other than animated-ad / music-video. Length never errors: the data card is dropped and the response says so.
|
|
311
344
|
- `voice_not_supported` / `voice_over_not_supported` / `speakers_not_supported` / `option_not_supported` — that tool does not have that setting.
|
|
312
345
|
- `structure_speaker_mismatch` — a dialogue structure with `--speakers 1`, or the reverse.
|
|
313
346
|
- `product_image_required` — product-showcase cannot start without one.
|
package/index.js
CHANGED
|
@@ -157,6 +157,10 @@ const KNOWN_FLAGS = new Set([
|
|
|
157
157
|
'no-captions', 'no-music', 'no-sfx',
|
|
158
158
|
// 1.4.0 (§799): oma kasikirjoitus ja visuaalinen ohjaus createssa.
|
|
159
159
|
'voiceover-text', 'voiceover-file', 'visual-direction', 'hook-text',
|
|
160
|
+
// 2.2.0 (§903): kerronnan esitystavan jalostus (preset-id tai vapaa ohje).
|
|
161
|
+
'visual-direction-refine',
|
|
162
|
+
// 2.2.0 (§912): H/I/C-layout (A, HA, AC, HAC, AIA, HAIA, AIAC, HAIAC).
|
|
163
|
+
'layout',
|
|
160
164
|
]);
|
|
161
165
|
const unknownFlags = Object.keys(flags).filter((f) => !KNOWN_FLAGS.has(f)).map((f) => '--' + f).concat(badShort);
|
|
162
166
|
|
|
@@ -395,6 +399,8 @@ function buildBody() {
|
|
|
395
399
|
body.voiceover_text = vo;
|
|
396
400
|
}
|
|
397
401
|
set('visual_direction', flags['visual-direction'] !== undefined ? String(flags['visual-direction']) : undefined);
|
|
402
|
+
set('visual_direction_refine', flags['visual-direction-refine'] !== undefined ? String(flags['visual-direction-refine']) : undefined); // 2.2.0 (§903)
|
|
403
|
+
set('layout', flags['layout'] !== undefined ? String(flags['layout']).toUpperCase() : undefined); // 2.2.0 (§912)
|
|
398
404
|
// 1.5.0 (§806): tekstitysten ulkoasu — samat arvot kuin appissa.
|
|
399
405
|
set('caption_style', flags['caption-style'] !== undefined ? String(flags['caption-style']) : undefined);
|
|
400
406
|
set('caption_color', flags['caption-color'] !== undefined ? String(flags['caption-color']) : undefined);
|
|
@@ -567,6 +573,10 @@ const commands = {
|
|
|
567
573
|
} else if (t.adStructures?.length) {
|
|
568
574
|
lines.push(' ad structures: ' + t.adStructures.map((s) => s.id).join(', '));
|
|
569
575
|
}
|
|
576
|
+
// 2.2.0 (§912): layoutit + mihin ne tippuvat pituuksittain.
|
|
577
|
+
if (t.layouts?.length) {
|
|
578
|
+
lines.push(' layouts (15s / 30s / 50s): ' + t.layouts.map((l) => l.id + ' → ' + l.at.quick + '/' + l.at.medium + '/' + l.at.long).join(', '));
|
|
579
|
+
}
|
|
570
580
|
// Tyylit joilla on OMA rakennepooli — valinta riippuu tyylistä, ja
|
|
571
581
|
// yleisen listan rakenne hylätään niillä (structure_style_mismatch).
|
|
572
582
|
// §708: characterin rakenteet ovat kaksi poolia puhujamäärän mukaan.
|
|
@@ -711,7 +721,9 @@ const commands = {
|
|
|
711
721
|
if (flags['dry-run'] === true) { out({ ok: true, body }, JSON.stringify(body, null, 2)); return; }
|
|
712
722
|
const d = await call('POST', '/api/v1/videos', body);
|
|
713
723
|
if (!(flags.wait === true)) {
|
|
714
|
-
|
|
724
|
+
// 2.2.0 (§912): layout-kuittaus — mitä käytetään ja miksi se tippui.
|
|
725
|
+
const layoutLine = d.layout ? ('\nLayout: ' + d.layout.applied + (d.layout.notice ? ' — ' + d.layout.notice : '')) : '';
|
|
726
|
+
out(d, 'Queued. id=' + d.id + ' (estimate: up to ~' + d.estimate + ' credits)' + layoutLine + '\nFollow it: facelessad status ' + d.id + ' --wait');
|
|
715
727
|
return;
|
|
716
728
|
}
|
|
717
729
|
await waitFor(d.id);
|
|
@@ -866,6 +878,16 @@ Create flags:
|
|
|
866
878
|
--voiceover-file <path> (same, read from a local text file)
|
|
867
879
|
--visual-direction "<...>" (how the video should LOOK and what happens
|
|
868
880
|
visually, max 600 chars — steers the storyboard, not the art style)
|
|
881
|
+
--visual-direction-refine "<preset|text>"
|
|
882
|
+
(how the story is TOLD, not how it looks: a preset id — metaphoric,
|
|
883
|
+
realistic, dramatic, calm, playful, dark, bright, magical — or your own
|
|
884
|
+
instruction, max 300 chars. Applied on top of --visual-direction or the
|
|
885
|
+
generated one. animated-ad and music-video only. Free.)
|
|
886
|
+
--layout <A|HA|AC|HAC|AIA|HAIA|AIAC|HAIAC>
|
|
887
|
+
(card layout, animated-ad and music-video only. H = hook card, I = data
|
|
888
|
+
card, C = CTA card, A = scenes. Too short for the data card? It is
|
|
889
|
+
dropped and the hook/CTA you chose stay — e.g. HAIAC at 30s becomes
|
|
890
|
+
HAC; the response says so. "facelessad tools" lists the layouts.)
|
|
869
891
|
--hook-text "<...>" (your own first-frame card text, max 120)
|
|
870
892
|
--voice --gender --no-voice --voice-over --music --sfx --captions
|
|
871
893
|
(leave --voice out and the voice is cast from the finished script;
|