clipugc 0.3.0 → 0.3.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
@@ -48,11 +48,12 @@ clipugc images list --character <characterId>
48
48
  # 6. Turn the selected look into a short video clip
49
49
  clipugc videos create --image <imageId> --prompt "excitedly talking to camera about a new app" --wait
50
50
 
51
- # 7. Merge the clip with your app's screen recording + a hook
51
+ # 7. Merge the clip with your app's screen recording + a hook.
52
+ # This creates an AD, which has its own id (printed, or `merged_video_id` with --json).
52
53
  clipugc videos merge <videoId> --app-video ./screenrec.mp4 --hook "This app fixed my morning routine" --wait
53
54
 
54
- # 8. Download the final UGC ad
55
- clipugc videos download <videoId> -o ugc-ad.mp4
55
+ # 8. Download the final UGC ad — by AD id, not the clip id
56
+ clipugc ads download <adId> -o ugc-ad.mp4
56
57
  ```
57
58
 
58
59
  Tip: add `--json` to any command to get raw JSON (handy for grabbing ids in scripts), and `--wait` to any generation command to poll with a spinner until it completes.
@@ -133,15 +134,30 @@ Tip: add `--json` to any command to get raw JSON (handy for grabbing ids in scri
133
134
 
134
135
  | Command | Description |
135
136
  |---------|-------------|
136
- | `clipugc videos list [--character <id>] [--mergeable \| --finals] [--page N] [--per-page N]` | List your videos. `--character` filters to one AI character, `--mergeable` shows only completed clips not yet merged (ready for `videos merge`), `--finals` shows only merged final UGC videos. |
137
+ | `clipugc videos list [--character <id>] [--mergeable \| --finals] [--page N] [--per-page N]` | List your clips. `--character` filters to one AI character, `--mergeable` shows only completed clips not yet merged (ready for `videos merge`). `--finals` lists finished **ads** instead of clips — identical to `clipugc ads list`, and the ids it prints are ad ids. |
137
138
  | `clipugc videos create (--image <lookId> \| --photo <file>) [flags] [--wait]` | Create a video clip from a look or your own photo. Costs 7 credits (5s) or 13 (10s); a `--scene` staged clip costs 9. |
138
139
  | `clipugc videos motion (--image <lookId> \| --photo <file>) --driver <video.mp4> [--keep-sound] [--wait]` | Animate a look/photo using a driver video (mp4/mov, max 50MB, max 30s). Costs 3 credits per second of driver video (rounded up, capped at 30s). |
139
- | `clipugc videos merge <videoId> --app-video <screenrec.mp4> --hook "..." [--music <file.mp3>] [--wait]` | Merge a clip with your app's screen recording + a hook (max 150 chars) into the final UGC ad. Costs 1 credit. `--wait` blocks until the merge render finishes (or fails, refunding the credit). |
140
- | `clipugc videos show <id>` | Show video details. |
140
+ | `clipugc videos merge <videoId> --app-video <screenrec.mp4> --hook "..." [--music <file.mp3>] [--wait]` | Merge a clip with your app's screen recording + a hook (max 150 chars) into a final UGC ad. Costs 1 credit. Prints the new **ad id** (`merged_video_id` under `--json`); `--wait` blocks until the merge render finishes (or fails, refunding the credit). |
141
+ | `clipugc videos show <id>` | Show clip details (including the id of the ad made from it, if any). |
141
142
  | `clipugc videos status <id>` | Check generation status. |
142
- | `clipugc videos download <id> [-o out.mp4]` | Download the finished video (`-o` creates missing parent directories). |
143
+ | `clipugc videos download <id> [-o out.mp4]` | Download the finished clip (`-o` creates missing parent directories). |
143
144
  | `clipugc videos retry <id> [--wait]` | Retry a failed generation. |
144
- | `clipugc videos delete <id> [--yes]` | Delete a video. |
145
+ | `clipugc videos delete <id> [--yes]` | Delete a clip. |
146
+
147
+ ### Ads
148
+
149
+ A finished UGC ad is its own resource, not a flavour of a clip — so it has its own id space.
150
+ **An ad id is not a clip id**: `clipugc ads download 121` and `clipugc videos download 121` address
151
+ different things. `videos merge <clipId>` tells you the ad id it created, and deleting an ad leaves
152
+ the clip it was made from on the influencer's profile.
153
+
154
+ | Command | Description |
155
+ |---------|-------------|
156
+ | `clipugc ads list [--status <s>] [--page N] [--per-page N]` | List your finished ads. `--status` is one of `pending`, `processing`, `completed`, `failed`. Same as `videos list --finals`. |
157
+ | `clipugc ads show <adId>` | Show ad details: merge status, hook text, watermark, credits charged, source clip id. |
158
+ | `clipugc ads download <adId> [-o out.mp4]` | Download the finished ad (`-o` creates missing parent directories; default `clipugc-ad-<adId>.mp4`). |
159
+ | `clipugc ads retry <adId> [--wait]` | Re-render a failed ad. Charges the merge credit again, and only works while the app recording is still stored (`can_retry`). |
160
+ | `clipugc ads delete <adId> [--yes]` | Delete the ad. The source clip is untouched. |
145
161
 
146
162
  `videos create` flags:
147
163
 
@@ -195,7 +211,7 @@ clipugc characters list --mine --json
195
211
 
196
212
  ### Waiting on long-running jobs
197
213
 
198
- Generation commands (`images generate`, `images variation`, `images retry`, `videos create`, `videos motion`, `videos merge`, `videos retry`) accept `--wait` to poll with a spinner until the job is `completed` or `failed`. Without `--wait`, the command returns immediately and you can poll with `images status <id>` / `videos status <id>`.
214
+ Generation commands (`images generate`, `images variation`, `images retry`, `videos create`, `videos motion`, `videos merge`, `videos retry`, `ads retry`) accept `--wait` to poll with a spinner until the job is `completed` or `failed`. Without `--wait`, the command returns immediately and you can poll with `images status <id>` / `videos status <id>` / `ads show <adId>`.
199
215
 
200
216
  ### Exit codes
201
217
 
@@ -212,10 +228,11 @@ Generation commands (`images generate`, `images variation`, `images retry`, `vid
212
228
 
