clipugc 0.3.0 → 0.3.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 +25 -9
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/ads.d.ts +14 -0
- package/dist/commands/ads.js +150 -0
- package/dist/commands/ads.js.map +1 -0
- package/dist/commands/videos.js +49 -14
- package/dist/commands/videos.js.map +1 -1
- package/dist/services/ads.service.d.ts +60 -0
- package/dist/services/ads.service.js +51 -0
- package/dist/services/ads.service.js.map +1 -0
- package/dist/services/videos.service.d.ts +6 -3
- package/dist/services/videos.service.js +5 -39
- package/dist/services/videos.service.js.map +1 -1
- package/dist/utils/download.d.ts +6 -0
- package/dist/utils/download.js +38 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/poll.d.ts +6 -8
- package/dist/utils/poll.js +9 -9
- package/dist/utils/poll.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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
|
|
140
|
-
| `clipugc videos show <id>` | Show
|
|
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
|
|
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
|
|
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
|
|
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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"}
|
package/dist/commands/videos.js
CHANGED
|
@@ -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
|
-
/**
|
|
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', '
|
|
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
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
|
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 (
|
|
174
|
-
logger.hint(
|
|
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
|
|
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
|
|
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":"AACA,OAAO,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,GAGX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,CAAC,KAAa,EAAU,EAAE;QAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,qCAAqC,KAAK,KAAK,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAC/B,GAAc,EACd,IAAwC,EACxC,KAAc;IAEd,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CACvB,qHAAqH,CACtH,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,yBAAyB,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED,6CAA6C;AAC7C,SAAS,WAAW,CAAC,CAAiB;IACpC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,kCAAkC;IACrD,MAAM,KAAK,GAAG,CAAC,CAAC,KAA6C,CAAC;IAC9D,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,EAAE,UAAU,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IAC3E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,YAAY,CACzB,GAAc,EACd,KAAqB,EACrB,IAAwB,EACxB,IAAa,EACb,KAAa;IAEb,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACzC,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAmD,EACjF,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CACvB,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,aAAa,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAChG,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE,6BAA6B,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mDAAmD,CAAC,CAAC;IAEpE,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,kBAAkB,EAAE,kCAAkC,CAAC;SAC9D,MAAM,CAAC,aAAa,EAAE,2DAA2D,CAAC;SAClF,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;SAC/D,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;SACrF,MAAM,CAAC,KAAK,EAAE,IAAoG,EAAE,GAAY,EAAE,EAAE;QACnI,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;YACvD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,SAAS;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,UAAU,CAAC,KAAK,EAAE;YAChB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;YAChE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAClD,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;YAClD,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE;SAClD,CAAC,CAAC;QACH,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6JAA6J,CAAC;SAC1K,MAAM,CAAC,kBAAkB,EAAE,kDAAkD,CAAC;SAC9E,MAAM,CAAC,gBAAgB,EAAE,6DAA6D,CAAC;SACvF,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,gBAAgB,EAAE,wFAAwF,CAAC;SAClH,MAAM,CAAC,sBAAsB,EAAE,+DAA+D,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;SAC/H,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CACL,KAAK,EACH,IAQC,EACD,GAAY,EACZ,EAAE;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE;YAC1C,GAAG,MAAM;YACT,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,KAAK;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,iBAAiB,EAAE,IAAI,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;IAEJ,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iJAAiJ,CAAC;SAC9J,MAAM,CAAC,kBAAkB,EAAE,kDAAkD,CAAC;SAC9E,MAAM,CAAC,gBAAgB,EAAE,6DAA6D,CAAC;SACvF,cAAc,CAAC,sBAAsB,EAAE,mEAAmE,CAAC;SAC3G,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,cAAc,EAAE,wCAAwC,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CACL,KAAK,EACH,IAOC,EACD,GAAY,EACZ,EAAE;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE;YAC3C,GAAG,MAAM;YACT,iBAAiB;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,iBAAiB,EAAE,IAAI,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;IAEJ,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CACV,0IAA0I,CAC3I;SACA,cAAc,CAAC,oBAAoB,EAAE,iDAAiD,CAAC;SACvF,cAAc,CAAC,eAAe,EAAE,mCAAmC,CAAC;SACpE,MAAM,CAAC,gBAAgB,EAAE,iDAAiD,CAAC;SAC3E,MAAM,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SAClD,MAAM,CACL,KAAK,EACH,OAAe,EACf,IAAwE,EACxE,GAAY,EACZ,EAAE;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnG,IAAI,IAAI,EAAE,CAAC;gBACT,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE,IAAI,CAAC,CAAC;YACjF,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,kCAAkC,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,6BAA6B,CAAC,CAAC;IAC3F,CAAC,CACF,CAAC;IAEJ,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,GAAY,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;gBAAE,SAAS;YAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBAC7E,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,KAAyC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,8CAA8C,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,GAAY,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,KAA6C,CAAC;QAClE,IAAI,WAAW,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,aAAa,CAAC;YAC3D,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,qBAAqB,EAAE,oDAAoD,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAyB,EAAE,GAAY,EAAE,EAAE;QACpE,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAwB,EAAE,GAAY,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAuB,EAAE,GAAY,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;YACvE,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,YAAY,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;QACpC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
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":"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"}
|
|
@@ -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
|
|
2
|
-
import
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/dist/utils/poll.d.ts
CHANGED
|
@@ -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
|
|
18
|
+
/** Payload shape for merge polling: a merged ad's own `status` IS the merge lifecycle. */
|
|
19
19
|
export interface MergeStatusCheck {
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
28
|
-
*
|
|
29
|
-
*
|
|
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
|
/**
|
package/dist/utils/poll.js
CHANGED
|
@@ -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
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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.
|
|
21
|
-
const failed = result.
|
|
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
|
|
28
|
-
throw new ApiError(`${label} failed. The merge
|
|
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
|
|
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.
|
|
35
|
+
spinner.text = `${label}... ${chalk.dim(`(${result.status ?? 'processing'}, ${formatElapsed(elapsed)} elapsed)`)}`;
|
|
36
36
|
}
|
|
37
37
|
await sleep(intervalMs);
|
|
38
38
|
}
|
package/dist/utils/poll.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/utils/poll.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqBvC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AASpE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAuB,EACvB,UAAuB,EAAE;IAEzB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAElE,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/utils/poll.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED