@facelessad/cli 2.1.0 → 2.1.2

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
@@ -41,7 +41,7 @@ Three ways to get the file:
41
41
 
42
42
  ```bash
43
43
  facelessad download 103 --out ad.mp4 # saves into the CURRENT directory
44
- 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
45
45
  ```
46
46
 
47
47
  The third is the browser: every video made through the CLI also appears in My
package/SKILL.md CHANGED
@@ -14,10 +14,11 @@ facelessad login # API key from https://facelessad.com/develop
14
14
  facelessad balance # proves the key works
15
15
  ```
16
16
 
17
- **The API needs a paid plan.** Trial credits cover the web app but do not
18
- open API keys if a command answers `api_access_required`, the user has to
19
- subscribe first. That is a billing state, not a broken key, so say so rather
20
- than retrying.
17
+ **The API needs a paid plan or an active trial.** The $15 trial (300
18
+ credits, 7 days) opens API keys, the CLI and MCP for its duration. If a
19
+ command answers `api_access_required`, the subscription has ended or the
20
+ trial has expired or run out of credits — a billing state, not a broken
21
+ key, so say so rather than retrying.
21
22
 
22
23
  In CI, skip `login` and set `FACELESSAD_API_KEY`; the environment variable
23
24
  wins over the saved key.
@@ -162,8 +163,8 @@ no voice, no script, no music and no SFX.
162
163
 
163
164
  `--voiceover-text "<script>"` (or `--voiceover-file <path>`) makes the
164
165
  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
166
+ charged. The word limit follows the duration: 15 s fits ~45 words, 30 s ~80,
167
+ 50 s ~130. Over the limit is a clear error, never a silent trim, so count
167
168
  before sending. Not on music-video (its script is sung) or video-banner.
168
169
 
169
170
  `--visual-direction` steers the storyboard and `--hook-text` the first frame.
@@ -291,9 +292,10 @@ names the offending field and usually the valid values.
291
292
 
292
293
  **Access and capacity**
293
294
 
294
- - `api_access_required` — no active paid plan. Trial credits do not open the API.
295
+ - `api_access_required` — no active paid plan or live trial. An active $15 trial opens the API for its 7 days.
295
296
  - `insufficient_credits` — the body carries the estimate and the balance; nothing was spent.
296
297
  - `too_many_active` — the plan's queue is full (Starter 10, Growth 25, Scale 50; app and API share it). Wait for a build to finish, then retry.
298
+ - `test_quota_exceeded` — 100 test runs per day per account (`"test": true` only). Real runs are unaffected; the quota resets at 00:00 UTC and the body carries `retryAfter`.
297
299
  - `rate_limited` — over 300 POSTs this hour (`estimate` has its own 600). `retryAfter` gives the seconds until the counter resets on the hour.
298
300
  - `unauthorized` — the key is unknown or revoked.
299
301
 
package/index.js CHANGED
@@ -861,7 +861,7 @@ Create flags:
861
861
  --video-mode continuous|cuts (animated-ad and music-video only)
862
862
  --voiceover-text "<script>" (your own narration, spoken word-for-word —
863
863
  the AI script writer is skipped and not charged. Word limit follows
864
- 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
865
865
  is an error, never a silent trim. Not on music-video or video-banner.)
866
866
  --voiceover-file <path> (same, read from a local text file)
867
867
  --visual-direction "<...>" (how the video should LOOK and what happens
@@ -950,7 +950,7 @@ function statusLine(d) {
950
950
  let s = 'Video ' + d.id + ': ' + bold(d.status);
951
951
  if (d.phase && !done) s += ' ' + dim('(' + d.phase + ')');
952
952
  if (d.url) s += '\n' + dim('Download: ') + 'facelessad download ' + d.id + ' --out ad.mp4'
953
- + '\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)');
954
954
  if (d.error) s += '\n' + d.error;
955
955
  return s;
956
956
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@facelessad/cli",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
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",