@facelessad/cli 2.0.0 → 2.1.1

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
@@ -9,10 +9,17 @@ facelessad tools # what can be made
9
9
  facelessad create --tool motion-graphics --url https://your-product.com --wait
10
10
  ```
11
11
 
12
- Ten commands: `login`, `create`, `status`, `list`, `download`, `estimate`,
13
- `tools`, `voices`, `brands`, `balance`. Every command accepts `--json` for scripting;
14
- `create`/`estimate` accept `--dry-run` (print the request body without
15
- sending) and `--file body.json` (a base body that flags override).
12
+ Commands: `login`, `create`, `status`, `list`, `download`, `estimate`,
13
+ `tools`, `voices`, `brands`, `balance`, `parts`, `regen-part`, `regen`,
14
+ `render`, `cancel`, and `webhooks` / `webhook-add` / `webhook-rm`. Every
15
+ command accepts `--json` for scripting; `create`/`estimate` accept `--dry-run`
16
+ (print the request body without sending) and `--file body.json` (a base body
17
+ that flags override).
18
+
19
+ A finished video can be fixed part by part: `parts <id>` shows what it is made
20
+ of and `regen-part` redoes one clip, image card, graphics block — or, on
21
+ background-image styles (marked `+bg` in `tools`), one `bg-N` AI photo
22
+ backdrop with `--prompt`. The whole video re-renders automatically.
16
23
 
17
24
  The key is stored in `~/.facelessad/config.json` with mode 0600. The
18
25
  environment variable `FACELESSAD_API_KEY` always wins — that is the way CI
@@ -34,7 +41,7 @@ Three ways to get the file:
34
41
 
35
42
  ```bash
36
43
  facelessad download 103 --out ad.mp4 # saves into the CURRENT directory
