@adsuploader/cli 0.1.6 → 0.1.7
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/SKILL.md +58 -1
- package/dist/cli.cjs +7 -7
- package/package.json +1 -1
package/SKILL.md
CHANGED
|
@@ -366,7 +366,7 @@ When cherry-picking features, only list ones relevant to the media type. `video_
|
|
|
366
366
|
|
|
367
367
|
### Carousel Ads
|
|
368
368
|
|
|
369
|
-
Group uploaded files into carousel ads with per-card text
|
|
369
|
+
Group uploaded files into carousel ads with per-card text and optional overall carousel text. `cardTexts` controls individual cards. Overall carousel text can be colocated on the carousel object or set in `texts.perAd` using the carousel `name`; colocated fields win when both are present.
|
|
370
370
|
|
|
371
371
|
```json
|
|
372
372
|
{
|
|
@@ -374,6 +374,12 @@ Group uploaded files into carousel ads with per-card text:
|
|
|
374
374
|
{
|
|
375
375
|
"name": "My Carousel",
|
|
376
376
|
"cards": ["slide1.jpg", "slide2.jpg", "slide3.jpg"],
|
|
377
|
+
"headlines": ["Overall Carousel Headline"],
|
|
378
|
+
"bodies": ["Overall primary text"],
|
|
379
|
+
"descriptions": ["Overall description"],
|
|
380
|
+
"cta": "SHOP_NOW",
|
|
381
|
+
"link": "https://example.com/carousel",
|
|
382
|
+
"urlTags": "utm_content=my_carousel",
|
|
377
383
|
"cardTexts": [
|
|
378
384
|
{ "headline": "Slide 1", "description": "First card", "link": "https://example.com/1" },
|
|
379
385
|
{ "headline": "Slide 2", "description": "Second card", "link": "https://example.com/2" }
|
|
@@ -383,6 +389,31 @@ Group uploaded files into carousel ads with per-card text:
|
|
|
383
389
|
}
|
|
384
390
|
```
|
|
385
391
|
|
|
392
|
+
Alternative overall-text shape:
|
|
393
|
+
|
|
394
|
+
```json
|
|
395
|
+
{
|
|
396
|
+
"texts": {
|
|
397
|
+
"perAd": {
|
|
398
|
+
"My Carousel": {
|
|
399
|
+
"headlines": ["Overall Carousel Headline"],
|
|
400
|
+
"bodies": ["Overall primary text"],
|
|
401
|
+
"descriptions": ["Overall description"],
|
|
402
|
+
"cta": "SHOP_NOW",
|
|
403
|
+
"link": "https://example.com/carousel",
|
|
404
|
+
"urlTags": "utm_content=my_carousel"
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
"carousel": [
|
|
409
|
+
{
|
|
410
|
+
"name": "My Carousel",
|
|
411
|
+
"cards": ["slide1.jpg", "slide2.jpg", "slide3.jpg"]
|
|
412
|
+
}
|
|
413
|
+
]
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
386
417
|
Cards must reference filenames from the upload batch. Minimum 2 cards per carousel. Files claimed by a carousel are removed from the standard ad list.
|
|
387
418
|
|
|
388
419
|
### Flexible Ads
|
|
@@ -402,6 +433,32 @@ Group multiple assets into a single flexible ad (Meta picks the best asset per p
|
|
|
402
433
|
|
|
403
434
|
Minimum 2 assets per group. Files claimed by a flexible group are removed from the standard ad list.
|
|
404
435
|
|
|
436
|
+
### Multi Media Ads
|
|
437
|
+
|
|
438
|
+
Group 2-10 uploaded images or videos into a Meta Multi Media ad:
|
|
439
|
+
|
|
440
|
+
```json
|
|
441
|
+
{
|
|
442
|
+
"multimedia": [
|
|
443
|
+
{
|
|
444
|
+
"name": "Mixed Media Ad",
|
|
445
|
+
"assets": ["hero.jpg", "promo.mp4", "banner.jpg"],
|
|
446
|
+
"assetTexts": [
|
|
447
|
+
{
|
|
448
|
+
"headline": "Hero headline",
|
|
449
|
+
"primaryText": "Hero primary text",
|
|
450
|
+
"description": "Hero description",
|
|
451
|
+
"link": "https://example.com/hero",
|
|
452
|
+
"displayUrl": "example.com/hero"
|
|
453
|
+
}
|
|
454
|
+
]
|
|
455
|
+
}
|
|
456
|
+
]
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
Assets must reference filenames from the upload batch. `assetTexts` is optional and lines up with `assets` by index; each field is a single override for that asset and blank fields fall back to the ad's main text and URLs. The primary rendered asset uses the ad's main text and URL, and any primary asset text override becomes the first main text option. Videos need a cached public thumbnail URL from upload processing. Files claimed by a Multi Media group are removed from the standard ad list.
|
|
461
|
+
|
|
405
462
|
### Ad Naming
|
|
406
463
|
|
|
407
464
|
```json
|
package/dist/cli.cjs
CHANGED
|
@@ -5002,6 +5002,7 @@ async function stageFiles(paths, opts) {
|
|
|
5002
5002
|
uploadedFiles.push({
|
|
5003
5003
|
name: file.name,
|
|
5004
5004
|
type: file.type,
|
|
5005
|
+
size: file.size,
|
|
5005
5006
|
fileKey: r2Info.fileKey
|
|
5006
5007
|
});
|
|
5007
5008
|
} catch (err) {
|
|
@@ -5030,6 +5031,7 @@ async function processAndPrint(client, batchId, uploadedFiles, jsonMode) {
|
|
|
5030
5031
|
const result = await client.uploads.process(batchId, {
|
|
5031
5032
|
name: file.name,
|
|
5032
5033
|
type: file.type,
|
|
5034
|
+
size: file.size,
|
|
5033
5035
|
fileKey: file.fileKey
|
|
5034
5036
|
});
|
|
5035
5037
|
results.push(result);
|
|
@@ -5331,7 +5333,7 @@ async function executeCreate(body, opts, { preview = false, test = false } = {})
|
|
|
5331
5333
|
statusStr += import_picocolors11.default.dim(` (${levelLabel})`);
|
|
5332
5334
|
}
|
|
5333
5335
|
let enhLabel = "";
|
|
5334
|
-
if (result.enhancements === "metaDefaults") enhLabel = import_picocolors11.default.dim("
|
|
5336
|
+
if (result.enhancements === "metaDefaults") enhLabel = import_picocolors11.default.dim("All Off");
|
|
5335
5337
|
else if (result.enhancements === "all") enhLabel = import_picocolors11.default.dim("All On");
|
|
5336
5338
|
else if (result.enhancements === "none") enhLabel = import_picocolors11.default.dim("All Off");
|
|
5337
5339
|
else if (Array.isArray(result.enhancements)) enhLabel = import_picocolors11.default.dim(`${result.enhancements.length} custom`);
|
|
@@ -5808,14 +5810,12 @@ async function interactiveCreate(client) {
|
|
|
5808
5810
|
const enhancementsChoice = await ve({
|
|
5809
5811
|
message: "Creative enhancements",
|
|
5810
5812
|
options: [
|
|
5811
|
-
{ value: "
|
|
5812
|
-
{ value: "
|
|
5813
|
+
{ value: "none", label: "No enhancements (recommended)" },
|
|
5814
|
+
{ value: "all", label: "All enhancements" }
|
|
5813
5815
|
]
|
|
5814
5816
|
});
|
|
5815
5817
|
if (pD(enhancementsChoice)) process.exit(0);
|
|
5816
|
-
|
|
5817
|
-
body.creativeEnhancements = "none";
|
|
5818
|
-
}
|
|
5818
|
+
body.creativeEnhancements = enhancementsChoice;
|
|
5819
5819
|
const status = await ve({
|
|
5820
5820
|
message: "Launch status",
|
|
5821
5821
|
options: [
|
|
@@ -5940,7 +5940,7 @@ function statusLabel(status) {
|
|
|
5940
5940
|
}
|
|
5941
5941
|
|
|
5942
5942
|
// src/cli.js
|
|
5943
|
-
var VERSION = true ? "0.1.
|
|
5943
|
+
var VERSION = true ? "0.1.7" : "0.0.0";
|
|
5944
5944
|
var apiUrl = process.env.ADS_API_URL || getBaseUrl();
|
|
5945
5945
|
if (apiUrl && (apiUrl.includes("localhost") || apiUrl.includes("127.0.0.1"))) {
|
|
5946
5946
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adsuploader/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Create Facebook ads from the command line — bulk upload media, preview configurations, and launch ads at scale",
|
|
5
5
|
"author": "Ads Uploader <support@adsuploader.com> (https://adsuploader.com)",
|
|
6
6
|
"license": "UNLICENSED",
|