weshop-cli 0.2.0 → 0.2.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/dist/commands/2d-to-3d-image-converter.js +8 -25
- package/dist/commands/2d-to-3d-image-converter.js.map +1 -1
- package/dist/commands/ai-3d-rendering.js +8 -25
- package/dist/commands/ai-3d-rendering.js.map +1 -1
- package/dist/commands/ai-action-figure-generators.js +8 -29
- package/dist/commands/ai-action-figure-generators.js.map +1 -1
- package/dist/commands/ai-aging.js +8 -33
- package/dist/commands/ai-aging.js.map +1 -1
- package/dist/commands/ai-babe.js +9 -26
- package/dist/commands/ai-babe.js.map +1 -1
- package/dist/commands/ai-bikini-model.js +12 -30
- package/dist/commands/ai-bikini-model.js.map +1 -1
- package/dist/commands/ai-bikini-photo-editor.js +9 -26
- package/dist/commands/ai-bikini-photo-editor.js.map +1 -1
- package/dist/commands/ai-bikini-video.js +10 -28
- package/dist/commands/ai-bikini-video.js.map +1 -1
- package/dist/commands/ai-christmas-photo.js +8 -28
- package/dist/commands/ai-christmas-photo.js.map +1 -1
- package/dist/commands/ai-clothes-changer.js +11 -32
- package/dist/commands/ai-clothes-changer.js.map +1 -1
- package/dist/commands/ai-collage-maker.js +11 -32
- package/dist/commands/ai-collage-maker.js.map +1 -1
- package/dist/commands/ai-dog.js +8 -35
- package/dist/commands/ai-dog.js.map +1 -1
- package/dist/commands/ai-elf.js +8 -25
- package/dist/commands/ai-elf.js.map +1 -1
- package/dist/commands/ai-face-merge.js +11 -40
- package/dist/commands/ai-face-merge.js.map +1 -1
- package/dist/commands/ai-feet.js +8 -25
- package/dist/commands/ai-feet.js.map +1 -1
- package/dist/commands/ai-flag-generator.js +8 -29
- package/dist/commands/ai-flag-generator.js.map +1 -1
- package/dist/commands/ai-generated-bikini-girls.js +11 -29
- package/dist/commands/ai-generated-bikini-girls.js.map +1 -1
- package/dist/commands/ai-generated-perfect-female-body.js +11 -29
- package/dist/commands/ai-generated-perfect-female-body.js.map +1 -1
- package/dist/commands/ai-ghost-mannequin-generator.js +12 -30
- package/dist/commands/ai-ghost-mannequin-generator.js.map +1 -1
- package/dist/commands/ai-group-photo-generator.js +11 -32
- package/dist/commands/ai-group-photo-generator.js.map +1 -1
- package/dist/commands/ai-hair-color-changer.js +8 -28
- package/dist/commands/ai-hair-color-changer.js.map +1 -1
- package/dist/commands/ai-hairstyle-changer.js +8 -29
- package/dist/commands/ai-hairstyle-changer.js.map +1 -1
- package/dist/commands/ai-hot-girl-image.js +11 -29
- package/dist/commands/ai-hot-girl-image.js.map +1 -1
- package/dist/commands/ai-image-animation.js +13 -34
- package/dist/commands/ai-image-animation.js.map +1 -1
- package/dist/commands/ai-image-combiner.js +11 -35
- package/dist/commands/ai-image-combiner.js.map +1 -1
- package/dist/commands/ai-landscape-design-free.js +15 -35
- package/dist/commands/ai-landscape-design-free.js.map +1 -1
- package/dist/commands/ai-lingerie-models.js +11 -29
- package/dist/commands/ai-lingerie-models.js.map +1 -1
- package/dist/commands/ai-photoshoot.js +21 -43
- package/dist/commands/ai-photoshoot.js.map +1 -1
- package/dist/commands/ai-poster-from-images.js +19 -44
- package/dist/commands/ai-poster-from-images.js.map +1 -1
- package/dist/commands/ai-poster.js +22 -42
- package/dist/commands/ai-poster.js.map +1 -1
- package/dist/commands/ai-room-planner.js +8 -29
- package/dist/commands/ai-room-planner.js.map +1 -1
- package/dist/commands/ai-selfie.js +8 -25
- package/dist/commands/ai-selfie.js.map +1 -1
- package/dist/commands/ai-sexy-portrait.js +11 -29
- package/dist/commands/ai-sexy-portrait.js.map +1 -1
- package/dist/commands/ai-sexy-teens.js +11 -29
- package/dist/commands/ai-sexy-teens.js.map +1 -1
- package/dist/commands/ai-spray-paint.js +8 -29
- package/dist/commands/ai-spray-paint.js.map +1 -1
- package/dist/commands/ai-swimsuit-model.js +8 -25
- package/dist/commands/ai-swimsuit-model.js.map +1 -1
- package/dist/commands/ai-tattoo-generator.js +8 -29
- package/dist/commands/ai-tattoo-generator.js.map +1 -1
- package/dist/commands/ai-text-remover-from-video.js +6 -22
- package/dist/commands/ai-text-remover-from-video.js.map +1 -1
- package/dist/commands/ai-translate.js +8 -33
- package/dist/commands/ai-translate.js.map +1 -1
- package/dist/commands/ai-video-enhancer.js +8 -28
- package/dist/commands/ai-video-enhancer.js.map +1 -1
- package/dist/commands/ai-werewolf.js +14 -32
- package/dist/commands/ai-werewolf.js.map +1 -1
- package/dist/commands/ai-xray-clothes.js +8 -25
- package/dist/commands/ai-xray-clothes.js.map +1 -1
- package/dist/commands/ai-zombie.js +8 -25
- package/dist/commands/ai-zombie.js.map +1 -1
- package/dist/commands/anime-image-converter.js +8 -25
- package/dist/commands/anime-image-converter.js.map +1 -1
- package/dist/commands/baby-face-generator.js +15 -35
- package/dist/commands/baby-face-generator.js.map +1 -1
- package/dist/commands/bald-filter.js +8 -28
- package/dist/commands/bald-filter.js.map +1 -1
- package/dist/commands/bangs-filter.js +8 -25
- package/dist/commands/bangs-filter.js.map +1 -1
- package/dist/commands/bikini-contest-photos.js +11 -29
- package/dist/commands/bikini-contest-photos.js.map +1 -1
- package/dist/commands/bikini-try-on.js +8 -25
- package/dist/commands/bikini-try-on.js.map +1 -1
- package/dist/commands/braces-filter.js +8 -25
- package/dist/commands/braces-filter.js.map +1 -1
- package/dist/commands/brat-generator.js +8 -29
- package/dist/commands/brat-generator.js.map +1 -1
- package/dist/commands/buzz-cut-ai.js +8 -33
- package/dist/commands/buzz-cut-ai.js.map +1 -1
- package/dist/commands/celeb-ai.js +11 -32
- package/dist/commands/celeb-ai.js.map +1 -1
- package/dist/commands/chibi-maker.js +8 -33
- package/dist/commands/chibi-maker.js.map +1 -1
- package/dist/commands/clothing-magic-remover.js +9 -26
- package/dist/commands/clothing-magic-remover.js.map +1 -1
- package/dist/commands/custom-bikini.js +11 -29
- package/dist/commands/custom-bikini.js.map +1 -1
- package/dist/commands/cute-anime-girl-ai-bikini.js +11 -29
- package/dist/commands/cute-anime-girl-ai-bikini.js.map +1 -1
- package/dist/commands/demon-slayer-oc-maker.js +8 -29
- package/dist/commands/demon-slayer-oc-maker.js.map +1 -1
- package/dist/commands/dress-remover-magic-eraser.js +9 -26
- package/dist/commands/dress-remover-magic-eraser.js.map +1 -1
- package/dist/commands/face-forge.js +20 -50
- package/dist/commands/face-forge.js.map +1 -1
- package/dist/commands/fat-ai.js +8 -33
- package/dist/commands/fat-ai.js.map +1 -1
- package/dist/commands/firered-image-edit.js +14 -39
- package/dist/commands/firered-image-edit.js.map +1 -1
- package/dist/commands/flat-lay.js +13 -36
- package/dist/commands/flat-lay.js.map +1 -1
- package/dist/commands/free-4k-video-upscaler.js +8 -24
- package/dist/commands/free-4k-video-upscaler.js.map +1 -1
- package/dist/commands/free-ai-girlfriend-generator.js +8 -29
- package/dist/commands/free-ai-girlfriend-generator.js.map +1 -1
- package/dist/commands/free-online-video-quality-enhancer.js +8 -24
- package/dist/commands/free-online-video-quality-enhancer.js.map +1 -1
- package/dist/commands/free-sexy-ai-generator.js +11 -29
- package/dist/commands/free-sexy-ai-generator.js.map +1 -1
- package/dist/commands/futuristic-elegance.js +8 -33
- package/dist/commands/futuristic-elegance.js.map +1 -1
- package/dist/commands/gemini-watermark-remover.js +6 -22
- package/dist/commands/gemini-watermark-remover.js.map +1 -1
- package/dist/commands/gender-swap.js +8 -33
- package/dist/commands/gender-swap.js.map +1 -1
- package/dist/commands/ghibli-art-create.js +8 -29
- package/dist/commands/ghibli-art-create.js.map +1 -1
- package/dist/commands/grok-imagine-video.js +12 -30
- package/dist/commands/grok-imagine-video.js.map +1 -1
- package/dist/commands/grok-imagine.js +8 -29
- package/dist/commands/grok-imagine.js.map +1 -1
- package/dist/commands/hair-color-try-on.js +8 -28
- package/dist/commands/hair-color-try-on.js.map +1 -1
- package/dist/commands/happy-woman-bikini-ai-pic.js +11 -29
- package/dist/commands/happy-woman-bikini-ai-pic.js.map +1 -1
- package/dist/commands/hot-bikini-models.js +11 -29
- package/dist/commands/hot-bikini-models.js.map +1 -1
- package/dist/commands/image-mixer.js +11 -35
- package/dist/commands/image-mixer.js.map +1 -1
- package/dist/commands/image-to-sketch.js +8 -25
- package/dist/commands/image-to-sketch.js.map +1 -1
- package/dist/commands/improve-video-quality-online-free.js +8 -24
- package/dist/commands/improve-video-quality-online-free.js.map +1 -1
- package/dist/commands/kling.js +16 -43
- package/dist/commands/kling.js.map +1 -1
- package/dist/commands/logo-remover-from-video.js +6 -22
- package/dist/commands/logo-remover-from-video.js.map +1 -1
- package/dist/commands/midjourney.js +10 -31
- package/dist/commands/midjourney.js.map +1 -1
- package/dist/commands/mugshot-creator.js +8 -25
- package/dist/commands/mugshot-creator.js.map +1 -1
- package/dist/commands/murder-drones-oc.js +8 -29
- package/dist/commands/murder-drones-oc.js.map +1 -1
- package/dist/commands/outfit-generator.js +8 -33
- package/dist/commands/outfit-generator.js.map +1 -1
- package/dist/commands/personalized-swimsuit.js +11 -29
- package/dist/commands/personalized-swimsuit.js.map +1 -1
- package/dist/commands/photo-to-bikini-ai.js +8 -25
- package/dist/commands/photo-to-bikini-ai.js.map +1 -1
- package/dist/commands/pregnant-ai.js +10 -33
- package/dist/commands/pregnant-ai.js.map +1 -1
- package/dist/commands/ps2-filter.js +8 -25
- package/dist/commands/ps2-filter.js.map +1 -1
- package/dist/commands/qwen-image-edit.js +11 -44
- package/dist/commands/qwen-image-edit.js.map +1 -1
- package/dist/commands/random-animal-generator.js +8 -29
- package/dist/commands/random-animal-generator.js.map +1 -1
- package/dist/commands/remove-filter-from-photo.js +8 -29
- package/dist/commands/remove-filter-from-photo.js.map +1 -1
- package/dist/commands/remove-subtitles-from-video-online-free.js +6 -22
- package/dist/commands/remove-subtitles-from-video-online-free.js.map +1 -1
- package/dist/commands/remove-text-from-video-online-free.js +6 -22
- package/dist/commands/remove-text-from-video-online-free.js.map +1 -1
- package/dist/commands/replace-face-in-video-online-free.js +9 -31
- package/dist/commands/replace-face-in-video-online-free.js.map +1 -1
- package/dist/commands/see-through-clothes-fitler.js +8 -25
- package/dist/commands/see-through-clothes-fitler.js.map +1 -1
- package/dist/commands/seedance.js +14 -32
- package/dist/commands/seedance.js.map +1 -1
- package/dist/commands/seedream.js +19 -51
- package/dist/commands/seedream.js.map +1 -1
- package/dist/commands/sex-ai-generator.js +11 -29
- package/dist/commands/sex-ai-generator.js.map +1 -1
- package/dist/commands/sexy-ai-pics.js +9 -26
- package/dist/commands/sexy-ai-pics.js.map +1 -1
- package/dist/commands/skin-color-changer.js +8 -28
- package/dist/commands/skin-color-changer.js.map +1 -1
- package/dist/commands/sonic-oc.js +8 -29
- package/dist/commands/sonic-oc.js.map +1 -1
- package/dist/commands/sora-2.js +12 -30
- package/dist/commands/sora-2.js.map +1 -1
- package/dist/commands/sprunki-oc-maker.js +8 -29
- package/dist/commands/sprunki-oc-maker.js.map +1 -1
- package/dist/commands/square-face-icon-generator.js +8 -29
- package/dist/commands/square-face-icon-generator.js.map +1 -1
- package/dist/commands/stardew-valley-portrait-maker.js +8 -29
- package/dist/commands/stardew-valley-portrait-maker.js.map +1 -1
- package/dist/commands/string-bikini-beauty-contest.js +11 -29
- package/dist/commands/string-bikini-beauty-contest.js.map +1 -1
- package/dist/commands/swimsuit-try-on-haul.js +11 -29
- package/dist/commands/swimsuit-try-on-haul.js.map +1 -1
- package/dist/commands/video-resolution-enhancer-online-free.js +8 -24
- package/dist/commands/video-resolution-enhancer-online-free.js.map +1 -1
- package/dist/commands/video-upscaler-online-free.js +8 -24
- package/dist/commands/video-upscaler-online-free.js.map +1 -1
- package/dist/commands/video-watermark-remover.js +8 -27
- package/dist/commands/video-watermark-remover.js.map +1 -1
- package/dist/commands/wan-ai.js +11 -29
- package/dist/commands/wan-ai.js.map +1 -1
- package/dist/commands/wild-graffiti.js +8 -29
- package/dist/commands/wild-graffiti.js.map +1 -1
- package/dist/commands/z-image.js +11 -32
- package/dist/commands/z-image.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/run-helper.d.ts +7 -1
- package/dist/run-helper.js +33 -4
- package/dist/run-helper.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
const DEFAULT_PROMPT = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
4
|
export const cuteAnimeGirlAiBikiniCmd = new Command("cute-anime-girl-ai-bikini")
|
|
6
5
|
.summary("Cute anime girl AI bikini — transform a person photo into a bikini model image or video")
|
|
@@ -21,32 +20,15 @@ export const cuteAnimeGirlAiBikiniCmd = new Command("cute-anime-girl-ai-bikini")
|
|
|
21
20
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
22
21
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
23
22
|
.action(async (opts) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (opts.taskName)
|
|
35
|
-
input.taskName = opts.taskName;
|
|
36
|
-
const body = { agent: { name: "cute-anime-girl-ai-bikini", version: "v1.0" }, input, params };
|
|
37
|
-
const { executionId } = await submitRun(body);
|
|
38
|
-
printSubmitted(executionId);
|
|
39
|
-
if (opts.wait !== false) {
|
|
40
|
-
printPollResult(await waitForCompletion(executionId));
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
console.log("[info]");
|
|
44
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
printError(err);
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
23
|
+
const params = {
|
|
24
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
25
|
+
generatedType: opts.generatedType ?? "video",
|
|
26
|
+
};
|
|
27
|
+
if (opts.batch != null)
|
|
28
|
+
params.batchCount = opts.batch;
|
|
29
|
+
const extraInput = {};
|
|
30
|
+
if (opts.taskName)
|
|
31
|
+
extraInput.taskName = opts.taskName;
|
|
32
|
+
await executeRun("cute-anime-girl-ai-bikini", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
51
33
|
});
|
|
52
34
|
//# sourceMappingURL=cute-anime-girl-ai-bikini.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cute-anime-girl-ai-bikini.js","sourceRoot":"","sources":["../../src/commands/cute-anime-girl-ai-bikini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cute-anime-girl-ai-bikini.js","sourceRoot":"","sources":["../../src/commands/cute-anime-girl-ai-bikini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,qIAAqI,CAAC;AAExI,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,OAAO,CAAC,2BAA2B,CAAC;KAC7E,OAAO,CAAC,yFAAyF,CAAC;KAClG,WAAW,CACV,iFAAiF;IACjF,sCAAsC;IACtC,8CAA8C;IAC9C,sCAAsC;IACtC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,8FAA8F;IAC9F,4FAA4F;IAC5F,0FAA0F,CAC3F;KACA,cAAc,CAAC,oBAAoB,EAAE,4DAA4D,CAAC;KAClG,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,yBAAyB,EAAE,uCAAuC,CAAC;KAC1E,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACxG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;QAC9C,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,OAAO;KAC7C,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,2BAA2B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACpH,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
const DEFAULT_PROMPT = "Turn this person into Demon Slayer anime style, Kimetsu no Yaiba aesthetics, thick brush strokes, bold black outlines, expressive eyes with distinct pupils, wearing a custom slayer uniform and a patterned haori, Ufotable high-quality animation style, cinematic lighting, sharp focus, vibrant cel-shading, keep key facial and gender characteristics.";
|
|
5
4
|
export const demonSlayerOcMakerCmd = new Command("demon-slayer-oc-maker")
|
|
6
5
|
.summary("AI Demon Slayer OC maker — transform a person into a Kimetsu no Yaiba anime character")
|
|
@@ -19,32 +18,12 @@ export const demonSlayerOcMakerCmd = new Command("demon-slayer-oc-maker")
|
|
|
19
18
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
20
19
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
21
20
|
.action(async (opts) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (opts.image) {
|
|
30
|
-
const { url: imageUrl } = await resolveImage(opts.image);
|
|
31
|
-
params.images = [imageUrl];
|
|
32
|
-
input.originalImage = imageUrl;
|
|
33
|
-
}
|
|
34
|
-
const body = { agent: { name: "demon-slayer-oc-maker", version: "v1.0" }, input, params };
|
|
35
|
-
const { executionId } = await submitRun(body);
|
|
36
|
-
printSubmitted(executionId);
|
|
37
|
-
if (opts.wait !== false) {
|
|
38
|
-
printPollResult(await waitForCompletion(executionId));
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.log("[info]");
|
|
42
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
46
|
-
printError(err);
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
21
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
22
|
+
if (opts.batch != null)
|
|
23
|
+
params.batchCount = opts.batch;
|
|
24
|
+
const extraInput = {};
|
|
25
|
+
if (opts.taskName)
|
|
26
|
+
extraInput.taskName = opts.taskName;
|
|
27
|
+
await executeRun("demon-slayer-oc-maker", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
49
28
|
});
|
|
50
29
|
//# sourceMappingURL=demon-slayer-oc-maker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demon-slayer-oc-maker.js","sourceRoot":"","sources":["../../src/commands/demon-slayer-oc-maker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"demon-slayer-oc-maker.js","sourceRoot":"","sources":["../../src/commands/demon-slayer-oc-maker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,8VAA8V,CAAC;AAEjW,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,uBAAuB,CAAC;KACtE,OAAO,CAAC,uFAAuF,CAAC;KAChG,WAAW,CACV,0FAA0F;IAC1F,wBAAwB;IACxB,mDAAmD;IACnD,4FAA4F;IAC5F,yDAAyD;IACzD,aAAa;IACb,uDAAuD;IACvD,oGAAoG;IACpG,+DAA+D,CAChE;KACA,MAAM,CAAC,oBAAoB,EAAE,4DAA4D,CAAC;KAC1F,MAAM,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;IAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,uBAAuB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAChH,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
const DEFAULT_PROMPT = "undress the outfit into sexy bikini while keeping body proportions natural.";
|
|
5
4
|
export const dressRemoverMagicEraserCmd = new Command("dress-remover-magic-eraser")
|
|
6
5
|
.summary("AI dress remover — erase a dress and replace with a bikini while keeping body proportions")
|
|
@@ -12,33 +11,17 @@ export const dressRemoverMagicEraserCmd = new Command("dress-remover-magic-erase
|
|
|
12
11
|
" weshop dress-remover-magic-eraser --image ./person.png --prompt 'Remove the dress, replace with a red bikini'\n" +
|
|
13
12
|
" weshop dress-remover-magic-eraser --image ./person.png --prompt 'Erase the top, keep the skirt' --batch 2")
|
|
14
13
|
.requiredOption("--image <path|url>", "Input person photo — local file path or URL")
|
|
15
|
-
.
|
|
14
|
+
.option("--prompt <text>", "Describe what to remove and replace")
|
|
16
15
|
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
17
16
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
18
17
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
19
18
|
.action(async (opts) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
input.taskName = opts.taskName;
|
|
28
|
-
const body = { agent: { name: "dress-remover-magic-eraser", version: "v1.0" }, input, params };
|
|
29
|
-
const { executionId } = await submitRun(body);
|
|
30
|
-
printSubmitted(executionId);
|
|
31
|
-
if (opts.wait !== false) {
|
|
32
|
-
printPollResult(await waitForCompletion(executionId));
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
console.log("[info]");
|
|
36
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
printError(err);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
19
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
20
|
+
if (opts.batch != null)
|
|
21
|
+
params.batchCount = opts.batch;
|
|
22
|
+
const extraInput = {};
|
|
23
|
+
if (opts.taskName)
|
|
24
|
+
extraInput.taskName = opts.taskName;
|
|
25
|
+
await executeRun("dress-remover-magic-eraser", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
43
26
|
});
|
|
44
27
|
//# sourceMappingURL=dress-remover-magic-eraser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dress-remover-magic-eraser.js","sourceRoot":"","sources":["../../src/commands/dress-remover-magic-eraser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dress-remover-magic-eraser.js","sourceRoot":"","sources":["../../src/commands/dress-remover-magic-eraser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAAG,6EAA6E,CAAC;AAErG,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,OAAO,CAAC,4BAA4B,CAAC;KAChF,OAAO,CAAC,2FAA2F,CAAC;KACpG,WAAW,CACV,0EAA0E;IAC1E,yBAAyB;IACzB,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,mHAAmH;IACnH,6GAA6G,CAC9G;KACA,cAAc,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;IAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,4BAA4B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACrH,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "Please generate a realistic portrait photograph of an Asian woman with long black hair, wearing a pure white sleeveless outfit, set against a plain white background.";
|
|
4
4
|
export const faceForgeCmd = new Command("face-forge")
|
|
5
5
|
.summary("AI face morph & face swap — generate or transform portraits")
|
|
6
6
|
.description("AI face morph & face swap — generate or transform portraits using Face Forge.\n\n" +
|
|
@@ -32,55 +32,25 @@ export const faceForgeCmd = new Command("face-forge")
|
|
|
32
32
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
33
33
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
34
34
|
.action(async (opts) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
39
|
-
};
|
|
40
|
-
if (opts.batch != null)
|
|
41
|
-
params.batchCount = opts.batch;
|
|
42
|
-
if (opts.model)
|
|
43
|
-
params.modelName = opts.model;
|
|
44
|
-
if (opts.imageSize)
|
|
45
|
-
params.imageSize = opts.imageSize;
|
|
46
|
-
if (opts.aspectRatio)
|
|
47
|
-
params.aspectRatio = opts.aspectRatio;
|
|
48
|
-
const input = {};
|
|
49
|
-
if (opts.taskName)
|
|
50
|
-
input.taskName = opts.taskName;
|
|
51
|
-
if (opts.image && opts.image.length > 0) {
|
|
52
|
-
const imageList = opts.image;
|
|
53
|
-
if (imageList.length > 3) {
|
|
54
|
-
console.error("[error]\n message: Maximum 3 images allowed");
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
const urls = [];
|
|
58
|
-
for (const img of imageList) {
|
|
59
|
-
const { url } = await resolveImage(img);
|
|
60
|
-
urls.push(url);
|
|
61
|
-
}
|
|
62
|
-
params.images = urls;
|
|
63
|
-
input.originalImage = urls[0];
|
|
64
|
-
}
|
|
65
|
-
const body = {
|
|
66
|
-
agent: { name: "face-forge", version: "v1.0" },
|
|
67
|
-
input,
|
|
68
|
-
params,
|
|
69
|
-
};
|
|
70
|
-
const { executionId } = await submitRun(body);
|
|
71
|
-
printSubmitted(executionId);
|
|
72
|
-
if (opts.wait !== false) {
|
|
73
|
-
const data = await waitForCompletion(executionId);
|
|
74
|
-
printPollResult(data);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.log("[info]");
|
|
78
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch (err) {
|
|
82
|
-
printError(err);
|
|
35
|
+
const imageList = opts.image;
|
|
36
|
+
if (imageList && imageList.length > 3) {
|
|
37
|
+
console.error("[error]\n message: Maximum 3 images allowed");
|
|
83
38
|
process.exit(1);
|
|
84
39
|
}
|
|
40
|
+
const params = {
|
|
41
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
42
|
+
};
|
|
43
|
+
if (opts.batch != null)
|
|
44
|
+
params.batchCount = opts.batch;
|
|
45
|
+
if (opts.model)
|
|
46
|
+
params.modelName = opts.model;
|
|
47
|
+
if (opts.imageSize)
|
|
48
|
+
params.imageSize = opts.imageSize;
|
|
49
|
+
if (opts.aspectRatio)
|
|
50
|
+
params.aspectRatio = opts.aspectRatio;
|
|
51
|
+
const extraInput = {};
|
|
52
|
+
if (opts.taskName)
|
|
53
|
+
extraInput.taskName = opts.taskName;
|
|
54
|
+
await executeRun("face-forge", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
85
55
|
});
|
|
86
56
|
//# sourceMappingURL=face-forge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"face-forge.js","sourceRoot":"","sources":["../../src/commands/face-forge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"face-forge.js","sourceRoot":"","sources":["../../src/commands/face-forge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAAG,uKAAuK,CAAC;AAE/L,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;KAClD,OAAO,CAAC,6DAA6D,CAAC;KACtE,WAAW,CACV,mFAAmF;IACnF,8FAA8F;IAC9F,6FAA6F;IAC7F,uBAAuB;IACvB,qDAAqD;IACrD,8FAA8F;IAC9F,uFAAuF;IACvF,oBAAoB;IACpB,8EAA8E;IAC9E,uEAAuE;IACvE,+CAA+C;IAC/C,mCAAmC;IACnC,yBAAyB;IACzB,2BAA2B;IAC3B,mDAAmD;IACnD,iEAAiE;IACjE,aAAa;IACb,mFAAmF;IACnF,6FAA6F;IAC7F,yJAAyJ,CAC1J;KACA,MAAM,CAAC,uBAAuB,EAAE,iEAAiE,CAAC;KAClG,MAAM,CAAC,iBAAiB,EAAE,0FAA0F,CAAC;KACrH,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,8DAA8D,CAAC;KAC7F,MAAM,CAAC,wBAAwB,EAAE,qDAAqD,CAAC;KACvF,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,SAAS,GAAyB,IAAI,CAAC,KAAK,CAAC;IACnD,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;KAC/C,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9C,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtD,IAAI,IAAI,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAE5D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAEvD,MAAM,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACrG,CAAC,CAAC,CAAC"}
|
package/dist/commands/fat-ai.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
const DEFAULT_PROMPT = "Give me a look of how this person would look when this person became extremely fat. Don't change clothes and appearance.";
|
|
5
4
|
export const fatAiCmd = new Command("fat-ai")
|
|
6
5
|
.summary("AI plus-size body transformation — visualize how a person would look extremely overweight")
|
|
@@ -18,36 +17,12 @@ export const fatAiCmd = new Command("fat-ai")
|
|
|
18
17
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
19
18
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
20
19
|
.action(async (opts) => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
params.batchCount = opts.batch;
|
|
29
|
-
const input = { originalImage: imageUrl };
|
|
30
|
-
if (opts.taskName)
|
|
31
|
-
input.taskName = opts.taskName;
|
|
32
|
-
const body = {
|
|
33
|
-
agent: { name: "fat-ai", version: "v1.0" },
|
|
34
|
-
input,
|
|
35
|
-
params,
|
|
36
|
-
};
|
|
37
|
-
const { executionId } = await submitRun(body);
|
|
38
|
-
printSubmitted(executionId);
|
|
39
|
-
if (opts.wait !== false) {
|
|
40
|
-
const data = await waitForCompletion(executionId);
|
|
41
|
-
printPollResult(data);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
console.log("[info]");
|
|
45
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
printError(err);
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
20
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
21
|
+
if (opts.batch != null)
|
|
22
|
+
params.batchCount = opts.batch;
|
|
23
|
+
const extraInput = {};
|
|
24
|
+
if (opts.taskName)
|
|
25
|
+
extraInput.taskName = opts.taskName;
|
|
26
|
+
await executeRun("fat-ai", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
52
27
|
});
|
|
53
28
|
//# sourceMappingURL=fat-ai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fat-ai.js","sourceRoot":"","sources":["../../src/commands/fat-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fat-ai.js","sourceRoot":"","sources":["../../src/commands/fat-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,0HAA0H,CAAC;AAE7H,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC1C,OAAO,CAAC,2FAA2F,CAAC;KACpG,WAAW,CACV,mGAAmG;IACnG,oDAAoD;IACpD,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,wCAAwC;IACxC,gGAAgG;IAChG,gDAAgD,CACjD;KACA,cAAc,CAAC,oBAAoB,EAAE,+CAA+C,CAAC;KACrF,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;KACnE,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;IAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
export const fireredImageEditCmd = new Command("firered-image-edit")
|
|
5
4
|
.summary("FireRed image editor — edit or generate images with high fidelity using FireRed open-source model")
|
|
6
5
|
.description("Edit or generate images using the FireRed open-source AI model.\n" +
|
|
@@ -18,44 +17,20 @@ export const fireredImageEditCmd = new Command("firered-image-edit")
|
|
|
18
17
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
19
18
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
20
19
|
.action(async (opts) => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
aspectRatio: opts.aspectRatio ?? "auto",
|
|
25
|
-
};
|
|
26
|
-
if (opts.batch != null)
|
|
27
|
-
params.batchCount = opts.batch;
|
|
28
|
-
const input = {};
|
|
29
|
-
if (opts.taskName)
|
|
30
|
-
input.taskName = opts.taskName;
|
|
31
|
-
if (opts.image && opts.image.length > 0) {
|
|
32
|
-
const imageList = opts.image;
|
|
33
|
-
if (imageList.length > 3) {
|
|
34
|
-
console.error("[error]\n message: Maximum 3 images allowed");
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
const urls = [];
|
|
38
|
-
for (const img of imageList) {
|
|
39
|
-
const { url } = await resolveImage(img);
|
|
40
|
-
urls.push(url);
|
|
41
|
-
}
|
|
42
|
-
params.images = urls;
|
|
43
|
-
input.originalImage = urls[0];
|
|
44
|
-
}
|
|
45
|
-
const body = { agent: { name: "firered-image-edit", version: "v1.0" }, input, params };
|
|
46
|
-
const { executionId } = await submitRun(body);
|
|
47
|
-
printSubmitted(executionId);
|
|
48
|
-
if (opts.wait !== false) {
|
|
49
|
-
printPollResult(await waitForCompletion(executionId));
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
console.log("[info]");
|
|
53
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
printError(err);
|
|
20
|
+
const imageList = opts.image;
|
|
21
|
+
if (imageList && imageList.length > 3) {
|
|
22
|
+
console.error("[error]\n message: Maximum 3 images allowed");
|
|
58
23
|
process.exit(1);
|
|
59
24
|
}
|
|
25
|
+
const params = {
|
|
26
|
+
textDescription: opts.prompt,
|
|
27
|
+
aspectRatio: opts.aspectRatio ?? "auto",
|
|
28
|
+
};
|
|
29
|
+
if (opts.batch != null)
|
|
30
|
+
params.batchCount = opts.batch;
|
|
31
|
+
const extraInput = {};
|
|
32
|
+
if (opts.taskName)
|
|
33
|
+
extraInput.taskName = opts.taskName;
|
|
34
|
+
await executeRun("firered-image-edit", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
60
35
|
});
|
|
61
36
|
//# sourceMappingURL=firered-image-edit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firered-image-edit.js","sourceRoot":"","sources":["../../src/commands/firered-image-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"firered-image-edit.js","sourceRoot":"","sources":["../../src/commands/firered-image-edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC;KACjE,OAAO,CAAC,mGAAmG,CAAC;KAC5G,WAAW,CACV,mEAAmE;IACnE,6DAA6D;IAC7D,kCAAkC;IAClC,2DAA2D;IAC3D,aAAa;IACb,2FAA2F;IAC3F,wGAAwG;IACxG,qHAAqH,CACtH;KACA,MAAM,CAAC,uBAAuB,EAAE,iEAAiE,CAAC;KAClG,cAAc,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KAC5E,MAAM,CAAC,wBAAwB,EAAE,0EAA0E,CAAC;KAC5G,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,SAAS,GAAyB,IAAI,CAAC,KAAK,CAAC;IACnD,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM;KACxC,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IAEvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAEvD,MAAM,UAAU,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
export const flatLayCmd = new Command("flat-lay")
|
|
5
4
|
.summary("AI flat-lay clothing generator — create professional flat-lay product images from a photo")
|
|
6
5
|
.description("Generate a professional flat-lay clothing image from a garment or model photo.\n" +
|
|
@@ -27,39 +26,17 @@ export const flatLayCmd = new Command("flat-lay")
|
|
|
27
26
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
28
27
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
29
28
|
.action(async (opts) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (opts.taskName)
|
|
43
|
-
input.taskName = opts.taskName;
|
|
44
|
-
const body = {
|
|
45
|
-
agent: { name: "flat-lay", version: "v1.0" },
|
|
46
|
-
input,
|
|
47
|
-
params,
|
|
48
|
-
};
|
|
49
|
-
const { executionId } = await submitRun(body);
|
|
50
|
-
printSubmitted(executionId);
|
|
51
|
-
if (opts.wait !== false) {
|
|
52
|
-
const data = await waitForCompletion(executionId);
|
|
53
|
-
printPollResult(data);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
console.log("[info]");
|
|
57
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
printError(err);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
29
|
+
const params = {
|
|
30
|
+
textDescription: opts.prompt,
|
|
31
|
+
modelName: opts.model ?? "nano2",
|
|
32
|
+
imageSize: opts.imageSize ?? "1K",
|
|
33
|
+
aspectRatio: opts.aspectRatio ?? "1:1",
|
|
34
|
+
};
|
|
35
|
+
if (opts.batch != null)
|
|
36
|
+
params.batchCount = opts.batch;
|
|
37
|
+
const extraInput = {};
|
|
38
|
+
if (opts.taskName)
|
|
39
|
+
extraInput.taskName = opts.taskName;
|
|
40
|
+
await executeRun("flat-lay", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
64
41
|
});
|
|
65
42
|
//# sourceMappingURL=flat-lay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flat-lay.js","sourceRoot":"","sources":["../../src/commands/flat-lay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"flat-lay.js","sourceRoot":"","sources":["../../src/commands/flat-lay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KAC9C,OAAO,CAAC,2FAA2F,CAAC;KACpG,WAAW,CACV,kFAAkF;IAClF,sDAAsD;IACtD,oBAAoB;IACpB,qCAAqC;IACrC,0BAA0B;IAC1B,8BAA8B;IAC9B,kCAAkC;IAClC,wBAAwB;IACxB,0BAA0B;IAC1B,kCAAkC;IAClC,iEAAiE;IACjE,aAAa;IACb,qGAAqG;IACrG,iIAAiI;IACjI,+GAA+G,CAChH;KACA,cAAc,CAAC,oBAAoB,EAAE,uDAAuD,CAAC;KAC7F,cAAc,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;KACzE,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;KACjE,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,wBAAwB,EAAE,oCAAoC,CAAC;KACtE,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO;QAChC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;KACvC,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
export const free4kVideoUpscalerCmd = new Command("free-4k-video-upscaler")
|
|
5
4
|
.summary("Free 4K video upscaler — upscale video to 4K resolution using AI")
|
|
6
5
|
.description("Upscale and enhance video quality to 4K resolution using AI.\n\n" +
|
|
@@ -16,27 +15,12 @@ export const free4kVideoUpscalerCmd = new Command("free-4k-video-upscaler")
|
|
|
16
15
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
17
16
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
18
17
|
.action(async (opts) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const body = { agent: { name: "free-4k-video-upscaler", version: "v1.0" }, input, params };
|
|
27
|
-
const { executionId } = await submitRun(body);
|
|
28
|
-
printSubmitted(executionId);
|
|
29
|
-
if (opts.wait !== false) {
|
|
30
|
-
printPollResult(await waitForCompletion(executionId));
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
console.log("[info]");
|
|
34
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
printError(err);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
18
|
+
const params = {};
|
|
19
|
+
if (opts.videoSize)
|
|
20
|
+
params.videoSize = opts.videoSize;
|
|
21
|
+
const extraInput = {};
|
|
22
|
+
if (opts.taskName)
|
|
23
|
+
extraInput.taskName = opts.taskName;
|
|
24
|
+
await executeRun("free-4k-video-upscaler", "v1.0", { videos: [opts.video], wait: opts.wait }, params, extraInput);
|
|
41
25
|
});
|
|
42
26
|
//# sourceMappingURL=free-4k-video-upscaler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"free-4k-video-upscaler.js","sourceRoot":"","sources":["../../src/commands/free-4k-video-upscaler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"free-4k-video-upscaler.js","sourceRoot":"","sources":["../../src/commands/free-4k-video-upscaler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,OAAO,CAAC,wBAAwB,CAAC;KACxE,OAAO,CAAC,kEAAkE,CAAC;KAC3E,WAAW,CACV,kEAAkE;IAClE,kFAAkF;IAClF,8DAA8D;IAC9D,oFAAoF;IACpF,aAAa;IACb,yEAAyE;IACzE,yFAAyF;IACzF,iFAAiF,CAClF;KACA,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,uDAAuD,CAAC;KACtF,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,wBAAwB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACpH,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
4
3
|
const DEFAULT_PROMPT = "A random AI girlfriend portrait, beautiful young woman, {ethnicity}, {hairstyle}, {makeup}, {vibe}, gentle soft smile, natural skin texture, cinematic soft lighting, {scene}, shallow depth of field, realistic photography, emotional warm atmosphere, 50mm lens, f1.8, ultra-detailed, 4k, masterpiece.";
|
|
5
4
|
export const freeAiGirlfriendGeneratorCmd = new Command("free-ai-girlfriend-generator")
|
|
6
5
|
.summary("AI girlfriend generator — generate a realistic AI girlfriend portrait from text or reference image")
|
|
@@ -17,32 +16,12 @@ export const freeAiGirlfriendGeneratorCmd = new Command("free-ai-girlfriend-gene
|
|
|
17
16
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
18
17
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
19
18
|
.action(async (opts) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (opts.image) {
|
|
28
|
-
const { url: imageUrl } = await resolveImage(opts.image);
|
|
29
|
-
params.images = [imageUrl];
|
|
30
|
-
input.originalImage = imageUrl;
|
|
31
|
-
}
|
|
32
|
-
const body = { agent: { name: "free-ai-girlfriend-generator", version: "v1.0" }, input, params };
|
|
33
|
-
const { executionId } = await submitRun(body);
|
|
34
|
-
printSubmitted(executionId);
|
|
35
|
-
if (opts.wait !== false) {
|
|
36
|
-
printPollResult(await waitForCompletion(executionId));
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
console.log("[info]");
|
|
40
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
printError(err);
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
19
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
20
|
+
if (opts.batch != null)
|
|
21
|
+
params.batchCount = opts.batch;
|
|
22
|
+
const extraInput = {};
|
|
23
|
+
if (opts.taskName)
|
|
24
|
+
extraInput.taskName = opts.taskName;
|
|
25
|
+
await executeRun("free-ai-girlfriend-generator", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
47
26
|
});
|
|
48
27
|
//# sourceMappingURL=free-ai-girlfriend-generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"free-ai-girlfriend-generator.js","sourceRoot":"","sources":["../../src/commands/free-ai-girlfriend-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"free-ai-girlfriend-generator.js","sourceRoot":"","sources":["../../src/commands/free-ai-girlfriend-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,4SAA4S,CAAC;AAE/S,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,OAAO,CAAC,8BAA8B,CAAC;KACpF,OAAO,CAAC,oGAAoG,CAAC;KAC7G,WAAW,CACV,0EAA0E;IAC1E,mDAAmD;IACnD,oGAAoG;IACpG,aAAa;IACb,2GAA2G;IAC3G,gHAAgH;IAChH,iDAAiD,CAClD;KACA,MAAM,CAAC,oBAAoB,EAAE,qDAAqD,CAAC;KACnF,MAAM,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;KACrE,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;IAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,MAAM,UAAU,CAAC,8BAA8B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACvH,CAAC,CAAC,CAAC"}
|