213
229
  ## Claude Code Skills
214
230
 
215
- If you use [Claude Code](https://claude.ai/code), this repo ships two skills:
231
+ If you use [Claude Code](https://claude.ai/code), this repo ships three skills:
216
232
 
217
233
  - **`clipugc`** — drive the whole CLI through natural language, with automatic prerequisite checks (CLI installed, logged in, enough credits) and guided end-to-end workflows.
218
234
  - **`ugc-director`** — a TikTok UGC ad director: turns an app idea into a complete creative plan (silent-reaction archetype, hook text, casting, copy-paste look & video prompts) and executes it with the CLI. Built on research into what actually converts: mouth-closed reaction formats (no lip-sync = no AI uncanny valley), text-overlay hooks, a 12-archetype reaction taxonomy, hook formula library, and a casting matrix by app category.
235
+ - **`persona-account`** — run an ongoing AI creator account: define a persona once (niche, look, aesthetic, settings, voice, content pillars), then ask for "the next post" and get one on-brand post at a time — same face, rotating settings and reactions, grid composition rules, and a picture-before-video credit gate so you approve the character before any clip credits are spent.
219
236
 
220
237
  **Install** via the Claude Code plugin system:
221
238
 
@@ -230,6 +247,8 @@ Or clone this repo and Claude Code picks up the skills from `.claude/skills/` wh
230
247
 
231
248
  ```
232
249
  /ugc-director make a TikTok ad for my habit tracker app
250
+ /persona-account create an AI influencer for a fitness account
251
+ /persona-account give me the next post
233
252
  /clipugc create a character for my fitness app ads
234
253
  /clipugc make a UGC ad from my screen recording
235
254
  /clipugc how many credits do I have left
package/dist/cli.js CHANGED
@@ -6,6 +6,7 @@ import { registerCreditsCommands } from './commands/credits.js';
6
6
  import { registerAccountCommands } from './commands/account.js';
7
7
  import { registerCharactersCommands } from './commands/characters.js';
8
8
  import { registerImagesCommands } from './commands/images.js';
9
+ import { registerAdsCommands } from './commands/ads.js';
9
10
  import { registerVideosCommands } from './commands/videos.js';
10
11
  import { registerHooksCommands } from './commands/hooks.js';
11
12
  export function createCli() {
@@ -25,6 +26,7 @@ export function createCli() {
25
26
  registerCharactersCommands(program);
26
27
  registerImagesCommands(program);
27
28
  registerVideosCommands(program);
29
+ registerAdsCommands(program);
28
30
  registerHooksCommands(program);
29
31
  return program;
30
32
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CACV,yGAAyG;QACzG,2FAA2F,CAC5F;SACA,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,uBAAuB,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,kBAAkB,CAAC,wBAAwB,CAAC;SAC5C,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAElC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CACV,yGAAyG;QACzG,2FAA2F,CAC5F;SACA,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,uBAAuB,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,kBAAkB,CAAC,wBAAwB,CAAC;SAC5C,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAElC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Command } from 'commander';
2
+ import { type MergedVideo } from '../services/ads.service.js';
3
+ /** Shared table shape for a list of ads. */
4
+ export declare const AD_COLUMNS: {
5
+ header: string;
6
+ value: (a: MergedVideo) => string | number | null | undefined;
7
+ }[];
8
+ /**
9
+ * `clipugc ads` — finished UGC ads (`/merged-videos`), the resource a merge produces.
10
+ *
11
+ * An AD ID is NOT a clip id: `ads download 121` and `videos download 121` address different
12
+ * things. `videos merge <clipId>` reports the ad id it created; `videos list --finals` lists ads.
13
+ */
14
+ export declare function registerAdsCommands(program: Command): void;
@@ -0,0 +1,150 @@
1
+ import { createApiClient } from '../services/api.js';
2
+ import { deleteMergedVideo, downloadMergedVideo, getMergedVideo, listMergedVideos, retryMergedVideo, } from '../services/ads.service.js';
3
+ import { formatStatus, isJsonMode, printJson, printPagination, printTable } from '../utils/output.js';
4
+ import { waitForMerge } from '../utils/poll.js';
5
+ import { confirm } from '../utils/prompt.js';
6
+ import { AbortedError, ValidationError } from '../utils/errors.js';
7
+ import { logger } from '../utils/logger.js';
8
+ function parsePositiveInt(flag) {
9
+ return (value) => {
10
+ const n = Number.parseInt(value, 10);
11
+ if (!Number.isInteger(n) || String(n) !== value.trim() || n < 1) {
12
+ throw new ValidationError(`${flag} must be a positive integer (got "${value}").`);
13
+ }
14
+ return n;
15
+ };
16
+ }
17
+ /** Shared table shape for a list of ads. */
18
+ export const AD_COLUMNS = [
19
+ { header: 'AD ID', value: (a) => a.id },
20
+ { header: 'Status', value: (a) => formatStatus(a.status ?? '') },
21
+ { header: 'Hook', value: (a) => truncate(a.hook_text) },
22
+ { header: 'Clip', value: (a) => a.character_video_id },
23
+ { header: 'Created', value: (a) => a.created_at },
24
+ ];
25
+ function truncate(text, max = 40) {
26
+ if (!text)
27
+ return undefined;
28
+ return text.length > max ? `${text.slice(0, max - 1)}…` : text;
29
+ }
30
+ /**
31
+ * `clipugc ads` — finished UGC ads (`/merged-videos`), the resource a merge produces.
32
+ *
33
+ * An AD ID is NOT a clip id: `ads download 121` and `videos download 121` address different
34
+ * things. `videos merge <clipId>` reports the ad id it created; `videos list --finals` lists ads.
35
+ */
36
+ export function registerAdsCommands(program) {
37
+ const ads = program
38
+ .command('ads')
39
+ .description('Manage your finished UGC ads (the output of `videos merge`)');
40
+ ads
41
+ .command('list')
42
+ .description('List your finished UGC ads')
43
+ .option('--status <status>', 'Filter by merge status: pending, processing, completed, failed')
44
+ .option('--page <n>', 'Page number', parsePositiveInt('--page'))
45
+ .option('--per-page <n>', 'Results per page (max 50)', parsePositiveInt('--per-page'))
46
+ .action(async (opts, cmd) => {
47
+ const json = isJsonMode(cmd);
48
+ const api = await createApiClient();
49
+ const { items, pagination, raw } = await listMergedVideos(api, {
50
+ page: opts.page,
51
+ perPage: opts.perPage,
52
+ status: opts.status,
53
+ });
54
+ if (json) {
55
+ printJson(raw);
56
+ return;
57
+ }
58
+ printTable(items, AD_COLUMNS);
59
+ printPagination(pagination);
60
+ });
61
+ ads
62
+ .command('show <adId>')
63
+ .description('Show details of a finished UGC ad')
64
+ .action(async (adId, cmd) => {
65
+ const json = isJsonMode(cmd);
66
+ const api = await createApiClient();
67
+ const ad = await getMergedVideo(api, adId);
68
+ if (json) {
69
+ printJson(ad);
70
+ return;
71
+ }
72
+ logger.plain(`Ad ${ad.id}`);
73
+ logger.kv('status', formatStatus(ad.status ?? ''));
74
+ for (const [key, value] of Object.entries(ad)) {
75
+ if (key === 'id' || key === 'status')
76
+ continue;
77
+ if (value === null || ['string', 'number', 'boolean'].includes(typeof value)) {
78
+ logger.kv(key, value);
79
+ }
80
+ }
81
+ if (ad.status === 'completed') {
82
+ logger.hint(`Download it with \`clipugc ads download ${ad.id}\``);
83
+ }
84
+ if (ad.status === 'failed') {
85
+ if (ad.can_retry) {
86
+ logger.hint(`Re-render it with \`clipugc ads retry ${ad.id}\` (charges the merge credit again)`);
87
+ }
88
+ else {
89
+ logger.warn('This ad cannot be re-rendered — its app recording is no longer stored. Run `clipugc videos merge` again.');
90
+ }
91
+ }
92
+ });
93
+ ads
94
+ .command('download <adId>')
95
+ .description('Download a finished UGC ad to disk')
96
+ .option('-o, --output <file>', 'Destination file (default: clipugc-ad-<adId>.mp4)')
97
+ .action(async (adId, opts, cmd) => {
98
+ const json = isJsonMode(cmd);
99
+ const api = await createApiClient();
100
+ const dest = await downloadMergedVideo(api, adId, { output: opts.output, quiet: json });
101
+ if (json) {
102
+ printJson({ merged_video_id: adId, output: dest });
103
+ }
104
+ });
105
+ ads
106
+ .command('retry <adId>')
107
+ .description('Re-render a failed UGC ad. Charges the merge credit again')
108
+ .option('--wait', 'Wait until the merge completes')
109
+ .action(async (adId, opts, cmd) => {
110
+ const json = isJsonMode(cmd);
111
+ const api = await createApiClient();
112
+ const ad = await retryMergedVideo(api, adId);
113
+ if (opts.wait) {
114
+ const final = await waitForMerge(() => getMergedVideo(api, adId), { label: 'Merging ad', quiet: json });
115
+ if (json) {
116
+ printJson(final);
117
+ }
118
+ else {
119
+ logger.hint(`Download the finished ad with \`clipugc ads download ${adId}\``);
120
+ }
121
+ return;
122
+ }
123
+ if (json) {
124
+ printJson(ad);
125
+ return;
126
+ }
127
+ logger.success(`Re-render queued (ad ${adId}).`);
128
+ logger.hint(`Check it with \`clipugc ads show ${adId}\` — or re-run with --wait.`);
129
+ });
130
+ ads
131
+ .command('delete <adId>')
132
+ .description('Delete a finished UGC ad. The clip it was made from stays on the influencer profile')
133
+ .option('-y, --yes', 'Skip the confirmation prompt')
134
+ .action(async (adId, opts, cmd) => {
135
+ const json = isJsonMode(cmd);
136
+ if (!opts.yes) {
137
+ const ok = await confirm(`Delete ad ${adId}? This removes only the finished ad — the source clip stays. This cannot be undone.`);
138
+ if (!ok)
139
+ throw new AbortedError();
140
+ }
141
+ const api = await createApiClient();
142
+ const { data, message } = await deleteMergedVideo(api, adId);
143
+ if (json) {
144
+ printJson(data);
145
+ return;
146
+ }
147
+ logger.success(message ?? `Ad ${adId} deleted.`);
148
+ });
149
+ }
150
+ //# sourceMappingURL=ads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ads.js","sourceRoot":"","sources":["../../src/commands/ads.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import { createApiClient } from '../services/api.js';
2
2
  import { checkVideoStatus, createImageToVideo, createMotionControl, deleteVideo, downloadVideo, getVideo, listVideos, mergeVideo, retryVideo, } from '../services/videos.service.js';
