weshop-cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -7
- package/dist/client.d.ts +2 -0
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/2d-to-3d-image-converter.d.ts +2 -0
- package/dist/commands/2d-to-3d-image-converter.js +44 -0
- package/dist/commands/2d-to-3d-image-converter.js.map +1 -0
- package/dist/commands/ai-3d-rendering.d.ts +2 -0
- package/dist/commands/ai-3d-rendering.js +46 -0
- package/dist/commands/ai-3d-rendering.js.map +1 -0
- package/dist/commands/ai-action-figure-generators.d.ts +2 -0
- package/dist/commands/ai-action-figure-generators.js +49 -0
- package/dist/commands/ai-action-figure-generators.js.map +1 -0
- package/dist/commands/ai-aging.d.ts +2 -0
- package/dist/commands/ai-aging.js +52 -0
- package/dist/commands/ai-aging.js.map +1 -0
- package/dist/commands/ai-babe.d.ts +2 -0
- package/dist/commands/ai-babe.js +43 -0
- package/dist/commands/ai-babe.js.map +1 -0
- package/dist/commands/ai-bikini-model.d.ts +2 -0
- package/dist/commands/ai-bikini-model.js +54 -0
- package/dist/commands/ai-bikini-model.js.map +1 -0
- package/dist/commands/ai-bikini-photo-editor.d.ts +2 -0
- package/dist/commands/ai-bikini-photo-editor.js +43 -0
- package/dist/commands/ai-bikini-photo-editor.js.map +1 -0
- package/dist/commands/ai-bikini-video.d.ts +2 -0
- package/dist/commands/ai-bikini-video.js +48 -0
- package/dist/commands/ai-bikini-video.js.map +1 -0
- package/dist/commands/ai-christmas-photo.d.ts +2 -0
- package/dist/commands/ai-christmas-photo.js +49 -0
- package/dist/commands/ai-christmas-photo.js.map +1 -0
- package/dist/commands/ai-clothes-changer.d.ts +2 -0
- package/dist/commands/ai-clothes-changer.js +56 -0
- package/dist/commands/ai-clothes-changer.js.map +1 -0
- package/dist/commands/ai-collage-maker.d.ts +2 -0
- package/dist/commands/ai-collage-maker.js +54 -0
- package/dist/commands/ai-collage-maker.js.map +1 -0
- package/dist/commands/ai-dog.d.ts +2 -0
- package/dist/commands/ai-dog.js +57 -0
- package/dist/commands/ai-dog.js.map +1 -0
- package/dist/commands/ai-elf.d.ts +2 -0
- package/dist/commands/ai-elf.js +45 -0
- package/dist/commands/ai-elf.js.map +1 -0
- package/dist/commands/ai-face-merge.d.ts +2 -0
- package/dist/commands/ai-face-merge.js +63 -0
- package/dist/commands/ai-face-merge.js.map +1 -0
- package/dist/commands/ai-feet.d.ts +2 -0
- package/dist/commands/ai-feet.js +44 -0
- package/dist/commands/ai-feet.js.map +1 -0
- package/dist/commands/ai-flag-generator.d.ts +2 -0
- package/dist/commands/ai-flag-generator.js +49 -0
- package/dist/commands/ai-flag-generator.js.map +1 -0
- package/dist/commands/ai-generated-bikini-girls.d.ts +2 -0
- package/dist/commands/ai-generated-bikini-girls.js +52 -0
- package/dist/commands/ai-generated-bikini-girls.js.map +1 -0
- package/dist/commands/ai-generated-perfect-female-body.d.ts +2 -0
- package/dist/commands/ai-generated-perfect-female-body.js +52 -0
- package/dist/commands/ai-generated-perfect-female-body.js.map +1 -0
- package/dist/commands/ai-ghost-mannequin-generator.d.ts +2 -0
- package/dist/commands/ai-ghost-mannequin-generator.js +56 -0
- package/dist/commands/ai-ghost-mannequin-generator.js.map +1 -0
- package/dist/commands/ai-group-photo-generator.d.ts +2 -0
- package/dist/commands/ai-group-photo-generator.js +54 -0
- package/dist/commands/ai-group-photo-generator.js.map +1 -0
- package/dist/commands/ai-hair-color-changer.d.ts +2 -0
- package/dist/commands/ai-hair-color-changer.js +48 -0
- package/dist/commands/ai-hair-color-changer.js.map +1 -0
- package/dist/commands/ai-hairstyle-changer.d.ts +2 -0
- package/dist/commands/ai-hairstyle-changer.js +48 -0
- package/dist/commands/ai-hairstyle-changer.js.map +1 -0
- package/dist/commands/ai-hot-girl-image.d.ts +2 -0
- package/dist/commands/ai-hot-girl-image.js +52 -0
- package/dist/commands/ai-hot-girl-image.js.map +1 -0
- package/dist/commands/ai-image-animation.d.ts +2 -0
- package/dist/commands/ai-image-animation.js +60 -0
- package/dist/commands/ai-image-animation.js.map +1 -0
- package/dist/commands/ai-image-combiner.d.ts +2 -0
- package/dist/commands/ai-image-combiner.js +57 -0
- package/dist/commands/ai-image-combiner.js.map +1 -0
- package/dist/commands/ai-landscape-design-free.d.ts +2 -0
- package/dist/commands/ai-landscape-design-free.js +60 -0
- package/dist/commands/ai-landscape-design-free.js.map +1 -0
- package/dist/commands/ai-lingerie-models.d.ts +2 -0
- package/dist/commands/ai-lingerie-models.js +52 -0
- package/dist/commands/ai-lingerie-models.js.map +1 -0
- package/dist/commands/ai-photoshoot.d.ts +2 -0
- package/dist/commands/ai-photoshoot.js +81 -0
- package/dist/commands/ai-photoshoot.js.map +1 -0
- package/dist/commands/ai-poster-from-images.d.ts +2 -0
- package/dist/commands/ai-poster-from-images.js +73 -0
- package/dist/commands/ai-poster-from-images.js.map +1 -0
- package/dist/commands/ai-poster.d.ts +2 -0
- package/dist/commands/ai-poster.js +73 -0
- package/dist/commands/ai-poster.js.map +1 -0
- package/dist/commands/ai-room-planner.d.ts +2 -0
- package/dist/commands/ai-room-planner.js +49 -0
- package/dist/commands/ai-room-planner.js.map +1 -0
- package/dist/commands/ai-selfie.d.ts +2 -0
- package/dist/commands/ai-selfie.js +44 -0
- package/dist/commands/ai-selfie.js.map +1 -0
- package/dist/commands/ai-sexy-portrait.d.ts +2 -0
- package/dist/commands/ai-sexy-portrait.js +52 -0
- package/dist/commands/ai-sexy-portrait.js.map +1 -0
- package/dist/commands/ai-sexy-teens.d.ts +2 -0
- package/dist/commands/ai-sexy-teens.js +52 -0
- package/dist/commands/ai-sexy-teens.js.map +1 -0
- package/dist/commands/ai-spray-paint.d.ts +2 -0
- package/dist/commands/ai-spray-paint.js +49 -0
- package/dist/commands/ai-spray-paint.js.map +1 -0
- package/dist/commands/ai-swimsuit-model.d.ts +2 -0
- package/dist/commands/ai-swimsuit-model.js +44 -0
- package/dist/commands/ai-swimsuit-model.js.map +1 -0
- package/dist/commands/ai-tattoo-generator.d.ts +2 -0
- package/dist/commands/ai-tattoo-generator.js +48 -0
- package/dist/commands/ai-tattoo-generator.js.map +1 -0
- package/dist/commands/ai-text-remover-from-video.d.ts +2 -0
- package/dist/commands/ai-text-remover-from-video.js +37 -0
- package/dist/commands/ai-text-remover-from-video.js.map +1 -0
- package/dist/commands/ai-translate.d.ts +2 -0
- package/dist/commands/ai-translate.js +53 -0
- package/dist/commands/ai-translate.js.map +1 -0
- package/dist/commands/ai-video-enhancer.d.ts +2 -0
- package/dist/commands/ai-video-enhancer.js +49 -0
- package/dist/commands/ai-video-enhancer.js.map +1 -0
- package/dist/commands/ai-werewolf.d.ts +2 -0
- package/dist/commands/ai-werewolf.js +61 -0
- package/dist/commands/ai-werewolf.js.map +1 -0
- package/dist/commands/ai-xray-clothes.d.ts +2 -0
- package/dist/commands/ai-xray-clothes.js +45 -0
- package/dist/commands/ai-xray-clothes.js.map +1 -0
- package/dist/commands/ai-zombie.d.ts +2 -0
- package/dist/commands/ai-zombie.js +45 -0
- package/dist/commands/ai-zombie.js.map +1 -0
- package/dist/commands/aimodel.js +2 -2
- package/dist/commands/aimodel.js.map +1 -1
- package/dist/commands/aipose.js +2 -2
- package/dist/commands/aipose.js.map +1 -1
- package/dist/commands/aiproduct.js +2 -2
- package/dist/commands/aiproduct.js.map +1 -1
- package/dist/commands/anime-image-converter.d.ts +2 -0
- package/dist/commands/anime-image-converter.js +44 -0
- package/dist/commands/anime-image-converter.js.map +1 -0
- package/dist/commands/baby-face-generator.d.ts +2 -0
- package/dist/commands/baby-face-generator.js +59 -0
- package/dist/commands/baby-face-generator.js.map +1 -0
- package/dist/commands/bald-filter.d.ts +2 -0
- package/dist/commands/bald-filter.js +47 -0
- package/dist/commands/bald-filter.js.map +1 -0
- package/dist/commands/bangs-filter.d.ts +2 -0
- package/dist/commands/bangs-filter.js +45 -0
- package/dist/commands/bangs-filter.js.map +1 -0
- package/dist/commands/bikini-contest-photos.d.ts +2 -0
- package/dist/commands/bikini-contest-photos.js +52 -0
- package/dist/commands/bikini-contest-photos.js.map +1 -0
- package/dist/commands/bikini-try-on.d.ts +2 -0
- package/dist/commands/bikini-try-on.js +44 -0
- package/dist/commands/bikini-try-on.js.map +1 -0
- package/dist/commands/braces-filter.d.ts +2 -0
- package/dist/commands/braces-filter.js +44 -0
- package/dist/commands/braces-filter.js.map +1 -0
- package/dist/commands/brat-generator.d.ts +2 -0
- package/dist/commands/brat-generator.js +48 -0
- package/dist/commands/brat-generator.js.map +1 -0
- package/dist/commands/buzz-cut-ai.d.ts +2 -0
- package/dist/commands/buzz-cut-ai.js +52 -0
- package/dist/commands/buzz-cut-ai.js.map +1 -0
- package/dist/commands/celeb-ai.d.ts +2 -0
- package/dist/commands/celeb-ai.js +54 -0
- package/dist/commands/celeb-ai.js.map +1 -0
- package/dist/commands/chibi-maker.d.ts +2 -0
- package/dist/commands/chibi-maker.js +52 -0
- package/dist/commands/chibi-maker.js.map +1 -0
- package/dist/commands/clothing-magic-remover.d.ts +2 -0
- package/dist/commands/clothing-magic-remover.js +44 -0
- package/dist/commands/clothing-magic-remover.js.map +1 -0
- package/dist/commands/custom-bikini.d.ts +2 -0
- package/dist/commands/custom-bikini.js +52 -0
- package/dist/commands/custom-bikini.js.map +1 -0
- package/dist/commands/cute-anime-girl-ai-bikini.d.ts +2 -0
- package/dist/commands/cute-anime-girl-ai-bikini.js +52 -0
- package/dist/commands/cute-anime-girl-ai-bikini.js.map +1 -0
- package/dist/commands/demon-slayer-oc-maker.d.ts +2 -0
- package/dist/commands/demon-slayer-oc-maker.js +50 -0
- package/dist/commands/demon-slayer-oc-maker.js.map +1 -0
- package/dist/commands/dress-remover-magic-eraser.d.ts +2 -0
- package/dist/commands/dress-remover-magic-eraser.js +44 -0
- package/dist/commands/dress-remover-magic-eraser.js.map +1 -0
- package/dist/commands/expandimage.js +2 -2
- package/dist/commands/expandimage.js.map +1 -1
- package/dist/commands/face-forge.d.ts +2 -0
- package/dist/commands/face-forge.js +86 -0
- package/dist/commands/face-forge.js.map +1 -0
- package/dist/commands/fat-ai.d.ts +2 -0
- package/dist/commands/fat-ai.js +53 -0
- package/dist/commands/fat-ai.js.map +1 -0
- package/dist/commands/firered-image-edit.d.ts +2 -0
- package/dist/commands/firered-image-edit.js +61 -0
- package/dist/commands/firered-image-edit.js.map +1 -0
- package/dist/commands/flat-lay.d.ts +2 -0
- package/dist/commands/flat-lay.js +65 -0
- package/dist/commands/flat-lay.js.map +1 -0
- package/dist/commands/free-4k-video-upscaler.d.ts +2 -0
- package/dist/commands/free-4k-video-upscaler.js +42 -0
- package/dist/commands/free-4k-video-upscaler.js.map +1 -0
- package/dist/commands/free-ai-girlfriend-generator.d.ts +2 -0
- package/dist/commands/free-ai-girlfriend-generator.js +48 -0
- package/dist/commands/free-ai-girlfriend-generator.js.map +1 -0
- package/dist/commands/free-online-video-quality-enhancer.d.ts +2 -0
- package/dist/commands/free-online-video-quality-enhancer.js +42 -0
- package/dist/commands/free-online-video-quality-enhancer.js.map +1 -0
- package/dist/commands/free-sexy-ai-generator.d.ts +2 -0
- package/dist/commands/free-sexy-ai-generator.js +52 -0
- package/dist/commands/free-sexy-ai-generator.js.map +1 -0
- package/dist/commands/futuristic-elegance.d.ts +2 -0
- package/dist/commands/futuristic-elegance.js +54 -0
- package/dist/commands/futuristic-elegance.js.map +1 -0
- package/dist/commands/gemini-watermark-remover.d.ts +2 -0
- package/dist/commands/gemini-watermark-remover.js +37 -0
- package/dist/commands/gemini-watermark-remover.js.map +1 -0
- package/dist/commands/gender-swap.d.ts +2 -0
- package/dist/commands/gender-swap.js +53 -0
- package/dist/commands/gender-swap.js.map +1 -0
- package/dist/commands/ghibli-art-create.d.ts +2 -0
- package/dist/commands/ghibli-art-create.js +48 -0
- package/dist/commands/ghibli-art-create.js.map +1 -0
- package/dist/commands/grok-imagine-video.d.ts +2 -0
- package/dist/commands/grok-imagine-video.js +53 -0
- package/dist/commands/grok-imagine-video.js.map +1 -0
- package/dist/commands/grok-imagine.d.ts +2 -0
- package/dist/commands/grok-imagine.js +46 -0
- package/dist/commands/grok-imagine.js.map +1 -0
- package/dist/commands/hair-color-try-on.d.ts +2 -0
- package/dist/commands/hair-color-try-on.js +48 -0
- package/dist/commands/hair-color-try-on.js.map +1 -0
- package/dist/commands/happy-woman-bikini-ai-pic.d.ts +2 -0
- package/dist/commands/happy-woman-bikini-ai-pic.js +52 -0
- package/dist/commands/happy-woman-bikini-ai-pic.js.map +1 -0
- package/dist/commands/hot-bikini-models.d.ts +2 -0
- package/dist/commands/hot-bikini-models.js +52 -0
- package/dist/commands/hot-bikini-models.js.map +1 -0
- package/dist/commands/image-mixer.d.ts +2 -0
- package/dist/commands/image-mixer.js +57 -0
- package/dist/commands/image-mixer.js.map +1 -0
- package/dist/commands/image-to-sketch.d.ts +2 -0
- package/dist/commands/image-to-sketch.js +44 -0
- package/dist/commands/image-to-sketch.js.map +1 -0
- package/dist/commands/improve-video-quality-online-free.d.ts +2 -0
- package/dist/commands/improve-video-quality-online-free.js +42 -0
- package/dist/commands/improve-video-quality-online-free.js.map +1 -0
- package/dist/commands/kling.d.ts +2 -0
- package/dist/commands/kling.js +75 -0
- package/dist/commands/kling.js.map +1 -0
- package/dist/commands/logo-remover-from-video.d.ts +2 -0
- package/dist/commands/logo-remover-from-video.js +37 -0
- package/dist/commands/logo-remover-from-video.js.map +1 -0
- package/dist/commands/midjourney.d.ts +2 -0
- package/dist/commands/midjourney.js +54 -0
- package/dist/commands/midjourney.js.map +1 -0
- package/dist/commands/mugshot-creator.d.ts +2 -0
- package/dist/commands/mugshot-creator.js +45 -0
- package/dist/commands/mugshot-creator.js.map +1 -0
- package/dist/commands/murder-drones-oc.d.ts +2 -0
- package/dist/commands/murder-drones-oc.js +50 -0
- package/dist/commands/murder-drones-oc.js.map +1 -0
- package/dist/commands/outfit-generator.d.ts +2 -0
- package/dist/commands/outfit-generator.js +54 -0
- package/dist/commands/outfit-generator.js.map +1 -0
- package/dist/commands/personalized-swimsuit.d.ts +2 -0
- package/dist/commands/personalized-swimsuit.js +52 -0
- package/dist/commands/personalized-swimsuit.js.map +1 -0
- package/dist/commands/photo-to-bikini-ai.d.ts +2 -0
- package/dist/commands/photo-to-bikini-ai.js +44 -0
- package/dist/commands/photo-to-bikini-ai.js.map +1 -0
- package/dist/commands/pregnant-ai.d.ts +2 -0
- package/dist/commands/pregnant-ai.js +54 -0
- package/dist/commands/pregnant-ai.js.map +1 -0
- package/dist/commands/ps2-filter.d.ts +2 -0
- package/dist/commands/ps2-filter.js +45 -0
- package/dist/commands/ps2-filter.js.map +1 -0
- package/dist/commands/qwen-image-edit.d.ts +2 -0
- package/dist/commands/qwen-image-edit.js +64 -0
- package/dist/commands/qwen-image-edit.js.map +1 -0
- package/dist/commands/random-animal-generator.d.ts +2 -0
- package/dist/commands/random-animal-generator.js +49 -0
- package/dist/commands/random-animal-generator.js.map +1 -0
- package/dist/commands/remove-filter-from-photo.d.ts +2 -0
- package/dist/commands/remove-filter-from-photo.js +48 -0
- package/dist/commands/remove-filter-from-photo.js.map +1 -0
- package/dist/commands/remove-subtitles-from-video-online-free.d.ts +2 -0
- package/dist/commands/remove-subtitles-from-video-online-free.js +37 -0
- package/dist/commands/remove-subtitles-from-video-online-free.js.map +1 -0
- package/dist/commands/remove-text-from-video-online-free.d.ts +2 -0
- package/dist/commands/remove-text-from-video-online-free.js +37 -0
- package/dist/commands/remove-text-from-video-online-free.js.map +1 -0
- package/dist/commands/removebg.js +2 -2
- package/dist/commands/removebg.js.map +1 -1
- package/dist/commands/replace-face-in-video-online-free.d.ts +2 -0
- package/dist/commands/replace-face-in-video-online-free.js +56 -0
- package/dist/commands/replace-face-in-video-online-free.js.map +1 -0
- package/dist/commands/see-through-clothes-fitler.d.ts +2 -0
- package/dist/commands/see-through-clothes-fitler.js +45 -0
- package/dist/commands/see-through-clothes-fitler.js.map +1 -0
- package/dist/commands/seedance.d.ts +2 -0
- package/dist/commands/seedance.js +65 -0
- package/dist/commands/seedance.js.map +1 -0
- package/dist/commands/seedream.d.ts +2 -0
- package/dist/commands/seedream.js +85 -0
- package/dist/commands/seedream.js.map +1 -0
- package/dist/commands/sex-ai-generator.d.ts +2 -0
- package/dist/commands/sex-ai-generator.js +52 -0
- package/dist/commands/sex-ai-generator.js.map +1 -0
- package/dist/commands/sexy-ai-pics.d.ts +2 -0
- package/dist/commands/sexy-ai-pics.js +43 -0
- package/dist/commands/sexy-ai-pics.js.map +1 -0
- package/dist/commands/skin-color-changer.d.ts +2 -0
- package/dist/commands/skin-color-changer.js +48 -0
- package/dist/commands/skin-color-changer.js.map +1 -0
- package/dist/commands/sonic-oc.d.ts +2 -0
- package/dist/commands/sonic-oc.js +49 -0
- package/dist/commands/sonic-oc.js.map +1 -0
- package/dist/commands/sora-2.d.ts +2 -0
- package/dist/commands/sora-2.js +53 -0
- package/dist/commands/sora-2.js.map +1 -0
- package/dist/commands/sprunki-oc-maker.d.ts +2 -0
- package/dist/commands/sprunki-oc-maker.js +50 -0
- package/dist/commands/sprunki-oc-maker.js.map +1 -0
- package/dist/commands/square-face-icon-generator.d.ts +2 -0
- package/dist/commands/square-face-icon-generator.js +51 -0
- package/dist/commands/square-face-icon-generator.js.map +1 -0
- package/dist/commands/stardew-valley-portrait-maker.d.ts +2 -0
- package/dist/commands/stardew-valley-portrait-maker.js +49 -0
- package/dist/commands/stardew-valley-portrait-maker.js.map +1 -0
- package/dist/commands/string-bikini-beauty-contest.d.ts +2 -0
- package/dist/commands/string-bikini-beauty-contest.js +52 -0
- package/dist/commands/string-bikini-beauty-contest.js.map +1 -0
- package/dist/commands/swimsuit-try-on-haul.d.ts +2 -0
- package/dist/commands/swimsuit-try-on-haul.js +52 -0
- package/dist/commands/swimsuit-try-on-haul.js.map +1 -0
- package/dist/commands/video-resolution-enhancer-online-free.d.ts +2 -0
- package/dist/commands/video-resolution-enhancer-online-free.js +42 -0
- package/dist/commands/video-resolution-enhancer-online-free.js.map +1 -0
- package/dist/commands/video-upscaler-online-free.d.ts +2 -0
- package/dist/commands/video-upscaler-online-free.js +42 -0
- package/dist/commands/video-upscaler-online-free.js.map +1 -0
- package/dist/commands/video-watermark-remover.d.ts +2 -0
- package/dist/commands/video-watermark-remover.js +45 -0
- package/dist/commands/video-watermark-remover.js.map +1 -0
- package/dist/commands/virtualtryon.js +2 -2
- package/dist/commands/virtualtryon.js.map +1 -1
- package/dist/commands/wan-ai.d.ts +2 -0
- package/dist/commands/wan-ai.js +49 -0
- package/dist/commands/wan-ai.js.map +1 -0
- package/dist/commands/wild-graffiti.d.ts +2 -0
- package/dist/commands/wild-graffiti.js +49 -0
- package/dist/commands/wild-graffiti.js.map +1 -0
- package/dist/commands/z-image.d.ts +2 -0
- package/dist/commands/z-image.js +51 -0
- package/dist/commands/z-image.js.map +1 -0
- package/dist/index.js +231 -2
- package/dist/index.js.map +1 -1
- package/dist/printer.js +13 -3
- package/dist/printer.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
|
+
export const aiSexyTeensCmd = new Command("ai-sexy-teens")
|
|
6
|
+
.summary("AI sexy teens — transform a person photo into a bikini model image or video")
|
|
7
|
+
.description("Transform a portrait or full-body photo into a bikini model image or video.\n\n" +
|
|
8
|
+
"Generated type (--generated-type):\n" +
|
|
9
|
+
" video Generate a short video (default)\n" +
|
|
10
|
+
" image Generate a still image\n\n" +
|
|
11
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
12
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
13
|
+
"Examples:\n" +
|
|
14
|
+
" weshop ai-sexy-teens --image ./person.png --prompt 'Bikini model on a beach'\n" +
|
|
15
|
+
" weshop ai-sexy-teens --image ./person.png --generated-type image --batch 2\n" +
|
|
16
|
+
" weshop ai-sexy-teens --image ./person.png --generated-type video --no-wait")
|
|
17
|
+
.requiredOption("--image <path|url>", "Input portrait or full-body photo — local file path or URL")
|
|
18
|
+
.option("--prompt <text>", "Describe the desired bikini model scene")
|
|
19
|
+
.option("--generated-type <type>", "Output type: video (default) or image")
|
|
20
|
+
.option("--batch <count>", "Number of outputs to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
21
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
22
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
23
|
+
.action(async (opts) => {
|
|
24
|
+
try {
|
|
25
|
+
const { url: imageUrl } = await resolveImage(opts.image);
|
|
26
|
+
const params = {
|
|
27
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
28
|
+
images: [imageUrl],
|
|
29
|
+
generatedType: opts.generatedType ?? "video",
|
|
30
|
+
};
|
|
31
|
+
if (opts.batch != null)
|
|
32
|
+
params.batchCount = opts.batch;
|
|
33
|
+
const input = { originalImage: imageUrl };
|
|
34
|
+
if (opts.taskName)
|
|
35
|
+
input.taskName = opts.taskName;
|
|
36
|
+
const body = { agent: { name: "ai-sexy-teens", 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
|
+
}
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=ai-sexy-teens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sexy-teens.js","sourceRoot":"","sources":["../../src/commands/ai-sexy-teens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAClB,qIAAqI,CAAC;AAExI,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KACvD,OAAO,CAAC,6EAA6E,CAAC;KACtF,WAAW,CACV,iFAAiF;IACjF,sCAAsC;IACtC,8CAA8C;IAC9C,sCAAsC;IACtC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,kFAAkF;IAClF,gFAAgF;IAChF,8EAA8E,CAC/E;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,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,MAAM,GAA4B;YACtC,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;YAC9C,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,OAAO;SAC7C,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9F,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "Change the original photo to stencil style, only black and white, spray paint style.";
|
|
5
|
+
export const aiSprayPaintCmd = new Command("ai-spray-paint")
|
|
6
|
+
.summary("AI spray paint stencil maker — convert a photo into a black-and-white spray paint stencil")
|
|
7
|
+
.description("Convert any photo into a black-and-white spray paint stencil style image.\n" +
|
|
8
|
+
"Image is optional — text-only generation is supported.\n\n" +
|
|
9
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
10
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
11
|
+
"Examples:\n" +
|
|
12
|
+
" weshop ai-spray-paint --image ./photo.png\n" +
|
|
13
|
+
" weshop ai-spray-paint --prompt 'Spray paint stencil of a wolf howling at the moon'\n" +
|
|
14
|
+
" weshop ai-spray-paint --image ./portrait.png --batch 2")
|
|
15
|
+
.option("--image <path|url>", "Input image — local file path or URL (optional)")
|
|
16
|
+
.option("--prompt <text>", "Custom stencil instruction")
|
|
17
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
18
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
19
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
try {
|
|
22
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
23
|
+
if (opts.batch != null)
|
|
24
|
+
params.batchCount = opts.batch;
|
|
25
|
+
const input = {};
|
|
26
|
+
if (opts.taskName)
|
|
27
|
+
input.taskName = opts.taskName;
|
|
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-spray-paint", 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
|
+
}
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=ai-spray-paint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-spray-paint.js","sourceRoot":"","sources":["../../src/commands/ai-spray-paint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAAG,sFAAsF,CAAC;AAE9G,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KACzD,OAAO,CAAC,2FAA2F,CAAC;KACpG,WAAW,CACV,6EAA6E;IAC7E,4DAA4D;IAC5D,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,+CAA+C;IAC/C,wFAAwF;IACxF,0DAA0D,CAC3D;KACA,MAAM,CAAC,oBAAoB,EAAE,iDAAiD,CAAC;KAC/E,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,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3B,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/F,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
5
|
+
export const aiSwimSuitModelCmd = new Command("ai-swimsuit-model")
|
|
6
|
+
.summary("AI swimsuit model — transform a person photo into a swimsuit model image")
|
|
7
|
+
.description("Transform a portrait or full-body photo into a swimsuit model image.\n\n" +
|
|
8
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
9
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
10
|
+
"Examples:\n" +
|
|
11
|
+
" weshop ai-swimsuit-model --image ./person.png\n" +
|
|
12
|
+
" weshop ai-swimsuit-model --image ./person.png --prompt 'One-piece swimsuit on a tropical beach'\n" +
|
|
13
|
+
" weshop ai-swimsuit-model --image ./person.png --batch 2")
|
|
14
|
+
.requiredOption("--image <path|url>", "Input person photo — local file path or URL")
|
|
15
|
+
.option("--prompt <text>", "Custom swimsuit scene instruction")
|
|
16
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
17
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
18
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
19
|
+
.action(async (opts) => {
|
|
20
|
+
try {
|
|
21
|
+
const { url: imageUrl } = await resolveImage(opts.image);
|
|
22
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT, images: [imageUrl] };
|
|
23
|
+
if (opts.batch != null)
|
|
24
|
+
params.batchCount = opts.batch;
|
|
25
|
+
const input = { originalImage: imageUrl };
|
|
26
|
+
if (opts.taskName)
|
|
27
|
+
input.taskName = opts.taskName;
|
|
28
|
+
const body = { agent: { name: "ai-swimsuit-model", 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
|
+
}
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=ai-swimsuit-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-swimsuit-model.js","sourceRoot":"","sources":["../../src/commands/ai-swimsuit-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAClB,qIAAqI,CAAC;AAExI,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;KAC/D,OAAO,CAAC,0EAA0E,CAAC;KACnF,WAAW,CACV,0EAA0E;IAC1E,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,mDAAmD;IACnD,qGAAqG;IACrG,2DAA2D,CAC5D;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,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/G,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "Generate aline art style single piece no color tattoo design try-on, small, on arm.";
|
|
5
|
+
export const aiTattooGeneratorCmd = new Command("ai-tattoo-generator")
|
|
6
|
+
.summary("AI tattoo generator — create a tattoo design try-on from text or reference image")
|
|
7
|
+
.description("Generate a tattoo design and apply it as a try-on. Image is optional.\n\n" +
|
|
8
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
9
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
10
|
+
"Examples:\n" +
|
|
11
|
+
" weshop ai-tattoo-generator --image ./person.png\n" +
|
|
12
|
+
" weshop ai-tattoo-generator --image ./person.png --prompt 'Dragon tattoo on forearm, black ink'\n" +
|
|
13
|
+
" weshop ai-tattoo-generator --prompt 'Minimalist mountain tattoo design' --batch 4")
|
|
14
|
+
.option("--image <path|url>", "Reference person image — local file path or URL (optional)")
|
|
15
|
+
.option("--prompt <text>", "Describe the desired tattoo design and placement")
|
|
16
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
17
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
18
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
19
|
+
.action(async (opts) => {
|
|
20
|
+
try {
|
|
21
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
22
|
+
if (opts.batch != null)
|
|
23
|
+
params.batchCount = opts.batch;
|
|
24
|
+
const input = {};
|
|
25
|
+
if (opts.taskName)
|
|
26
|
+
input.taskName = opts.taskName;
|
|
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: "ai-tattoo-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
|
+
}
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=ai-tattoo-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-tattoo-generator.js","sourceRoot":"","sources":["../../src/commands/ai-tattoo-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAAG,qFAAqF,CAAC;AAE7G,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,qBAAqB,CAAC;KACnE,OAAO,CAAC,kFAAkF,CAAC;KAC3F,WAAW,CACV,2EAA2E;IAC3E,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,qDAAqD;IACrD,oGAAoG;IACpG,qFAAqF,CACtF;KACA,MAAM,CAAC,oBAAoB,EAAE,4DAA4D,CAAC;KAC1F,MAAM,CAAC,iBAAiB,EAAE,kDAAkD,CAAC;KAC7E,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,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3B,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACpG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
export const aiTextRemoverFromVideoCmd = new Command("ai-text-remover-from-video")
|
|
5
|
+
.summary("AI text remover from video — remove text overlays or watermarks from a video")
|
|
6
|
+
.description("Remove text overlays, watermarks, or logos from a video using AI.\n\n" +
|
|
7
|
+
"Provide the video as a URL (--video). Local video files are not auto-uploaded;\n" +
|
|
8
|
+
"use 'weshop upload' first to get a hosted URL if needed.\n\n" +
|
|
9
|
+
"Examples:\n" +
|
|
10
|
+
" weshop ai-text-remover-from-video --video https://example.com/video.mp4\n" +
|
|
11
|
+
" weshop ai-text-remover-from-video --video https://example.com/video.mp4 --no-wait")
|
|
12
|
+
.requiredOption("--video <url>", "Input video URL")
|
|
13
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
14
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
15
|
+
.action(async (opts) => {
|
|
16
|
+
try {
|
|
17
|
+
const params = { videos: [opts.video], watermarkSelectType: "autoDetect" };
|
|
18
|
+
const input = { videos: [opts.video] };
|
|
19
|
+
if (opts.taskName)
|
|
20
|
+
input.taskName = opts.taskName;
|
|
21
|
+
const body = { agent: { name: "ai-text-remover-from-video", version: "v1.0" }, input, params };
|
|
22
|
+
const { executionId } = await submitRun(body);
|
|
23
|
+
printSubmitted(executionId);
|
|
24
|
+
if (opts.wait !== false) {
|
|
25
|
+
printPollResult(await waitForCompletion(executionId));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log("[info]");
|
|
29
|
+
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
printError(err);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=ai-text-remover-from-video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-text-remover-from-video.js","sourceRoot":"","sources":["../../src/commands/ai-text-remover-from-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,OAAO,CAAC,4BAA4B,CAAC;KAC/E,OAAO,CAAC,8EAA8E,CAAC;KACvF,WAAW,CACV,uEAAuE;IACvE,kFAAkF;IAClF,8DAA8D;IAC9D,aAAa;IACb,6EAA6E;IAC7E,qFAAqF,CACtF;KACA,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC;KAClD,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC;QACpG,MAAM,KAAK,GAA4B,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3G,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "Translate all text in this image to English. Keep the same design and aesthetics to maintain the style of the image. Don't simply put the text on the new image, try to generate text as original.";
|
|
5
|
+
export const aiTranslateCmd = new Command("ai-translate")
|
|
6
|
+
.summary("AI image text translator — translate text in an image to another language while preserving design")
|
|
7
|
+
.description("Translate all text in an image to English (or a specified language) while preserving\n" +
|
|
8
|
+
"the original design, layout, and visual style.\n\n" +
|
|
9
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
10
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
11
|
+
"Examples:\n" +
|
|
12
|
+
" weshop ai-translate --image ./poster.png\n" +
|
|
13
|
+
" weshop ai-translate --image ./menu.png --prompt 'Translate all text to French, keep original design'\n" +
|
|
14
|
+
" weshop ai-translate --image ./sign.png --batch 2")
|
|
15
|
+
.requiredOption("--image <path|url>", "Input image containing text — local file path or URL")
|
|
16
|
+
.option("--prompt <text>", "Custom translation instruction (default: translate to English)")
|
|
17
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
18
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
19
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
try {
|
|
22
|
+
const { url: imageUrl } = await resolveImage(opts.image);
|
|
23
|
+
const params = {
|
|
24
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
25
|
+
images: [imageUrl],
|
|
26
|
+
};
|
|
27
|
+
if (opts.batch != null)
|
|
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: "ai-translate", 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
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=ai-translate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-translate.js","sourceRoot":"","sources":["../../src/commands/ai-translate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAClB,oMAAoM,CAAC;AAEvM,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;KACtD,OAAO,CAAC,mGAAmG,CAAC;KAC5G,WAAW,CACV,wFAAwF;IACxF,oDAAoD;IACpD,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,8CAA8C;IAC9C,0GAA0G;IAC1G,oDAAoD,CACrD;KACA,cAAc,CAAC,oBAAoB,EAAE,sDAAsD,CAAC;KAC5F,MAAM,CAAC,iBAAiB,EAAE,gEAAgE,CAAC;KAC3F,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,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzD,MAAM,MAAM,GAA4B;YACtC,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;YAC9C,MAAM,EAAE,CAAC,QAAQ,CAAC;SACnB,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvD,MAAM,KAAK,GAA4B,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAElD,MAAM,IAAI,GAAe;YACvB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;YAChD,KAAK;YACL,MAAM;SACP,CAAC;QAEF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAClD,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
export const aiVideoEnhancerCmd = new Command("ai-video-enhancer")
|
|
5
|
+
.summary("AI video enhancer — upscale and enhance video quality using AI")
|
|
6
|
+
.description("Upscale and enhance video quality using AI.\n\n" +
|
|
7
|
+
"Provide the video as a URL (--video). Local video files are not auto-uploaded;\n" +
|
|
8
|
+
"use 'weshop upload' first to get a hosted URL if needed.\n\n" +
|
|
9
|
+
"Video requirements:\n" +
|
|
10
|
+
" - Max resolution: 2048x2048\n" +
|
|
11
|
+
" - Duration: 1–120 seconds\n\n" +
|
|
12
|
+
"Video size (--video-size): target output resolution, e.g. 2K, 4K\n\n" +
|
|
13
|
+
"Examples:\n" +
|
|
14
|
+
" weshop ai-video-enhancer --video https://example.com/video.mp4\n" +
|
|
15
|
+
" weshop ai-video-enhancer --video https://example.com/video.mp4 --video-size 4K\n" +
|
|
16
|
+
" weshop ai-video-enhancer --video https://example.com/video.mp4 --no-wait")
|
|
17
|
+
.requiredOption("--video <url>", "Input video URL")
|
|
18
|
+
.option("--video-size <size>", "Target output resolution, e.g. 2K or 4K")
|
|
19
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
20
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
21
|
+
.action(async (opts) => {
|
|
22
|
+
try {
|
|
23
|
+
const params = {
|
|
24
|
+
videos: [opts.video],
|
|
25
|
+
};
|
|
26
|
+
if (opts.videoSize)
|
|
27
|
+
params.videoSize = opts.videoSize;
|
|
28
|
+
const input = {
|
|
29
|
+
videos: [opts.video],
|
|
30
|
+
};
|
|
31
|
+
if (opts.taskName)
|
|
32
|
+
input.taskName = opts.taskName;
|
|
33
|
+
const body = { agent: { name: "ai-video-enhancer", 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
|
+
}
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=ai-video-enhancer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-video-enhancer.js","sourceRoot":"","sources":["../../src/commands/ai-video-enhancer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;KAC/D,OAAO,CAAC,gEAAgE,CAAC;KACzE,WAAW,CACV,iDAAiD;IACjD,kFAAkF;IAClF,8DAA8D;IAC9D,uBAAuB;IACvB,iCAAiC;IACjC,iCAAiC;IACjC,sEAAsE;IACtE,aAAa;IACb,oEAAoE;IACpE,oFAAoF;IACpF,4EAA4E,CAC7E;KACA,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,CAAC;KACxE,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B;YACtC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,CAAC;QACF,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACtD,MAAM,KAAK,GAA4B;YACrC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "The character in the image suddenly begins a violent werewolf transformation. Muscles rapidly expand, veins bulge under the skin. The character roars in pain as their clothes tear apart from the expanding body. Dark fur quickly grows across the arms, chest, and face, covering the body as the transformation continues. Hands stretch and twist into sharp claws, fingers elongating. The jaw extends into a wolf-like muzzle, teeth sharpening into fangs. Eyes glow with a wild golden light. The camera slowly circles the character as the transformation intensifies, pieces of torn clothing flying through the air. By the end, a full ferocious werewolf stands where the human once was, breathing heavily, surrounded by drifting fabric fragments. cinematic lighting, dramatic shadows, dark fantasy atmosphere, high detail, dynamic motion, 4K.";
|
|
5
|
+
export const aiWerewolfCmd = new Command("ai-werewolf")
|
|
6
|
+
.summary("AI werewolf generator — create a dramatic werewolf transformation video from a person photo")
|
|
7
|
+
.description("Generate a cinematic werewolf transformation video from a person photo.\n" +
|
|
8
|
+
"Results come back in video[N].url.\n\n" +
|
|
9
|
+
"Model (--model):\n" +
|
|
10
|
+
" Kling_3_0 Kling 3.0 — supports 3s-15s duration (default)\n" +
|
|
11
|
+
" Kling_2_6 Kling 2.6 — supports 5s, 10s duration\n\n" +
|
|
12
|
+
"Duration (--duration):\n" +
|
|
13
|
+
" Kling_3_0: 3s-15s (default: 5s)\n" +
|
|
14
|
+
" Kling_2_6: 5s, 10s (default: 5s)\n\n" +
|
|
15
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
16
|
+
" Dramatic werewolf transformation with muscle expansion, fur growth, claw formation,\n" +
|
|
17
|
+
" cinematic lighting, dark fantasy atmosphere.\n\n" +
|
|
18
|
+
"Examples:\n" +
|
|
19
|
+
" weshop ai-werewolf --image ./person.png --prompt 'Werewolf transformation under full moon'\n" +
|
|
20
|
+
" weshop ai-werewolf --image ./person.png --model Kling_3_0 --duration 10s\n" +
|
|
21
|
+
" weshop ai-werewolf --image ./person.png --no-wait")
|
|
22
|
+
.requiredOption("--image <path|url>", "Input person photo — local file path or URL")
|
|
23
|
+
.requiredOption("--prompt <text>", "Describe the werewolf transformation scene")
|
|
24
|
+
.option("--model <name>", "Kling model: Kling_3_0 (default) or Kling_2_6")
|
|
25
|
+
.option("--duration <time>", "Video duration, e.g. 5s, 10s (default: 5s)")
|
|
26
|
+
.option("--generate-audio <bool>", "Generate audio: true (default) or false")
|
|
27
|
+
.option("--batch <count>", "Number of videos to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
28
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
29
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
30
|
+
.action(async (opts) => {
|
|
31
|
+
try {
|
|
32
|
+
const { url: imageUrl } = await resolveImage(opts.image);
|
|
33
|
+
const params = {
|
|
34
|
+
textDescription: opts.prompt,
|
|
35
|
+
images: [imageUrl],
|
|
36
|
+
modelName: opts.model ?? "Kling_3_0",
|
|
37
|
+
duration: opts.duration ?? "5s",
|
|
38
|
+
generateAudio: opts.generateAudio ?? "true",
|
|
39
|
+
};
|
|
40
|
+
if (opts.batch != null)
|
|
41
|
+
params.batchCount = opts.batch;
|
|
42
|
+
const input = { originalImage: imageUrl };
|
|
43
|
+
if (opts.taskName)
|
|
44
|
+
input.taskName = opts.taskName;
|
|
45
|
+
const body = { agent: { name: "ai-werewolf", 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);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=ai-werewolf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-werewolf.js","sourceRoot":"","sources":["../../src/commands/ai-werewolf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAClB,s0BAAs0B,CAAC;AAEz0B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;KACpD,OAAO,CAAC,6FAA6F,CAAC;KACtG,WAAW,CACV,2EAA2E;IAC3E,wCAAwC;IACxC,oBAAoB;IACpB,gEAAgE;IAChE,yDAAyD;IACzD,0BAA0B;IAC1B,uCAAuC;IACvC,0CAA0C;IAC1C,mDAAmD;IACnD,yFAAyF;IACzF,oDAAoD;IACpD,aAAa;IACb,gGAAgG;IAChG,8EAA8E;IAC9E,qDAAqD,CACtD;KACA,cAAc,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;KACnF,cAAc,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;KAC/E,MAAM,CAAC,gBAAgB,EAAE,+CAA+C,CAAC;KACzE,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;KACzE,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,CAAC;KAC5E,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,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,MAAM,GAA4B;YACtC,eAAe,EAAE,IAAI,CAAC,MAAM;YAC5B,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW;YACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,MAAM;SAC5C,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC5F,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "Change the fabric to a super-thin and sheer material with no color, allowing for faint visibility through it.";
|
|
5
|
+
export const aiXrayClothesCmd = new Command("ai-xray-clothes")
|
|
6
|
+
.summary("AI x-ray clothes filter — make clothing appear sheer and see-through")
|
|
7
|
+
.description("Transform a photo by making the clothing appear as a super-thin sheer material\n" +
|
|
8
|
+
"with faint visibility through it.\n\n" +
|
|
9
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
10
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
11
|
+
"Examples:\n" +
|
|
12
|
+
" weshop ai-xray-clothes --image ./person.png\n" +
|
|
13
|
+
" weshop ai-xray-clothes --image ./person.png --prompt 'Make the top appear as thin wet fabric'\n" +
|
|
14
|
+
" weshop ai-xray-clothes --image ./person.png --batch 2")
|
|
15
|
+
.requiredOption("--image <path|url>", "Input photo — local file path or URL")
|
|
16
|
+
.option("--prompt <text>", "Custom sheer fabric instruction")
|
|
17
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
18
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
19
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
try {
|
|
22
|
+
const { url: imageUrl } = await resolveImage(opts.image);
|
|
23
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT, images: [imageUrl] };
|
|
24
|
+
if (opts.batch != null)
|
|
25
|
+
params.batchCount = opts.batch;
|
|
26
|
+
const input = { originalImage: imageUrl };
|
|
27
|
+
if (opts.taskName)
|
|
28
|
+
input.taskName = opts.taskName;
|
|
29
|
+
const body = { agent: { name: "ai-xray-clothes", version: "v1.0" }, input, params };
|
|
30
|
+
const { executionId } = await submitRun(body);
|
|
31
|
+
printSubmitted(executionId);
|
|
32
|
+
if (opts.wait !== false) {
|
|
33
|
+
printPollResult(await waitForCompletion(executionId));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log("[info]");
|
|
37
|
+
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
printError(err);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=ai-xray-clothes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-xray-clothes.js","sourceRoot":"","sources":["../../src/commands/ai-xray-clothes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAClB,+GAA+G,CAAC;AAElH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAC3D,OAAO,CAAC,sEAAsE,CAAC;KAC/E,WAAW,CACV,kFAAkF;IAClF,uCAAuC;IACvC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,iDAAiD;IACjD,mGAAmG;IACnG,yDAAyD,CAC1D;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,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/G,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAChG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolveImage, submitRun, waitForCompletion } from "../client.js";
|
|
3
|
+
import { printSubmitted, printPollResult, printError } from "../printer.js";
|
|
4
|
+
const DEFAULT_PROMPT = "Turn this person into zombie, realistic.";
|
|
5
|
+
export const aiZombieCmd = new Command("ai-zombie")
|
|
6
|
+
.summary("AI zombie filter — transform a portrait into a realistic zombie")
|
|
7
|
+
.description("Transform a portrait photo into a realistic zombie with decayed skin, wounds,\n" +
|
|
8
|
+
"and undead features.\n\n" +
|
|
9
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
10
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
11
|
+
"Examples:\n" +
|
|
12
|
+
" weshop ai-zombie --image ./person.png\n" +
|
|
13
|
+
" weshop ai-zombie --image ./person.png --prompt 'Fresh zombie, torn clothes, glowing eyes'\n" +
|
|
14
|
+
" weshop ai-zombie --image ./person.png --batch 2")
|
|
15
|
+
.requiredOption("--image <path|url>", "Input portrait image — local file path or URL")
|
|
16
|
+
.option("--prompt <text>", "Custom zombie transformation instruction")
|
|
17
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
18
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
19
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
try {
|
|
22
|
+
const { url: imageUrl } = await resolveImage(opts.image);
|
|
23
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT, images: [imageUrl] };
|
|
24
|
+
if (opts.batch != null)
|
|
25
|
+
params.batchCount = opts.batch;
|
|
26
|
+
const input = { originalImage: imageUrl };
|
|
27
|
+
if (opts.taskName)
|
|
28
|
+
input.taskName = opts.taskName;
|
|
29
|
+
const body = { agent: { name: "ai-zombie", version: "v1.0" }, input, params };
|
|
30
|
+
const { executionId } = await submitRun(body);
|
|
31
|
+
printSubmitted(executionId);
|
|
32
|
+
if (opts.wait !== false) {
|
|
33
|
+
printPollResult(await waitForCompletion(executionId));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log("[info]");
|
|
37
|
+
console.log(` message: Use 'weshop status ${executionId}' to check progress`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
printError(err);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=ai-zombie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-zombie.js","sourceRoot":"","sources":["../../src/commands/ai-zombie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,cAAc,GAAG,0CAA0C,CAAC;AAElE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KAChD,OAAO,CAAC,iEAAiE,CAAC;KAC1E,WAAW,CACV,iFAAiF;IACjF,0BAA0B;IAC1B,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,2CAA2C;IAC3C,+FAA+F;IAC/F,mDAAmD,CACpD;KACA,cAAc,CAAC,oBAAoB,EAAE,+CAA+C,CAAC;KACrF,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,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,MAAM,GAA4B,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/G,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAA4B,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,MAAM,IAAI,GAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1F,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAC,eAAe,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9E,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,WAAW,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
package/dist/commands/aimodel.js
CHANGED
|
@@ -35,7 +35,7 @@ export const aimodelCmd = new Command("aimodel")
|
|
|
35
35
|
.option("--negative-prompt <text>", "Describe elements to avoid in the result, e.g. 'blurry, dark'")
|
|
36
36
|
.option("--pose <mode>", "Pose control: originalImagePose (default), referenceImagePose, or freePose")
|
|
37
37
|
.option("--custom-mask <path|url>", "PNG mask image defining the protected region. Masked area is preserved, transparent area is editable. Must match source image dimensions")
|
|
38
|
-
.option("--batch <count>", "Number of images to generate, 1-16 (default:
|
|
38
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
39
39
|
.option("--task-name <name>", "Human-readable label for this run")
|
|
40
40
|
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
41
41
|
.action(async (opts) => {
|
|
@@ -55,7 +55,7 @@ export const aimodelCmd = new Command("aimodel")
|
|
|
55
55
|
params.pose = opts.pose;
|
|
56
56
|
if (opts.customMask)
|
|
57
57
|
params.customMaskUrl = (await resolveImage(opts.customMask)).url;
|
|
58
|
-
if (opts.batch)
|
|
58
|
+
if (opts.batch != null)
|
|
59
59
|
params.batchCount = opts.batch;
|
|
60
60
|
const extraInput = {};
|
|
61
61
|
if (opts.taskName)
|