37
- facelessad status 103 --json | jq -r .url # the raw link, valid ~1 hour
44
+ facelessad status 103 --json | jq -r .url # the raw link, valid ~24 hours
38
45
  ```
39
46
 
40
47
  The third is the browser: every video made through the CLI also appears in My
package/SKILL.md CHANGED
@@ -162,8 +162,8 @@ no voice, no script, no music and no SFX.
162
162
 
163
163
  `--voiceover-text "<script>"` (or `--voiceover-file <path>`) makes the
164
164
  narration **word-for-word** — the AI script writer is skipped and not
165
- charged. The word limit follows the duration: 15 s fits ~40 words, 30 s ~60,
166
- 50 s ~95. Over the limit is a clear error, never a silent trim, so count
165
+ charged. The word limit follows the duration: 15 s fits ~45 words, 30 s ~80,
166
+ 50 s ~130. Over the limit is a clear error, never a silent trim, so count
167
167
  before sending. Not on music-video (its script is sung) or video-banner.
168
168
 
169
169
  `--visual-direction` steers the storyboard and `--hook-text` the first frame.
@@ -207,6 +207,11 @@ Which flag a part takes is in its `regenerate_requires`:
207
207
  text-animation, video-banner, and the graphics layer of product-showcase):
208
208
  a plain-language change such as `"make the headline say Faster onboarding"`.
209
209
  The server applies it to the block's current code — you never send code.
210
+ - `--prompt` on a `bg-N` part — background images (styles marked `genBg` in
211
+ the registry / `+bg` in `facelessad tools`): describe the new AI photo
212
+ backdrop, e.g. `"warm sunset gradient with soft haze"`. The graphics stay
213
+ untouched, text/logos/UI are always excluded automatically, and the video
214
+ re-renders. 6 credits per image.
210
215
 
211
216
  Product Showcase lists two parts per scene: the product clip (`--prompt`) and
212
217
  the graphics over it (`--instruction`). Continuous videos chain their clips
@@ -317,6 +322,7 @@ names the offending field and usually the valid values.
317
322
  - `card_needs_image_prompt` — a card needs `--image-prompt`, not `--prompt`.
318
323
  - `webhook_limit` / `webhook_not_found` / `invalid_url` — five endpoints per account; no such id; or a URL we cannot reach.
319
324
  - `graphics_needs_instruction` / `instruction_not_supported` — graphics blocks take `--instruction`, and only they do.
325
+ - `bg_needs_prompt` — a `bg-N` background image is regenerated with `--prompt` describing the backdrop.
320
326
 
321
327
  ## Rules for agents
322
328
 
package/index.js CHANGED
@@ -550,7 +550,10 @@ const commands = {
550
550
  const t = (d.tools || []).find((x) => x.id === flags.tool);
551
551
  if (!t) die('Unknown tool "' + flags.tool + '". Valid: ' + (d.tools || []).map((x) => x.id).join(', '), 'unknown_tool');
552
552
  const lines = [bold(t.id) + ' — ' + (t.name || '')];
553
- if (t.styles?.length) lines.push(' styles: ' + t.styles.map((s) => s.id).join(', '));
553
+ // 2.1.0 (§848 genBg): tyylit joilla on AI-generoitu kuvatausta merkitään
554
+ // +bg-liitteellä — rekisterin genBg-lippu, +6 cr / partti arvioon.
555
+ if (t.styles?.length) lines.push(' styles: ' + t.styles.map((s) => s.id + (s.genBg ? '+bg' : '')).join(', '));
556
+ if (t.styles?.some((s) => s.genBg)) lines.push(' ' + dim('+bg = AI photo background, +6 credits per part (regenerable later: facelessad regen-part <id> --part bg-N --prompt "...")'));
554
557
  // 1.2.0: rekisteri kertoo rakenteet KOLMESSA muodossa (§698). Ennen tämä
555
558
  // tulosti vain adStructures-listan, joka on oletusryhmän pooli — eli
556
559
  // animated-adilla 17 rakennetta 46:sta ja motion-graphicsilla 6 sadasta
@@ -753,7 +756,7 @@ const commands = {
753
756
 
754
757
  async 'regen-part'() {
755
758
  const id = positional[0];
756
- if (!id) die('Usage: facelessad regen-part <id> --part <uid> [--prompt|--image-prompt|--instruction "..."]', 'missing_id');
759
+ if (!id) die('Usage: facelessad regen-part <id> --part <uid> [--prompt|--image-prompt|--instruction "..."]\n scene clip: --prompt (new take) / --image-prompt (new image first)\n image card: --image-prompt\n graphics block (gfx-N): --instruction (plain-language edit)\n background image (bg-N): --prompt (describe the new backdrop — text/logos/UI always excluded)', 'missing_id');
757
760
  const uid = flags.part;
758
761
  if (!uid || uid === true) die('--part <uid> is required — run: facelessad parts ' + id, 'missing_part');
759
762
  const body = {};
@@ -858,7 +861,7 @@ Create flags:
858
861
  --video-mode continuous|cuts (animated-ad and music-video only)
859
862
  --voiceover-text "<script>" (your own narration, spoken word-for-word —
860
863
  the AI script writer is skipped and not charged. Word limit follows
861
- duration: 15s fits 40 words, 30s fits 60, 50s fits 95. Over the limit
864
+ duration: 15s fits 45 words, 30s fits 80, 50s fits 130. Over the limit
862
865
  is an error, never a silent trim. Not on music-video or video-banner.)
863
866
  --voiceover-file <path> (same, read from a local text file)
864
867
  --visual-direction "<...>" (how the video should LOOK and what happens
@@ -899,6 +902,10 @@ Regenerate flags (regen-part) — the ONLY flags this command takes:
899
902
  Animation, banner, and the graphics layer of product-showcase:
900
903
  plain-language edit, e.g. "make the headline say Faster onboarding".
901
904
  You never send or receive code.)
905
+ --prompt "<backdrop>" (bg-N background images — styles marked +bg
906
+ in facelessad tools: describe the new AI photo backdrop, e.g. "warm
907
+ sunset gradient with soft haze". Graphics stay untouched; text, logos
908
+ and UI are always excluded automatically. 6 credits per image.)
902
909
 
903
910
  Video Banner flags (silent looping banner — no voice, no script):
904
911
  --headline "..." --subline "..." --cta-text "..."
@@ -943,7 +950,7 @@ function statusLine(d) {
943
950
  let s = 'Video ' + d.id + ': ' + bold(d.status);
944
951
  if (d.phase && !done) s += ' ' + dim('(' + d.phase + ')');
945
952
  if (d.url) s += '\n' + dim('Download: ') + 'facelessad download ' + d.id + ' --out ad.mp4'
946
- + '\n' + dim('(the direct link is in --json output; it expires in ~1 h)');
953
+ + '\n' + dim('(the direct link is in --json output; it expires in ~24 h)');
947
954
  if (d.error) s += '\n' + d.error;
948
955
  return s;
949
956
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@facelessad/cli",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "description": "Create faceless video ads from your terminal or build scripts \u2014 the FacelessAd command line.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,4 +23,4 @@
23
23
  "cli"
24
24
  ],
25
25
  "homepage": "https://facelessad.com/developers"
26
- }
26
+ }