3
+ import { getMergedVideo, listMergedVideos } from '../services/ads.service.js';
4
+ import { AD_COLUMNS } from './ads.js';
3
5
  import { uploadFile } from '../services/upload.service.js';
4
6
  import { formatStatus, isJsonMode, printJson, printPagination, printTable } from '../utils/output.js';
5
7
  import { waitForCompletion, waitForMerge } from '../utils/poll.js';
6
8
  import { confirm } from '../utils/prompt.js';
7
- import { AbortedError, ValidationError } from '../utils/errors.js';
9
+ import { AbortedError, ApiError, ValidationError } from '../utils/errors.js';
8
10
  import { logger } from '../utils/logger.js';
9
11
  function parsePositiveInt(flag) {
10
12
  return (value) => {
@@ -31,7 +33,11 @@ async function resolveImageSource(api, opts, quiet) {
31
33
  const sourceImageKey = await uploadFile(api, 'photo', opts.photo, { quiet });
32
34
  return { sourceImageKey };
33
35
  }
34
- /** Human label for a video's merge state. */
36
+ /**
37
+ * Human label for a CLIP's merge state — the lifecycle of the ad rendered from it, which the clip
38
+ * resource still mirrors so the clip list can show "already used". The ad itself lives under
39
+ * `clipugc ads`.
40
+ */
35
41
  function mergedLabel(v) {
36
42
  const ms = typeof v.merge_status === 'string' ? v.merge_status : undefined;
37
43
  if (ms)
@@ -66,21 +72,38 @@ export function registerVideosCommands(program) {
66
72
  .description('Create, manage, and download UGC character videos');
67
73
  videos
68
74
  .command('list')
69
- .description('List your character videos')
75
+ .description('List your character videos (clips). --finals lists finished ads instead')
70
76
  .option('--character <id>', 'Only videos of this AI character')
71
77
  .option('--mergeable', 'Only completed, unmerged clips (ready for `videos merge`)')
72
- .option('--finals', 'Only merged final UGC videos')
78
+ .option('--finals', 'List finished UGC ads instead of clips (same as `clipugc ads list`)')
73
79
  .option('--page <n>', 'Page number', parsePositiveInt('--page'))
74
80
  .option('--per-page <n>', 'Results per page (max 50)', parsePositiveInt('--per-page'))
75
81
  .action(async (opts, cmd) => {
76
82
  const json = isJsonMode(cmd);
77
83
  const api = await createApiClient();
84
+ // Ads are a separate resource, so --finals is not a filter on the clip list any more: it
85
+ // switches to /merged-videos. The ids it prints are AD ids — feed them to `clipugc ads`.
86
+ if (opts.finals) {
87
+ if (opts.mergeable) {
88
+ throw new ValidationError('--mergeable and --finals are mutually exclusive — pick one.');
89
+ }
90
+ if (opts.character) {
91
+ throw new ValidationError('--character filters clips, not ads. Drop it, or drop --finals.');
92
+ }
93
+ const ads = await listMergedVideos(api, { page: opts.page, perPage: opts.perPage });
94
+ if (json) {
95
+ printJson(ads.raw);
96
+ return;
97
+ }
98
+ printTable(ads.items, AD_COLUMNS);
99
+ printPagination(ads.pagination);
100
+ return;
101
+ }
78
102
  const { items, pagination, raw } = await listVideos(api, {
79
103
  page: opts.page,
80
104
  perPage: opts.perPage,
81
105
  aiCharacterId: opts.character,
82
106
  mergeable: opts.mergeable,
83
- finals: opts.finals,
84
107
  });
85
108
  if (json) {
86
109
  printJson(raw);
@@ -153,16 +176,19 @@ export function registerVideosCommands(program) {
153
176
  const appVideoKey = await uploadFile(api, 'app_video', opts.appVideo, { quiet: json });
154
177
  const musicKey = opts.music ? await uploadFile(api, 'music', opts.music, { quiet: json }) : undefined;
155
178
  const video = await mergeVideo(api, videoId, { appVideoKey, hookText: opts.hook, musicKey });
156
- const id = String(video.id ?? videoId);
179
+ // The merge response is the SOURCE CLIP carrying the new ad's id. That ad id — not the
180
+ // clip id we posted to — is the handle for status, download and delete.
181
+ const adId = video.merged_video_id == null ? undefined : String(video.merged_video_id);
157
182
  if (opts.wait) {
158
- // A clip's own status stays "completed" during a merge, so wait on the
159
- // video resource's merge_status (processing → completed | failed).
160
- const final = await waitForMerge(() => getVideo(api, id), { label: 'Merging video', quiet: json });
183
+ if (!adId) {
184
+ throw new ApiError('The merge was accepted but the API did not return a merged_video_id, so --wait has nothing to poll. Find the ad with `clipugc ads list`.');
185
+ }
186
+ const final = await waitForMerge(() => getMergedVideo(api, adId), { label: 'Merging ad', quiet: json });
161
187
  if (json) {
162
188
  printJson(final);
163
189
  }
164
190
  else {
165
- logger.hint(`Download the finished ad with \`clipugc videos download ${id}\``);
191
+ logger.hint(`Download the finished ad with \`clipugc ads download ${adId}\``);
166
192
  }
167
193
  return;
168
194
  }
@@ -170,8 +196,10 @@ export function registerVideosCommands(program) {
170
196
  printJson(video);
171
197
  return;
172
198
  }
173
- logger.success(`Merge queued (video ${id}). It renders in the background.`);
174
- logger.hint(`Wait for it with \`clipugc videos status ${id}\` — or re-run with --wait.`);
199
+ logger.success(`Merge queued${adId ? ` (ad ${adId}, from clip ${videoId})` : ''}. It renders in the background.`);
200
+ logger.hint(adId
201
+ ? `Wait for it with \`clipugc ads show ${adId}\` — or re-run with --wait.`
202
+ : 'Find it with `clipugc ads list` — or re-run with --wait.');
175
203
  });
176
204
  videos
177
205
  .command('show <id>')
@@ -194,7 +222,10 @@ export function registerVideosCommands(program) {
194
222
  }
195
223
  }
196
224
  if (video.status === 'completed') {
197
- logger.hint(`Download it with \`clipugc videos download ${video.id}\``);
225
+ logger.hint(`Download the clip with \`clipugc videos download ${video.id}\``);
226
+ }
227
+ if (video.merged_video_id != null) {
228
+ logger.hint(`The ad made from this clip is \`clipugc ads show ${video.merged_video_id}\``);
198
229
  }
199
230
  });
200
231
  videos
@@ -221,7 +252,11 @@ export function registerVideosCommands(program) {
221
252
  logger.hint(`Retry with \`clipugc videos retry ${id}\``);
222
253
  }
223
254
  if (mergeStatus === 'failed') {
224
- logger.warn('The merge failed and its credit was refunded. Re-run `clipugc videos merge`.');
255
+ logger.warn('The merge failed and its credits were refunded. Re-render it with `clipugc ads retry <adId>`.');
256
+ }
257
+ const adId = check.merged_video_id;
258
+ if (adId != null) {
259
+ logger.hint(`Ad made from this clip: \`clipugc ads show ${String(adId)}\``);
225
260
  }
226
261
  if (check.status === 'completed') {
227
262
  logger.hint(`Download it with \`clipugc videos download ${id}\``);
@@ -1 +1 @@
1
- {"version":3,"file":"videos.js","sourceRoot":"","sources":["../../src/commands/videos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"videos.js","sourceRoot":"","sources":["../../src/commands/videos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { ApiClient } from './api.js';
2
+ import type { Pagination } from '../types/index.js';
3
+ /**
4
+ * A finished UGC ad (clip + app recording + hook), as returned by the /merged-videos endpoints.
5
+ *
6
+ * `id` is a MERGED-VIDEO id and lives in a different id space from a clip id: it addresses
7
+ * `/merged-videos/{id}`, never `/character-videos/{id}`. The clip the ad was rendered from is
8
+ * `character_video_id` (null once that clip has been deleted).
9
+ */
10
+ export interface MergedVideo {
11
+ id: number | string;
12
+ uuid?: string;
13
+ /** The clip this ad was rendered from — null once that clip is deleted. */
14
+ character_video_id?: number | string | null;
15
+ ai_character_id?: number | string | null;
16
+ /** pending | processing | completed | failed — this IS the merge lifecycle. */
17
+ status: string;
18
+ hook_text?: string | null;
19
+ has_watermark?: boolean;
20
+ credits_charged?: number;
21
+ /** Server verdict: a failed ad is only re-composable while the app recording is still stored. */
22
+ can_retry?: boolean;
23
+ media?: {
24
+ merged_url?: string | null;
25
+ merged_thumbnail_url?: string | null;
26
+ has_merged?: boolean;
27
+ source_clip_url?: string | null;
28
+ };
29
+ created_at?: string;
30
+ [key: string]: unknown;
31
+ }
32
+ export interface ListMergedVideosOptions {
33
+ page?: number;
34
+ perPage?: number;
35
+ /** Server-side status filter: pending | processing | completed | failed. */
36
+ status?: string;
37
+ }
38
+ /** GET /merged-videos — paginated list of the viewer's own finished ads. */
39
+ export declare function listMergedVideos(api: ApiClient, opts?: ListMergedVideosOptions): Promise<{
40
+ items: MergedVideo[];
41
+ pagination?: Pagination;
42
+ raw: unknown;
43
+ }>;
44
+ /** GET /merged-videos/{id}. Also the poll call — there is no check-status route for ads. */
45
+ export declare function getMergedVideo(api: ApiClient, id: string): Promise<MergedVideo>;
46
+ /** POST /merged-videos/{id}/retry — re-renders a failed ad. Charges the merge credit again. */
47
+ export declare function retryMergedVideo(api: ApiClient, id: string): Promise<MergedVideo>;
48
+ /** DELETE /merged-videos/{id} — removes the ad only; the source clip stays on the profile. */
49
+ export declare function deleteMergedVideo(api: ApiClient, id: string): Promise<{
50
+ data: unknown;
51
+ message: string | null;
52
+ }>;
53
+ /**
54
+ * GET /merged-videos/{id}/download → data.download_url, then fetch that URL and write the bytes
55
+ * to disk. Returns the destination path.
56
+ */
57
+ export declare function downloadMergedVideo(api: ApiClient, id: string, opts?: {
58
+ output?: string;
59
+ quiet?: boolean;
60
+ }): Promise<string>;
@@ -0,0 +1,51 @@
1
+ import { extractList, MAX_PER_PAGE } from './videos.service.js';
2
+ import { ApiError, ValidationError } from '../utils/errors.js';
3
+ import { saveUrlToFile } from '../utils/download.js';
4
+ const AD_STATUSES = ['pending', 'processing', 'completed', 'failed'];
5
+ /** GET /merged-videos — paginated list of the viewer's own finished ads. */
6
+ export async function listMergedVideos(api, opts = {}) {
7
+ if (opts.perPage !== undefined && (!Number.isInteger(opts.perPage) || opts.perPage < 1 || opts.perPage > MAX_PER_PAGE)) {
8
+ throw new ValidationError(`--per-page must be an integer between 1 and ${MAX_PER_PAGE}.`);
9
+ }
10
+ if (opts.page !== undefined && (!Number.isInteger(opts.page) || opts.page < 1)) {
11
+ throw new ValidationError('--page must be a positive integer.');
12
+ }
13
+ if (opts.status !== undefined && !AD_STATUSES.includes(opts.status)) {
14
+ throw new ValidationError(`--status must be one of: ${AD_STATUSES.join(', ')} (got "${opts.status}").`);
15
+ }
16
+ const raw = await api.get('/merged-videos', {
17
+ query: {
18
+ page: opts.page,
19
+ per_page: opts.perPage,
20
+ status: opts.status,
21
+ },
22
+ });
23
+ const { items, pagination } = extractList(raw);
24
+ return { items, pagination, raw };
25
+ }
26
+ /** GET /merged-videos/{id}. Also the poll call — there is no check-status route for ads. */
27
+ export async function getMergedVideo(api, id) {
28
+ return api.get(`/merged-videos/${encodeURIComponent(id)}`);
29
+ }
30
+ /** POST /merged-videos/{id}/retry — re-renders a failed ad. Charges the merge credit again. */
31
+ export async function retryMergedVideo(api, id) {
32
+ return api.post(`/merged-videos/${encodeURIComponent(id)}/retry`);
33
+ }
34
+ /** DELETE /merged-videos/{id} — removes the ad only; the source clip stays on the profile. */
35
+ export async function deleteMergedVideo(api, id) {
36
+ const result = await api.request('DELETE', `/merged-videos/${encodeURIComponent(id)}`);
37
+ return { data: result.data, message: result.message };
38
+ }
39
+ /**
40
+ * GET /merged-videos/{id}/download → data.download_url, then fetch that URL and write the bytes
41
+ * to disk. Returns the destination path.
42
+ */
43
+ export async function downloadMergedVideo(api, id, opts = {}) {
44
+ const data = await api.get(`/merged-videos/${encodeURIComponent(id)}/download`);
45
+ const url = data?.download_url;
46
+ if (!url) {
47
+ throw new ApiError(`The API did not return a download URL for ad ${id}. Has the merge finished? Check \`clipugc ads show ${id}\`.`);
48
+ }
49
+ return saveUrlToFile(url, opts.output || `clipugc-ad-${id}.mp4`, Boolean(opts.quiet));
50
+ }
51
+ //# sourceMappingURL=ads.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ads.service.js","sourceRoot":"","sources":["../../src/services/ads.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAuCrD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAErE,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAc,EACd,OAAgC,EAAE;IAElC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;QACvH,MAAM,IAAI,eAAe,CAAC,+CAA+C,YAAY,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,eAAe,CAAC,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAU,gBAAgB,EAAE;QACnD,KAAK,EAAE;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;KACF,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,WAAW,CAAc,GAAG,CAAC,CAAC;IAC5D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAc,EAAE,EAAU;IAC7D,OAAO,GAAG,CAAC,GAAG,CAAc,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAc,EAAE,EAAU;IAC/D,OAAO,GAAG,CAAC,IAAI,CAAc,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAc,EACd,EAAU;IAEV,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAU,QAAQ,EAAE,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAc,EACd,EAAU,EACV,OAA6C,EAAE;IAE/C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAA4B,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAC3G,MAAM,GAAG,GAAG,IAAI,EAAE,YAAY,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,QAAQ,CAChB,gDAAgD,EAAE,sDAAsD,EAAE,KAAK,CAChH,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACxF,CAAC"}
@@ -17,6 +17,11 @@ export interface CharacterVideo {
17
17
  is_merged?: boolean;
18
18
  /** processing | completed | failed | null (never merged). */
19
19
  merge_status?: string | null;
20
+ /**
21
+ * Id of the ad rendered from this clip in /merged-videos (null when never merged). Returned by
22
+ * the merge endpoint — the handle for everything after the merge. NOT this clip's `id`.
23
+ */
24
+ merged_video_id?: number | string | null;
20
25
  created_at?: string;
21
26
  [key: string]: unknown;
22
27
  }
@@ -64,10 +69,8 @@ export interface ListVideosOptions {
64
69
  aiCharacterId?: string;
65
70
  /** Only completed, unmerged clips — ready for `videos merge` (mergeable=1). */
66
71
  mergeable?: boolean;
67
- /** Only merged final videos (finals=1). */
68
- finals?: boolean;
69
72
  }
70
- /** GET /character-videos — paginated list. */
73
+ /** GET /character-videos — paginated list of CLIPS. Finished ads live in ads.service. */
71
74
  export declare function listVideos(api: ApiClient, opts?: ListVideosOptions): Promise<{
72
75
  items: CharacterVideo[];
73
76
  pagination?: Pagination;
@@ -1,7 +1,5 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import ora from 'ora';
4
- import { ApiError, NetworkError, ValidationError } from '../utils/errors.js';
1
+ import { ApiError, ValidationError } from '../utils/errors.js';
2
+ import { saveUrlToFile } from '../utils/download.js';
5
3
  export const MAX_PROMPT_LENGTH = 1500;
6
4
  export const MAX_SCENE_PROMPT_LENGTH = 600;
7
5
  export const MAX_HOOK_TEXT_LENGTH = 150;
@@ -18,7 +16,7 @@ export function extractList(data) {
18
16
  if (data && typeof data === 'object') {
19
17
  const record = data;
20
18
  const pagination = record.pagination ?? undefined;
21
- for (const key of ['videos', 'character_videos', 'items', 'data', 'results']) {
19
+ for (const key of ['videos', 'character_videos', 'merged_videos', 'items', 'data', 'results']) {
22
20
  if (Array.isArray(record[key])) {
23
21
  return { items: record[key], pagination };
24
22
  }
@@ -60,7 +58,7 @@ function baseVideoPayload(input) {
60
58
  payload.keep_original_sound = input.keepOriginalSound;
61
59
  return payload;
62
60
  }
63
- /** GET /character-videos — paginated list. */
61
+ /** GET /character-videos — paginated list of CLIPS. Finished ads live in ads.service. */
64
62
  export async function listVideos(api, opts = {}) {
65
63
  if (opts.perPage !== undefined && (!Number.isInteger(opts.perPage) || opts.perPage < 1 || opts.perPage > MAX_PER_PAGE)) {
66
64
  throw new ValidationError(`--per-page must be an integer between 1 and ${MAX_PER_PAGE}.`);
@@ -68,16 +66,12 @@ export async function listVideos(api, opts = {}) {
68
66
  if (opts.page !== undefined && (!Number.isInteger(opts.page) || opts.page < 1)) {
69
67
  throw new ValidationError('--page must be a positive integer.');
70
68
  }
71
- if (opts.mergeable && opts.finals) {
72
- throw new ValidationError('--mergeable and --finals are mutually exclusive — pick one.');
73
- }
74
69
  const raw = await api.get('/character-videos', {
75
70
  query: {
76
71
  page: opts.page,
77
72
  per_page: opts.perPage,
78
73
  ai_character_id: opts.aiCharacterId,
79
74
  mergeable: opts.mergeable ? 1 : undefined,
80
- finals: opts.finals ? 1 : undefined,
81
75
  },
82
76
  });
83
77
  const { items, pagination } = extractList(raw);
@@ -154,34 +148,6 @@ export async function downloadVideo(api, id, opts = {}) {
154
148
  if (!url) {
155
149
  throw new ApiError('The API did not return a download URL. Is the video completed? Check `clipugc videos status`.');
156
150
  }
157
- const dest = opts.output || `clipugc-video-${id}.mp4`;
158
- const spinner = opts.quiet ? null : ora(`Downloading to ${dest}`).start();
159
- try {
160
- let response;
161
- try {
162
- response = await fetch(url);
163
- }
164
- catch (err) {
165
- const reason = err instanceof Error ? err.message : String(err);
166
- throw new NetworkError(`Download failed: ${reason}`);
167
- }
168
- if (!response.ok) {
169
- throw new NetworkError(`Download failed (HTTP ${response.status}). The link may have expired — try again.`);
170
- }
171
- const bytes = Buffer.from(await response.arrayBuffer());
172
- // Create missing parent directories so -o can target workspace paths
173
- // like clipugc/influencers/<id>/clips/… directly.
174
- const dir = path.dirname(dest);
175
- if (dir && dir !== '.')
176
- await fs.mkdir(dir, { recursive: true });
177
- await fs.writeFile(dest, bytes);
178
- spinner?.succeed(`Saved ${dest} (${(bytes.length / (1024 * 1024)).toFixed(1)} MB)`);
179
- return dest;
180
- }
181
- catch (err) {
182
- if (spinner?.isSpinning)
183
- spinner.fail(`Download to ${dest} failed`);
184
- throw err;
185
- }
151
+ return saveUrlToFile(url, opts.output || `clipugc-video-${id}.mp4`, Boolean(opts.quiet));
186
152
  }
187
153
  //# sourceMappingURL=videos.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"videos.service.js","sourceRoot":"","sources":["../../src/services/videos.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"videos.service.js","sourceRoot":"","sources":["../../src/services/videos.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Fetch a (usually presigned) URL and write the bytes to `dest`, creating missing parent
3
+ * directories so `-o` can target workspace paths like
4
+ * `clipugc/influencers/<id>/ads/…` directly. Returns the destination path.
5
+ */
6
+ export declare function saveUrlToFile(url: string, dest: string, quiet?: boolean): Promise<string>;
@@ -0,0 +1,38 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import ora from 'ora';
4
+ import { NetworkError } from './errors.js';
5
+ /**
6
+ * Fetch a (usually presigned) URL and write the bytes to `dest`, creating missing parent
7
+ * directories so `-o` can target workspace paths like
8
+ * `clipugc/influencers/<id>/ads/…` directly. Returns the destination path.
9
+ */
10
+ export async function saveUrlToFile(url, dest, quiet = false) {
11
+ const spinner = quiet ? null : ora(`Downloading to ${dest}`).start();
12
+ try {
13
+ let response;
14
+ try {
15
+ response = await fetch(url);
16
+ }
17
+ catch (err) {
18
+ const reason = err instanceof Error ? err.message : String(err);
19
+ throw new NetworkError(`Download failed: ${reason}`);
20
+ }
21
+ if (!response.ok) {
22
+ throw new NetworkError(`Download failed (HTTP ${response.status}). The link may have expired — try again.`);
23
+ }
24
+ const bytes = Buffer.from(await response.arrayBuffer());
25
+ const dir = path.dirname(dest);
26
+ if (dir && dir !== '.')
27
+ await fs.mkdir(dir, { recursive: true });
28
+ await fs.writeFile(dest, bytes);
29
+ spinner?.succeed(`Saved ${dest} (${(bytes.length / (1024 * 1024)).toFixed(1)} MB)`);
30
+ return dest;
31
+ }
32
+ catch (err) {
33
+ if (spinner?.isSpinning)
34
+ spinner.fail(`Download to ${dest} failed`);
35
+ throw err;
36
+ }
37
+ }
38
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/utils/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,KAAK,GAAG,KAAK;IAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAErE,IAAI,CAAC;QACH,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,IAAI,YAAY,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,YAAY,CAAC,yBAAyB,QAAQ,CAAC,MAAM,2CAA2C,CAAC,CAAC;QAC9G,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;YAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,EAAE,UAAU;YAAE,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,CAAC;QACpE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -15,18 +15,16 @@ export interface StatusCheck {
15
15
  failure_reason?: string | null;
16
16
  error_message?: string | null;
17
17
  }
18
- /** Payload shape for merge polling (the video resource carries merge_status). */
18
+ /** Payload shape for merge polling: a merged ad's own `status` IS the merge lifecycle. */
19
19
  export interface MergeStatusCheck {
20
- merge_status?: string | null;
21
- media?: {
22
- has_merged?: boolean;
23
- };
20
+ /** pending | processing | completed | failed. */
21
+ status?: string | null;
24
22
  [key: string]: unknown;
25
23
  }
26
24
  /**
27
- * Poll a merge until it finishes. A clip's own `status` stays "completed" during a
28
- * merge, so we watch `merge_status` (processing → completed | failed), falling back
29
- * to `media.has_merged` for older servers. Throws ApiError on merge failure/timeout.
25
+ * Poll a merged ad (`GET /merged-videos/{id}`) until its merge finishes. Ads are their own
26
+ * resource, so unlike a clip — whose `status` stays "completed" while a merge renders — the ad's
27
+ * `status` is the merge lifecycle itself. Throws ApiError on merge failure/timeout.
30
28
  */
31
29
  export declare function waitForMerge<T extends MergeStatusCheck>(check: () => Promise<T>, options?: PollOptions): Promise<T>;
32
30
  /**
@@ -3,9 +3,9 @@ import chalk from 'chalk';
3
3
  import { ApiError } from './errors.js';
4
4
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
5
5
  /**
6
- * Poll a merge until it finishes. A clip's own `status` stays "completed" during a
7
- * merge, so we watch `merge_status` (processing → completed | failed), falling back
8
- * to `media.has_merged` for older servers. Throws ApiError on merge failure/timeout.
6
+ * Poll a merged ad (`GET /merged-videos/{id}`) until its merge finishes. Ads are their own
7
+ * resource, so unlike a clip — whose `status` stays "completed" while a merge renders — the ad's
8
+ * `status` is the merge lifecycle itself. Throws ApiError on merge failure/timeout.
9
9
  */
10
10
  export async function waitForMerge(check, options = {}) {
11
11
  const intervalMs = options.intervalMs ?? 6000;
@@ -17,22 +17,22 @@ export async function waitForMerge(check, options = {}) {
17
17
  for (;;) {
18
18
  const result = await check();
19
19
  const elapsed = Math.round((Date.now() - start) / 1000);
20
- const merged = result.merge_status === 'completed' || result.media?.has_merged === true;
21
- const failed = result.merge_status === 'failed';
20
+ const merged = result.status === 'completed';
21
+ const failed = result.status === 'failed';
22
22
  if (merged) {
23
23
  spinner?.succeed(`${label} completed in ${formatElapsed(elapsed)}`);
24
24
  return result;
25
25
  }
26
26
  if (failed) {
27
- spinner?.fail(`${label} failed — the merge credit was refunded.`);
28
- throw new ApiError(`${label} failed. The merge credit was refunded; try again.`);
27
+ spinner?.fail(`${label} failed — the merge credits were refunded.`);
28
+ throw new ApiError(`${label} failed. The merge credits were refunded; retry with \`clipugc ads retry\`.`);
29
29
  }
30
30
  if (Date.now() - start > timeoutMs) {
31
31
  spinner?.fail(`${label} timed out after ${formatElapsed(elapsed)} — it may still finish server-side.`);
32
- throw new ApiError(`${label} timed out. Check \`clipugc videos status\` later.`);
32
+ throw new ApiError(`${label} timed out. Check \`clipugc ads show <adId>\` later.`);
33
33
  }
34
34
  if (spinner) {
35
- spinner.text = `${label}... ${chalk.dim(`(${result.merge_status ?? 'processing'}, ${formatElapsed(elapsed)} elapsed)`)}`;
35
+ spinner.text = `${label}... ${chalk.dim(`(${result.status ?? 'processing'}, ${formatElapsed(elapsed)} elapsed)`)}`;
36
36
  }
37
37
  await sleep(intervalMs);
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/utils/poll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/utils/poll.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clipugc",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Official CLI for ClipUGC — create AI characters, generate looks, and produce UGC-style videos for your mobile app from the terminal.",
5
5
  "type": "module",
6
6
  "bin": {