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 = "Convert the uploaded 2d image into a 3d image based on the user instructions.";
|
|
5
4
|
export const twoDTo3dImageConverterCmd = new Command("2d-to-3d-image-converter")
|
|
6
5
|
.summary("AI 2D to 3D image converter — transform a flat 2D image into a 3D rendered version")
|
|
@@ -17,28 +16,12 @@ export const twoDTo3dImageConverterCmd = new Command("2d-to-3d-image-converter")
|
|
|
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: "2d-to-3d-image-converter", 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("2d-to-3d-image-converter", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
43
26
|
});
|
|
44
27
|
//# sourceMappingURL=2d-to-3d-image-converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"2d-to-3d-image-converter.js","sourceRoot":"","sources":["../../src/commands/2d-to-3d-image-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"2d-to-3d-image-converter.js","sourceRoot":"","sources":["../../src/commands/2d-to-3d-image-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAAG,+EAA+E,CAAC;AAEvG,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,OAAO,CAAC,0BAA0B,CAAC;KAC7E,OAAO,CAAC,oFAAoF,CAAC;KAC7F,WAAW,CACV,6DAA6D;IAC7D,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,2DAA2D;IAC3D,qHAAqH;IACrH,oEAAoE,CACrE;KACA,cAAc,CAAC,oBAAoB,EAAE,yCAAyC,CAAC;KAC/E,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KAC7D,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,0BAA0B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACnH,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 screenshot of a 3D modeling software interface, showing the Blender viewport. At the center of the scene is a highly realistic 3D model of the main subject of this image in full and realistic rendering, with no visible topology or wireframe. The model is placed on a gray 3D grid ground with an infinite horizon. The software UI toolbars are visible along the side, a coordinate axis widget appears in the corner, the viewport is in solid shading mode, and the overall scene represents a 3D asset design workspace. 4k resolution and ratio.";
|
|
5
4
|
export const ai3dRenderingCmd = new Command("ai-3d-rendering")
|
|
6
5
|
.summary("AI 3D rendering — transform a photo into a Blender-style 3D model viewport screenshot")
|
|
@@ -19,28 +18,12 @@ export const ai3dRenderingCmd = new Command("ai-3d-rendering")
|
|
|
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
|
-
input.taskName = opts.taskName;
|
|
30
|
-
const body = { agent: { name: "ai-3d-rendering", version: "v1.0" }, input, params };
|
|
31
|
-
const { executionId } = await submitRun(body);
|
|
32
|
-
printSubmitted(executionId);
|
|
33
|
-
if (opts.wait !== false) {
|
|
34
|
-
printPollResult(await waitForCompletion(executionId));
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
console.log("[info]");
|
|
38
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
printError(err);
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
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("ai-3d-rendering", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
45
28
|
});
|
|
46
29
|
//# sourceMappingURL=ai-3d-rendering.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-3d-rendering.js","sourceRoot":"","sources":["../../src/commands/ai-3d-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-3d-rendering.js","sourceRoot":"","sources":["../../src/commands/ai-3d-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,+hBAA+hB,CAAC;AAEliB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAC3D,OAAO,CAAC,uFAAuF,CAAC;KAChG,WAAW,CACV,4FAA4F;IAC5F,yEAAyE;IACzE,mDAAmD;IACnD,6FAA6F;IAC7F,gEAAgE;IAChE,aAAa;IACb,iDAAiD;IACjD,qGAAqG;IACrG,4DAA4D,CAC7D;KACA,cAAc,CAAC,oBAAoB,EAAE,sCAAsC,CAAC;KAC5E,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,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,iBAAiB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1G,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 commercially available figure of the character from the illustration is produced in 1/ scale, featuring a realistic style and environment. The figure is displayed on a computer desk with a round, clear acrylic base devoid of any text. The ZBrush modeling process of the figure is shown on the computer screen. Beside the computer screen, a BANDAl-style toy box printed with the original illustration is positioned";
|
|
5
4
|
export const aiActionFigureGeneratorsCmd = new Command("ai-action-figure-generators")
|
|
6
5
|
.summary("AI action figure generator — turn a photo or character into a collectible action figure display")
|
|
@@ -18,32 +17,12 @@ export const aiActionFigureGeneratorsCmd = new Command("ai-action-figure-generat
|
|
|
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
|
-
if (opts.image) {
|
|
29
|
-
const { url: imageUrl } = await resolveImage(opts.image);
|
|
30
|
-
params.images = [imageUrl];
|
|
31
|
-
input.originalImage = imageUrl;
|
|
32
|
-
}
|
|
33
|
-
const body = { agent: { name: "ai-action-figure-generators", version: "v1.0" }, input, params };
|
|
34
|
-
const { executionId } = await submitRun(body);
|
|
35
|
-
printSubmitted(executionId);
|
|
36
|
-
if (opts.wait !== false) {
|
|
37
|
-
printPollResult(await waitForCompletion(executionId));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
console.log("[info]");
|
|
41
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
printError(err);
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
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("ai-action-figure-generators", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
48
27
|
});
|
|
49
28
|
//# sourceMappingURL=ai-action-figure-generators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-action-figure-generators.js","sourceRoot":"","sources":["../../src/commands/ai-action-figure-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-action-figure-generators.js","sourceRoot":"","sources":["../../src/commands/ai-action-figure-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,iaAAia,CAAC;AAEpa,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,OAAO,CAAC,6BAA6B,CAAC;KAClF,OAAO,CAAC,iGAAiG,CAAC;KAC1G,WAAW,CACV,wFAAwF;IACxF,gFAAgF;IAChF,mDAAmD;IACnD,6FAA6F;IAC7F,aAAa;IACb,gEAAgE;IAChE,0HAA0H;IAC1H,gDAAgD,CACjD;KACA,MAAM,CAAC,oBAAoB,EAAE,yEAAyE,CAAC;KACvG,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KAC7D,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,6BAA6B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACtH,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 = "what will this person look like when he/she is 60";
|
|
5
4
|
export const aiAgingCmd = new Command("ai-aging")
|
|
6
5
|
.summary("AI age progression — transform a portrait to show how the person will look older")
|
|
@@ -17,36 +16,12 @@ export const aiAgingCmd = new Command("ai-aging")
|
|
|
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
|
-
params.batchCount = opts.batch;
|
|
28
|
-
const input = { originalImage: imageUrl };
|
|
29
|
-
if (opts.taskName)
|
|
30
|
-
input.taskName = opts.taskName;
|
|
31
|
-
const body = {
|
|
32
|
-
agent: { name: "ai-aging", version: "v1.0" },
|
|
33
|
-
input,
|
|
34
|
-
params,
|
|
35
|
-
};
|
|
36
|
-
const { executionId } = await submitRun(body);
|
|
37
|
-
printSubmitted(executionId);
|
|
38
|
-
if (opts.wait !== false) {
|
|
39
|
-
const data = await waitForCompletion(executionId);
|
|
40
|
-
printPollResult(data);
|
|
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
|
-
}
|
|
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("ai-aging", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
51
26
|
});
|
|
52
27
|
//# sourceMappingURL=ai-aging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-aging.js","sourceRoot":"","sources":["../../src/commands/ai-aging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-aging.js","sourceRoot":"","sources":["../../src/commands/ai-aging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAAG,mDAAmD,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KAC9C,OAAO,CAAC,kFAAkF,CAAC;KAC3F,WAAW,CACV,mGAAmG;IACnG,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,0CAA0C;IAC1C,2FAA2F;IAC3F,kDAAkD,CACnD;KACA,cAAc,CAAC,oBAAoB,EAAE,+CAA+C,CAAC;KACrF,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;KAC1E,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,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"}
|
package/dist/commands/ai-babe.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 = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
4
|
export const aiBabeCmd = new Command("ai-babe")
|
|
6
5
|
.summary("AI babe generator — generate photorealistic attractive images from a person photo")
|
|
@@ -11,33 +10,17 @@ export const aiBabeCmd = new Command("ai-babe")
|
|
|
11
10
|
" weshop ai-babe --image ./person.png --prompt 'Bikini model on a yacht'\n" +
|
|
12
11
|
" weshop ai-babe --image ./person.png --prompt 'Glamorous evening gown, red carpet' --batch 2")
|
|
13
12
|
.requiredOption("--image <path|url>", "Input person photo — local file path or URL")
|
|
14
|
-
.
|
|
13
|
+
.option("--prompt <text>", "Describe the desired scene")
|
|
15
14
|
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
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
|
-
input.taskName = opts.taskName;
|
|
27
|
-
const body = { agent: { name: "ai-babe", version: "v1.0" }, input, params };
|
|
28
|
-
const { executionId } = await submitRun(body);
|
|
29
|
-
printSubmitted(executionId);
|
|
30
|
-
if (opts.wait !== false) {
|
|
31
|
-
printPollResult(await waitForCompletion(executionId));
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
console.log("[info]");
|
|
35
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
printError(err);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
18
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
19
|
+
if (opts.batch != null)
|
|
20
|
+
params.batchCount = opts.batch;
|
|
21
|
+
const extraInput = {};
|
|
22
|
+
if (opts.taskName)
|
|
23
|
+
extraInput.taskName = opts.taskName;
|
|
24
|
+
await executeRun("ai-babe", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
42
25
|
});
|
|
43
26
|
//# sourceMappingURL=ai-babe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-babe.js","sourceRoot":"","sources":["../../src/commands/ai-babe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-babe.js","sourceRoot":"","sources":["../../src/commands/ai-babe.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,SAAS,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAC5C,OAAO,CAAC,mFAAmF,CAAC;KAC5F,WAAW,CACV,wFAAwF;IACxF,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,4EAA4E;IAC5E,+FAA+F,CAChG;KACA,cAAc,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;KACvD,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,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAClG,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 = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
4
|
export const aiBikiniModelCmd = new Command("ai-bikini-model")
|
|
6
5
|
.summary("AI bikini model — transform a person photo into a bikini model image or video")
|
|
@@ -17,38 +16,21 @@ export const aiBikiniModelCmd = new Command("ai-bikini-model")
|
|
|
17
16
|
" weshop ai-bikini-model --image ./person.png --generated-type image --batch 2\n" +
|
|
18
17
|
" weshop ai-bikini-model --image ./person.png --generated-type video --no-wait")
|
|
19
18
|
.requiredOption("--image <path|url>", "Input portrait or full-body photo — local file path or URL")
|
|
20
|
-
.
|
|
19
|
+
.option("--prompt <text>", "Describe the desired bikini model scene")
|
|
21
20
|
.option("--generated-type <type>", "Output type: video (default) or image")
|
|
22
21
|
.option("--batch <count>", "Number of outputs to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
23
22
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
24
23
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
25
24
|
.action(async (opts) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (opts.taskName)
|
|
37
|
-
input.taskName = opts.taskName;
|
|
38
|
-
const body = { agent: { name: "ai-bikini-model", version: "v1.0" }, input, params };
|
|
39
|
-
const { executionId } = await submitRun(body);
|
|
40
|
-
printSubmitted(executionId);
|
|
41
|
-
if (opts.wait !== false) {
|
|
42
|
-
printPollResult(await waitForCompletion(executionId));
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
console.log("[info]");
|
|
46
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (err) {
|
|
50
|
-
printError(err);
|
|
51
|
-
process.exit(1);
|
|
52
|
-
}
|
|
25
|
+
const params = {
|
|
26
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
27
|
+
generatedType: opts.generatedType ?? "video",
|
|
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("ai-bikini-model", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
53
35
|
});
|
|
54
36
|
//# sourceMappingURL=ai-bikini-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-bikini-model.js","sourceRoot":"","sources":["../../src/commands/ai-bikini-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-bikini-model.js","sourceRoot":"","sources":["../../src/commands/ai-bikini-model.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,gBAAgB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAC3D,OAAO,CAAC,+EAA+E,CAAC;KACxF,WAAW,CACV,iFAAiF;IACjF,sCAAsC;IACtC,8CAA8C;IAC9C,sCAAsC;IACtC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,sEAAsE;IACtE,wEAAwE;IACxE,aAAa;IACb,oFAAoF;IACpF,kFAAkF;IAClF,gFAAgF,CACjF;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,iBAAiB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1G,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 = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
4
|
export const aiBikiniPhotoEditorCmd = new Command("ai-bikini-photo-editor")
|
|
6
5
|
.summary("AI bikini photo editor — edit a person photo into a bikini scene with a required prompt")
|
|
@@ -11,33 +10,17 @@ export const aiBikiniPhotoEditorCmd = new Command("ai-bikini-photo-editor")
|
|
|
11
10
|
" weshop ai-bikini-photo-editor --image ./person.png --prompt 'Bikini on a sunny beach'\n" +
|
|
12
11
|
" weshop ai-bikini-photo-editor --image ./person.png --prompt 'Colorful bikini, pool party setting' --batch 2")
|
|
13
12
|
.requiredOption("--image <path|url>", "Input person photo — local file path or URL")
|
|
14
|
-
.
|
|
13
|
+
.option("--prompt <text>", "Describe the desired bikini scene")
|
|
15
14
|
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
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
|
-
input.taskName = opts.taskName;
|
|
27
|
-
const body = { agent: { name: "ai-bikini-photo-editor", version: "v1.0" }, input, params };
|
|
28
|
-
const { executionId } = await submitRun(body);
|
|
29
|
-
printSubmitted(executionId);
|
|
30
|
-
if (opts.wait !== false) {
|
|
31
|
-
printPollResult(await waitForCompletion(executionId));
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
console.log("[info]");
|
|
35
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
printError(err);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
18
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
19
|
+
if (opts.batch != null)
|
|
20
|
+
params.batchCount = opts.batch;
|
|
21
|
+
const extraInput = {};
|
|
22
|
+
if (opts.taskName)
|
|
23
|
+
extraInput.taskName = opts.taskName;
|
|
24
|
+
await executeRun("ai-bikini-photo-editor", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
42
25
|
});
|
|
43
26
|
//# sourceMappingURL=ai-bikini-photo-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-bikini-photo-editor.js","sourceRoot":"","sources":["../../src/commands/ai-bikini-photo-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-bikini-photo-editor.js","sourceRoot":"","sources":["../../src/commands/ai-bikini-photo-editor.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,sBAAsB,GAAG,IAAI,OAAO,CAAC,wBAAwB,CAAC;KACxE,OAAO,CAAC,yFAAyF,CAAC;KAClG,WAAW,CACV,kEAAkE;IAClE,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,2FAA2F;IAC3F,+GAA+G,CAChH;KACA,cAAc,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,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,wBAAwB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACjH,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 = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
4
|
export const aiBikiniVideoCmd = new Command("ai-bikini-video")
|
|
6
5
|
.summary("AI bikini video generator — generate a bikini dance video from a person photo")
|
|
@@ -18,31 +17,14 @@ export const aiBikiniVideoCmd = new Command("ai-bikini-video")
|
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
if (opts.taskName)
|
|
31
|
-
input.taskName = opts.taskName;
|
|
32
|
-
const body = { agent: { name: "ai-bikini-video", 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
|
-
}
|
|
20
|
+
const params = {
|
|
21
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
22
|
+
};
|
|
23
|
+
if (opts.batch != null)
|
|
24
|
+
params.batchCount = opts.batch;
|
|
25
|
+
const extraInput = {};
|
|
26
|
+
if (opts.taskName)
|
|
27
|
+
extraInput.taskName = opts.taskName;
|
|
28
|
+
await executeRun("ai-bikini-video", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
47
29
|
});
|
|
48
30
|
//# sourceMappingURL=ai-bikini-video.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-bikini-video.js","sourceRoot":"","sources":["../../src/commands/ai-bikini-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-bikini-video.js","sourceRoot":"","sources":["../../src/commands/ai-bikini-video.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,gBAAgB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAC3D,OAAO,CAAC,+EAA+E,CAAC;KACxF,WAAW,CACV,sFAAsF;IACtF,sDAAsD;IACtD,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,iDAAiD;IACjD,4FAA4F;IAC5F,yDAAyD,CAC1D;KACA,cAAc,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,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,IAAI,cAAc;KAC/C,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,iBAAiB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1G,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 = "Create a Christmas-themed portrait photo based on the provided image. The overall scene should convey a festive Christmas party atmosphere, incorporating classic Christmas decorative elements such as gift boxes, bells, apples, and snowmen. Must include a decorated Christmas tree with hanging ornaments, a small teddy bear plush placed nearby, and a large Santa Claus plush toy positioned in the background. In the foreground, golden confetti and falling snow should be visible, featuring motion blur effects to enhance the sense of movement and festivity. The photography style should use direct on-camera flash, creating a bold, frontal lighting effect. The overall aesthetic should evoke a vintage film look with subtle Y2K influences, featuring visible film grain and noise texture. Emphasize catchlights in the eyes as much as possible. The primary color palette should consist of vivid red, green, and white, with optional dark blue accents. The background vary between a white wall, a photo studio, a deep night sky filled with stars, or others as long as it aligns with a Christmas theme. The shot type can be randomly chosen between medium shot, full-body shot, or close-up. For wardrobe styling, select Christmas-themed outfits, such as Christmas sweaters, Santa hats, red scarves, or winter attire. The original facial details and body proportions of the subject must be strictly preserved.";
|
|
5
4
|
export const aiChristmasPhotoCmd = new Command("ai-christmas-photo")
|
|
6
5
|
.summary("AI Christmas photo generator — transform a portrait into a festive Christmas scene")
|
|
@@ -19,31 +18,12 @@ export const aiChristmasPhotoCmd = new Command("ai-christmas-photo")
|
|
|
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
|
-
params.batchCount = opts.batch;
|
|
30
|
-
const input = { originalImage: imageUrl };
|
|
31
|
-
if (opts.taskName)
|
|
32
|
-
input.taskName = opts.taskName;
|
|
33
|
-
const body = { agent: { name: "ai-christmas-photo", version: "v1.0" }, input, params };
|
|
34
|
-
const { executionId } = await submitRun(body);
|
|
35
|
-
printSubmitted(executionId);
|
|
36
|
-
if (opts.wait !== false) {
|
|
37
|
-
printPollResult(await waitForCompletion(executionId));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
console.log("[info]");
|
|
41
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
printError(err);
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
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("ai-christmas-photo", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
48
28
|
});
|
|
49
29
|
//# sourceMappingURL=ai-christmas-photo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-christmas-photo.js","sourceRoot":"","sources":["../../src/commands/ai-christmas-photo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-christmas-photo.js","sourceRoot":"","sources":["../../src/commands/ai-christmas-photo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,23CAA23C,CAAC;AAE93C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC;KACjE,OAAO,CAAC,oFAAoF,CAAC;KAC7F,WAAW,CACV,sFAAsF;IACtF,yDAAyD;IACzD,mDAAmD;IACnD,uFAAuF;IACvF,uFAAuF;IACvF,aAAa;IACb,oDAAoD;IACpD,6GAA6G;IAC7G,4DAA4D,CAC7D;KACA,cAAc,CAAC,oBAAoB,EAAE,+CAA+C,CAAC;KACrF,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,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,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
|
const DEFAULT_PROMPT = "The person in Figure 1 is wearing the clothes shown in Figure 2";
|
|
5
4
|
export const aiClothesChangerCmd = new Command("ai-clothes-changer")
|
|
6
5
|
.summary("AI clothes changer — dress a person (image 1) in the garment shown in another photo (image 2)")
|
|
@@ -20,37 +19,17 @@ export const aiClothesChangerCmd = new Command("ai-clothes-changer")
|
|
|
20
19
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
21
20
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
22
21
|
.action(async (opts) => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
console.error("[error]\n message: Exactly 2 images required: person (image 1) and garment (image 2)");
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
const urls = [];
|
|
30
|
-
for (const img of imageList) {
|
|
31
|
-
const { url } = await resolveImage(img);
|
|
32
|
-
urls.push(url);
|
|
33
|
-
}
|
|
34
|
-
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT, images: urls };
|
|
35
|
-
if (opts.batch != null)
|
|
36
|
-
params.batchCount = opts.batch;
|
|
37
|
-
const input = { originalImage: urls[0] };
|
|
38
|
-
if (opts.taskName)
|
|
39
|
-
input.taskName = opts.taskName;
|
|
40
|
-
const body = { agent: { name: "ai-clothes-changer", version: "v1.0" }, input, params };
|
|
41
|
-
const { executionId } = await submitRun(body);
|
|
42
|
-
printSubmitted(executionId);
|
|
43
|
-
if (opts.wait !== false) {
|
|
44
|
-
printPollResult(await waitForCompletion(executionId));
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
console.log("[info]");
|
|
48
|
-
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
printError(err);
|
|
22
|
+
const imageList = opts.image;
|
|
23
|
+
if (imageList.length !== 2) {
|
|
24
|
+
console.error("[error]\n message: Exactly 2 images required: person (image 1) and garment (image 2)");
|
|
53
25
|
process.exit(1);
|
|
54
26
|
}
|
|
27
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
28
|
+
if (opts.batch != null)
|
|
29
|
+
params.batchCount = opts.batch;
|
|
30
|
+
const extraInput = {};
|
|
31
|
+
if (opts.taskName)
|
|
32
|
+
extraInput.taskName = opts.taskName;
|
|
33
|
+
await executeRun("ai-clothes-changer", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
55
34
|
});
|
|
56
35
|
//# sourceMappingURL=ai-clothes-changer.js.map
|