weshop-cli 0.1.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/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 +27 -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 +29 -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 +28 -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 +27 -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 +26 -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 +36 -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 +26 -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 +30 -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 +29 -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 +35 -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 +33 -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 +30 -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 +28 -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 +34 -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 +27 -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 +28 -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 +34 -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 +34 -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 +38 -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 +33 -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 +28 -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 +27 -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 +34 -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 +39 -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 +33 -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 +40 -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 +34 -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 +59 -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 +48 -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 +53 -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 +28 -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 +27 -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 +34 -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 +34 -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 +28 -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 +27 -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 +27 -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 +21 -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 +28 -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 +29 -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 +43 -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 +28 -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 +28 -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 +27 -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 +39 -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 +27 -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 +28 -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 +34 -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 +27 -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 +27 -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 +27 -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 +27 -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 +33 -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 +27 -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 +27 -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 +34 -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 +34 -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 +29 -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 +27 -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 +56 -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 +28 -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 +36 -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 +42 -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 +26 -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 +27 -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 +26 -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 +34 -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 +29 -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 +21 -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 +28 -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 +27 -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 +35 -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 +25 -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 +28 -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 +34 -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 +34 -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 +33 -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 +27 -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 +26 -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 +48 -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 +21 -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 +33 -0
- package/dist/commands/midjourney.js.map +1 -0
- package/dist/commands/mugshot-creator.d.ts +2 -0
- package/dist/commands/mugshot-creator.js +28 -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 +29 -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 +29 -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 +34 -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 +27 -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 +31 -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 +28 -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 +31 -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 +28 -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 +27 -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 +21 -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 +21 -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 +34 -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 +28 -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 +47 -0
- package/dist/commands/seedance.js.map +1 -0
- package/dist/commands/seedream.d.ts +2 -0
- package/dist/commands/seedream.js +53 -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 +34 -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 +26 -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 +28 -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 +28 -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 +35 -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 +29 -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 +30 -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 +28 -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 +34 -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 +34 -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 +26 -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 +26 -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 +26 -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 +31 -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 +28 -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 +30 -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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-hot-girl-image.js","sourceRoot":"","sources":["../../src/commands/ai-hot-girl-image.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,iBAAiB,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;KAC9D,OAAO,CAAC,iFAAiF,CAAC;KAC1F,WAAW,CACV,iFAAiF;IACjF,sCAAsC;IACtC,8CAA8C;IAC9C,sCAAsC;IACtC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,sFAAsF;IACtF,oFAAoF;IACpF,kFAAkF,CACnF;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,mBAAmB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5G,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
export const aiImageAnimationCmd = new Command("ai-image-animation")
|
|
4
|
+
.summary("AI image animation — animate a static image into a dynamic video using Kling")
|
|
5
|
+
.description("Animate a static image into a dynamic video. Results come back in video[N].url.\n\n" +
|
|
6
|
+
"Model (--model):\n" +
|
|
7
|
+
" Kling_3_0 Kling 3.0 — supports 3s-15s duration (default)\n" +
|
|
8
|
+
" Kling_2_6 Kling 2.6 — supports 5s, 10s duration\n\n" +
|
|
9
|
+
"Duration (--duration):\n" +
|
|
10
|
+
" Kling_3_0: 3s, 4s, 5s, 6s, 7s, 8s, 9s, 10s, 11s, 12s, 13s, 14s, 15s (default: 5s)\n" +
|
|
11
|
+
" Kling_2_6: 5s, 10s (default: 5s)\n\n" +
|
|
12
|
+
"Generate audio (--generate-audio): true or false (default: true)\n\n" +
|
|
13
|
+
"Examples:\n" +
|
|
14
|
+
" weshop ai-image-animation --image ./photo.png --prompt 'Gentle breeze, leaves rustling'\n" +
|
|
15
|
+
" weshop ai-image-animation --image ./portrait.png --prompt 'Person slowly turns and smiles' --model Kling_3_0 --duration 8s\n" +
|
|
16
|
+
" weshop ai-image-animation --image ./scene.png --prompt 'Camera pan left' --generate-audio false")
|
|
17
|
+
.requiredOption("--image <path|url>", "Input image to animate — local file path or URL")
|
|
18
|
+
.requiredOption("--prompt <text>", "Describe the desired animation or motion")
|
|
19
|
+
.option("--model <name>", "Kling model: Kling_3_0 (default) or Kling_2_6")
|
|
20
|
+
.option("--duration <time>", "Video duration, e.g. 5s, 10s (default: 5s)")
|
|
21
|
+
.option("--generate-audio <bool>", "Generate audio: true (default) or false")
|
|
22
|
+
.option("--batch <count>", "Number of videos to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
23
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
24
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
25
|
+
.action(async (opts) => {
|
|
26
|
+
const params = {
|
|
27
|
+
textDescription: opts.prompt,
|
|
28
|
+
modelName: opts.model ?? "Kling_3_0",
|
|
29
|
+
duration: opts.duration ?? "5s",
|
|
30
|
+
generateAudio: opts.generateAudio ?? "true",
|
|
31
|
+
};
|
|
32
|
+
if (opts.batch != null)
|
|
33
|
+
params.batchCount = opts.batch;
|
|
34
|
+
const extraInput = {};
|
|
35
|
+
if (opts.taskName)
|
|
36
|
+
extraInput.taskName = opts.taskName;
|
|
37
|
+
await executeRun("ai-image-animation", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=ai-image-animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-image-animation.js","sourceRoot":"","sources":["../../src/commands/ai-image-animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC;KACjE,OAAO,CAAC,8EAA8E,CAAC;KACvF,WAAW,CACV,qFAAqF;IACrF,oBAAoB;IACpB,gEAAgE;IAChE,yDAAyD;IACzD,0BAA0B;IAC1B,yFAAyF;IACzF,0CAA0C;IAC1C,sEAAsE;IACtE,aAAa;IACb,6FAA6F;IAC7F,gIAAgI;IAChI,mGAAmG,CACpG;KACA,cAAc,CAAC,oBAAoB,EAAE,iDAAiD,CAAC;KACvF,cAAc,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;KAC7E,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,MAAM,MAAM,GAA4B;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW;QACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,MAAM;KAC5C,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IAEvD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAEvD,MAAM,UAAU,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "Merge these two photos together naturally. Don't simply put element on the another image, try to generate a merged photo.";
|
|
4
|
+
export const aiImageCombinerCmd = new Command("ai-image-combiner")
|
|
5
|
+
.summary("AI image combiner — naturally merge two photos into a single cohesive image")
|
|
6
|
+
.description("Merge two photos together into a single naturally blended image.\n" +
|
|
7
|
+
"Requires exactly 2 images. Reference them in your prompt as 'image 1' and 'image 2'.\n\n" +
|
|
8
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
9
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
10
|
+
"Examples:\n" +
|
|
11
|
+
" weshop ai-image-combiner --image ./photo1.png --image ./photo2.png\n" +
|
|
12
|
+
" weshop ai-image-combiner --image ./person.png --image ./background.png --prompt 'Place image 1 person into image 2 scene naturally'\n" +
|
|
13
|
+
" weshop ai-image-combiner --image ./a.png --image ./b.png --batch 2")
|
|
14
|
+
.requiredOption("--image <path|url...>", "Two images to combine — local file paths or URLs (exactly 2 required)")
|
|
15
|
+
.option("--prompt <text>", "Custom merge instruction (default: naturally merge both photos)")
|
|
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
|
+
const imageList = opts.image;
|
|
21
|
+
if (imageList.length !== 2) {
|
|
22
|
+
console.error("[error]\n message: Exactly 2 images required for ai-image-combiner");
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
26
|
+
if (opts.batch != null)
|
|
27
|
+
params.batchCount = opts.batch;
|
|
28
|
+
const extraInput = {};
|
|
29
|
+
if (opts.taskName)
|
|
30
|
+
extraInput.taskName = opts.taskName;
|
|
31
|
+
await executeRun("ai-image-combiner", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=ai-image-combiner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-image-combiner.js","sourceRoot":"","sources":["../../src/commands/ai-image-combiner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,2HAA2H,CAAC;AAE9H,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;KAC/D,OAAO,CAAC,6EAA6E,CAAC;KACtF,WAAW,CACV,oEAAoE;IACpE,0FAA0F;IAC1F,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,wEAAwE;IACxE,yIAAyI;IACzI,sEAAsE,CACvE;KACA,cAAc,CAAC,uBAAuB,EAAE,uEAAuE,CAAC;KAChH,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,CAAC;KAC5F,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,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,mBAAmB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5G,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "You are a professional landscape designer. Your task is to create a new [Modern style] landscape design for this yard. You need to retain the materials and core structure of the yard while upgrading the landscape to make it modern, beautiful, and practical. *If image2 exists, you should integrate the style of image2.";
|
|
4
|
+
export const aiLandscapeDesignFreeCmd = new Command("ai-landscape-design-free")
|
|
5
|
+
.summary("AI landscape designer — redesign a yard or outdoor space with a new landscape style")
|
|
6
|
+
.description("Redesign a yard or outdoor space with a new landscape style. Supports up to 2 images:\n" +
|
|
7
|
+
" image 1: the yard to redesign\n" +
|
|
8
|
+
" image 2 (optional): a style reference image\n\n" +
|
|
9
|
+
"Images are optional — text-only generation is supported.\n\n" +
|
|
10
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
11
|
+
" Modern landscape design, retaining core structure, integrating style from image 2 if provided.\n\n" +
|
|
12
|
+
"Examples:\n" +
|
|
13
|
+
" weshop ai-landscape-design-free --image ./yard.png\n" +
|
|
14
|
+
" weshop ai-landscape-design-free --image ./yard.png --image ./style-ref.png --prompt 'Japanese zen garden style'\n" +
|
|
15
|
+
" weshop ai-landscape-design-free --image ./garden.png --batch 4")
|
|
16
|
+
.option("--image <path|url...>", "Yard photo and optional style reference — local file paths or URLs (up to 2)")
|
|
17
|
+
.option("--prompt <text>", "Describe the desired landscape style")
|
|
18
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
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
|
+
const params = { textDescription: opts.prompt ?? DEFAULT_PROMPT };
|
|
23
|
+
if (opts.batch != null)
|
|
24
|
+
params.batchCount = opts.batch;
|
|
25
|
+
const extraInput = {};
|
|
26
|
+
if (opts.taskName)
|
|
27
|
+
extraInput.taskName = opts.taskName;
|
|
28
|
+
if (opts.image && opts.image.length > 0) {
|
|
29
|
+
const imageList = opts.image;
|
|
30
|
+
if (imageList.length > 2) {
|
|
31
|
+
console.error("[error]\n message: Maximum 2 images allowed");
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
await executeRun("ai-landscape-design-free", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await executeRun("ai-landscape-design-free", "v1.0", { wait: opts.wait }, params, extraInput);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=ai-landscape-design-free.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-landscape-design-free.js","sourceRoot":"","sources":["../../src/commands/ai-landscape-design-free.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,iUAAiU,CAAC;AAEpU,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,OAAO,CAAC,0BAA0B,CAAC;KAC5E,OAAO,CAAC,qFAAqF,CAAC;KAC9F,WAAW,CACV,yFAAyF;IACzF,mCAAmC;IACnC,mDAAmD;IACnD,8DAA8D;IAC9D,mDAAmD;IACnD,sGAAsG;IACtG,aAAa;IACb,wDAAwD;IACxD,qHAAqH;IACrH,kEAAkE,CACnE;KACA,MAAM,CAAC,uBAAuB,EAAE,8EAA8E,CAAC;KAC/G,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;KACjE,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,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC7G,MAAM,UAAU,CAAC,0BAA0B,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACnH,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,CAAC,0BAA0B,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChG,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
4
|
+
export const aiLingerieModelsCmd = new Command("ai-lingerie-models")
|
|
5
|
+
.summary("AI lingerie models — transform a person photo into a bikini model image or video")
|
|
6
|
+
.description("Transform a portrait or full-body photo into a bikini model image or video.\n\n" +
|
|
7
|
+
"Generated type (--generated-type):\n" +
|
|
8
|
+
" video Generate a short video (default)\n" +
|
|
9
|
+
" image Generate a still image\n\n" +
|
|
10
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
11
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
12
|
+
"Examples:\n" +
|
|
13
|
+
" weshop ai-lingerie-models --image ./person.png --prompt 'Bikini model on a beach'\n" +
|
|
14
|
+
" weshop ai-lingerie-models --image ./person.png --generated-type image --batch 2\n" +
|
|
15
|
+
" weshop ai-lingerie-models --image ./person.png --generated-type video --no-wait")
|
|
16
|
+
.requiredOption("--image <path|url>", "Input portrait or full-body photo — local file path or URL")
|
|
17
|
+
.option("--prompt <text>", "Describe the desired bikini model scene")
|
|
18
|
+
.option("--generated-type <type>", "Output type: video (default) or image")
|
|
19
|
+
.option("--batch <count>", "Number of outputs to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
20
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
21
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
22
|
+
.action(async (opts) => {
|
|
23
|
+
const params = {
|
|
24
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
25
|
+
generatedType: opts.generatedType ?? "video",
|
|
26
|
+
};
|
|
27
|
+
if (opts.batch != null)
|
|
28
|
+
params.batchCount = opts.batch;
|
|
29
|
+
const extraInput = {};
|
|
30
|
+
if (opts.taskName)
|
|
31
|
+
extraInput.taskName = opts.taskName;
|
|
32
|
+
await executeRun("ai-lingerie-models", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=ai-lingerie-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-lingerie-models.js","sourceRoot":"","sources":["../../src/commands/ai-lingerie-models.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,mBAAmB,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC;KACjE,OAAO,CAAC,kFAAkF,CAAC;KAC3F,WAAW,CACV,iFAAiF;IACjF,sCAAsC;IACtC,8CAA8C;IAC9C,sCAAsC;IACtC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,uFAAuF;IACvF,qFAAqF;IACrF,mFAAmF,CACpF;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,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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
export const aiPhotoshootCmd = new Command("ai-photoshoot")
|
|
4
|
+
.summary("AI photoshoot — generate a professional photoshoot by combining a character photo and a reference scene")
|
|
5
|
+
.description("Generate a professional photoshoot by combining two images:\n" +
|
|
6
|
+
" image 1 (--image, first): the character/person photo\n" +
|
|
7
|
+
" image 2 (--image, second): the reference scene or style image\n\n" +
|
|
8
|
+
"Both images are required. The AI describes the scene from image 2, then generates\n" +
|
|
9
|
+
"a new image placing the person from image 1 into that scene.\n\n" +
|
|
10
|
+
"Use --prompt to add specific instructions (e.g. 'black sunglasses', 'red hair',\n" +
|
|
11
|
+
"'sitting on the couch'). Without a prompt, the AI uses only the scene description.\n\n" +
|
|
12
|
+
"Model (--model):\n" +
|
|
13
|
+
" qwen Qwen model (default)\n" +
|
|
14
|
+
" firered Firered model\n" +
|
|
15
|
+
" nano Nano model — supports --image-size\n\n" +
|
|
16
|
+
"Aspect ratio (--aspect-ratio):\n" +
|
|
17
|
+
" auto, 1:1, 2:3, 3:2, 4:3, 3:4, 16:9, 9:16 (default: auto)\n" +
|
|
18
|
+
" nano also supports: 21:9\n\n" +
|
|
19
|
+
"Image size (--image-size, nano model only):\n" +
|
|
20
|
+
" 1K (default), 2K, 4K\n\n" +
|
|
21
|
+
"Examples:\n" +
|
|
22
|
+
" weshop ai-photoshoot --image ./person.png --image ./scene.png\n" +
|
|
23
|
+
" weshop ai-photoshoot --image ./person.png --image ./living-room.png --prompt 'Person sitting on the sofa, relaxed pose'\n" +
|
|
24
|
+
" weshop ai-photoshoot --image ./person.png --image ./reference.png --model firered --aspect-ratio 3:4\n" +
|
|
25
|
+
" weshop ai-photoshoot --image ./person.png --image ./style.png --model nano --image-size 2K --batch 2")
|
|
26
|
+
.requiredOption("--image <path|url...>", "Two images: character (image 1) and reference scene (image 2) — local file paths or URLs")
|
|
27
|
+
.option("--prompt <text>", "Additional instructions for how the person should appear in the scene (e.g. 'sitting on the couch, wearing sunglasses')")
|
|
28
|
+
.option("--model <name>", "Model to use: qwen (default), firered, or nano")
|
|
29
|
+
.option("--aspect-ratio <ratio>", "Output aspect ratio (default: auto)")
|
|
30
|
+
.option("--image-size <size>", "Output resolution: 1K (default), 2K, or 4K (nano only)")
|
|
31
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
32
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
33
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
34
|
+
.action(async (opts) => {
|
|
35
|
+
const imageList = opts.image;
|
|
36
|
+
if (imageList.length < 2) {
|
|
37
|
+
console.error("[error]\n message: ai-photoshoot requires exactly 2 images: character (image 1) and reference scene (image 2)");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
if (imageList.length > 2) {
|
|
41
|
+
console.error("[error]\n message: Maximum 2 images allowed for ai-photoshoot");
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const params = {
|
|
45
|
+
modelName: opts.model ?? "qwen",
|
|
46
|
+
aspectRatio: opts.aspectRatio ?? "auto",
|
|
47
|
+
};
|
|
48
|
+
if (opts.prompt)
|
|
49
|
+
params.textDescription = opts.prompt;
|
|
50
|
+
if (opts.imageSize)
|
|
51
|
+
params.imageSize = opts.imageSize;
|
|
52
|
+
if (opts.batch != null)
|
|
53
|
+
params.batchCount = opts.batch;
|
|
54
|
+
const extraInput = {};
|
|
55
|
+
if (opts.taskName)
|
|
56
|
+
extraInput.taskName = opts.taskName;
|
|
57
|
+
await executeRun("ai-photoshoot", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=ai-photoshoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-photoshoot.js","sourceRoot":"","sources":["../../src/commands/ai-photoshoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KACxD,OAAO,CAAC,yGAAyG,CAAC;KAClH,WAAW,CACV,+DAA+D;IAC/D,2DAA2D;IAC3D,qEAAqE;IACrE,qFAAqF;IACrF,kEAAkE;IAClE,mFAAmF;IACnF,wFAAwF;IACxF,oBAAoB;IACpB,oCAAoC;IACpC,6BAA6B;IAC7B,oDAAoD;IACpD,kCAAkC;IAClC,gEAAgE;IAChE,gCAAgC;IAChC,+CAA+C;IAC/C,4BAA4B;IAC5B,aAAa;IACb,mEAAmE;IACnE,6HAA6H;IAC7H,0GAA0G;IAC1G,wGAAwG,CACzG;KACA,cAAc,CAAC,uBAAuB,EAAE,0FAA0F,CAAC;KACnI,MAAM,CAAC,iBAAiB,EAAE,yHAAyH,CAAC;KACpJ,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;KAC1E,MAAM,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,wDAAwD,CAAC;KACvF,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,gHAAgH,CAAC,CAAC;QAChI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM;KACxC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IACtD,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtD,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,eAAe,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "Make a poster based on the uploaded picture and user instructions. Based on the uploaded image, determine the main color of the brand. If not available, you can use the main color of the product. The poster design should conform to the aesthetic standards of modern design styles, try to be simple and elegant. Font should have difference in sizes and a fitting style for good aesthetics.";
|
|
4
|
+
export const aiPosterFromImagesCmd = new Command("ai-poster-from-images")
|
|
5
|
+
.summary("AI poster generator — create a designed poster from up to 5 reference images")
|
|
6
|
+
.description("Generate a professional poster from reference images and a text prompt.\n" +
|
|
7
|
+
"Supports up to 5 input images. Images are optional — text-only generation is supported.\n\n" +
|
|
8
|
+
"Aspect ratio (--aspect-ratio):\n" +
|
|
9
|
+
" 1:1, 2:3, 3:2, 4:3, 3:4, 16:9, 9:16, 21:9 (default: 1:1)\n\n" +
|
|
10
|
+
"Image size (--image-size):\n" +
|
|
11
|
+
" 1K (default), 2K, 4K\n\n" +
|
|
12
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
13
|
+
" Creates a modern, elegant poster using the brand color from the uploaded image.\n\n" +
|
|
14
|
+
"Examples:\n" +
|
|
15
|
+
" weshop ai-poster-from-images --image ./product.png --prompt 'Summer sale poster, bold typography'\n" +
|
|
16
|
+
" weshop ai-poster-from-images --image ./logo.png --image ./product.png --prompt 'Brand launch poster' --aspect-ratio 9:16\n" +
|
|
17
|
+
" weshop ai-poster-from-images --prompt 'Minimalist tech conference poster' --image-size 2K")
|
|
18
|
+
.option("--image <path|url...>", "Reference images — local file paths or URLs (up to 5, optional)")
|
|
19
|
+
.option("--prompt <text>", "Describe the desired poster (default: modern elegant poster from image)")
|
|
20
|
+
.option("--aspect-ratio <ratio>", "Output aspect ratio (default: 1:1)")
|
|
21
|
+
.option("--image-size <size>", "Output resolution: 1K (default), 2K, or 4K")
|
|
22
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
23
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
24
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
25
|
+
.action(async (opts) => {
|
|
26
|
+
const params = {
|
|
27
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
28
|
+
aspectRatio: opts.aspectRatio ?? "1:1",
|
|
29
|
+
imageSize: opts.imageSize ?? "1K",
|
|
30
|
+
};
|
|
31
|
+
if (opts.batch != null)
|
|
32
|
+
params.batchCount = opts.batch;
|
|
33
|
+
const extraInput = {};
|
|
34
|
+
if (opts.taskName)
|
|
35
|
+
extraInput.taskName = opts.taskName;
|
|
36
|
+
if (opts.image && opts.image.length > 0) {
|
|
37
|
+
const imageList = opts.image;
|
|
38
|
+
if (imageList.length > 5) {
|
|
39
|
+
console.error("[error]\n message: Maximum 5 images allowed");
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
await executeRun("ai-poster-from-images", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
await executeRun("ai-poster-from-images", "v1.0", { wait: opts.wait }, params, extraInput);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=ai-poster-from-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-poster-from-images.js","sourceRoot":"","sources":["../../src/commands/ai-poster-from-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,sYAAsY,CAAC;AAEzY,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,uBAAuB,CAAC;KACtE,OAAO,CAAC,8EAA8E,CAAC;KACvF,WAAW,CACV,2EAA2E;IAC3E,6FAA6F;IAC7F,kCAAkC;IAClC,iEAAiE;IACjE,8BAA8B;IAC9B,4BAA4B;IAC5B,mDAAmD;IACnD,uFAAuF;IACvF,aAAa;IACb,uGAAuG;IACvG,8HAA8H;IAC9H,6FAA6F,CAC9F;KACA,MAAM,CAAC,uBAAuB,EAAE,iEAAiE,CAAC;KAClG,MAAM,CAAC,iBAAiB,EAAE,yEAAyE,CAAC;KACpG,MAAM,CAAC,wBAAwB,EAAE,oCAAoC,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,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;QAC9C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;QACtC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;KAClC,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,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,UAAU,CAAC,uBAAuB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChH,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,CAAC,uBAAuB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
export const aiPosterCmd = new Command("ai-poster")
|
|
4
|
+
.summary("AI poster generator — create a designed poster from text prompt and optional reference images")
|
|
5
|
+
.description("Generate a professional poster from a text prompt. Supports up to 6 reference images.\n" +
|
|
6
|
+
"Images are optional — text-only generation is supported.\n\n" +
|
|
7
|
+
"Model (--model):\n" +
|
|
8
|
+
" jimeng Jimeng model (default) — no image-size or aspect-ratio options\n" +
|
|
9
|
+
" nano Nano model — supports --image-size and --aspect-ratio\n" +
|
|
10
|
+
" nano2 Nano2 model — supports --image-size and --aspect-ratio\n\n" +
|
|
11
|
+
"Image size (--image-size, nano/nano2 only):\n" +
|
|
12
|
+
" 1K (default), 2K, 4K\n\n" +
|
|
13
|
+
"Aspect ratio (--aspect-ratio, nano/nano2 only):\n" +
|
|
14
|
+
" 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, 21:9 (default: 1:1)\n\n" +
|
|
15
|
+
"Examples:\n" +
|
|
16
|
+
" weshop ai-poster --prompt 'Summer sale poster, bold red typography, white background'\n" +
|
|
17
|
+
" weshop ai-poster --image ./product.png --prompt 'Product launch poster for sneakers' --model nano2 --aspect-ratio 9:16\n" +
|
|
18
|
+
" weshop ai-poster --image ./logo.png --image ./product.png --prompt 'Brand poster' --image-size 2K")
|
|
19
|
+
.option("--image <path|url...>", "Reference images — local file paths or URLs (up to 6, optional)")
|
|
20
|
+
.requiredOption("--prompt <text>", "Describe the desired poster")
|
|
21
|
+
.option("--model <name>", "Model to use: jimeng (default), nano, or nano2")
|
|
22
|
+
.option("--image-size <size>", "Output resolution: 1K (default), 2K, or 4K (nano/nano2 only)")
|
|
23
|
+
.option("--aspect-ratio <ratio>", "Output aspect ratio (nano/nano2 only, default: 1:1)")
|
|
24
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
25
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
26
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
27
|
+
.action(async (opts) => {
|
|
28
|
+
const params = {
|
|
29
|
+
textDescription: opts.prompt,
|
|
30
|
+
modelName: opts.model ?? "jimeng",
|
|
31
|
+
};
|
|
32
|
+
if (opts.batch != null)
|
|
33
|
+
params.batchCount = opts.batch;
|
|
34
|
+
if (opts.imageSize)
|
|
35
|
+
params.imageSize = opts.imageSize;
|
|
36
|
+
if (opts.aspectRatio)
|
|
37
|
+
params.aspectRatio = opts.aspectRatio;
|
|
38
|
+
const extraInput = {};
|
|
39
|
+
if (opts.taskName)
|
|
40
|
+
extraInput.taskName = opts.taskName;
|
|
41
|
+
if (opts.image && opts.image.length > 0) {
|
|
42
|
+
const imageList = opts.image;
|
|
43
|
+
if (imageList.length > 6) {
|
|
44
|
+
console.error("[error]\n message: Maximum 6 images allowed");
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
await executeRun("ai-poster", "v1.0", { images: imageList, wait: opts.wait }, params, extraInput);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
await executeRun("ai-poster", "v1.0", { wait: opts.wait }, params, extraInput);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=ai-poster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-poster.js","sourceRoot":"","sources":["../../src/commands/ai-poster.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KAChD,OAAO,CAAC,+FAA+F,CAAC;KACxG,WAAW,CACV,yFAAyF;IACzF,8DAA8D;IAC9D,oBAAoB;IACpB,6EAA6E;IAC7E,oEAAoE;IACpE,uEAAuE;IACvE,+CAA+C;IAC/C,4BAA4B;IAC5B,mDAAmD;IACnD,iEAAiE;IACjE,aAAa;IACb,2FAA2F;IAC3F,4HAA4H;IAC5H,qGAAqG,CACtG;KACA,MAAM,CAAC,uBAAuB,EAAE,iEAAiE,CAAC;KAClG,cAAc,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;KAC1E,MAAM,CAAC,qBAAqB,EAAE,8DAA8D,CAAC;KAC7F,MAAM,CAAC,wBAAwB,EAAE,qDAAqD,CAAC;KACvF,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACvG,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,8EAA8E,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAA4B;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;KAClC,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtD,IAAI,IAAI,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACvD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC7G,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACpG,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "Identify the room type, layout, key furniture objects, clutter, and windows from the source. Redesign the room in [modern style] without changing major decoration. Keep room structure and window position. Implement a clean, integrated modern palette.";
|
|
4
|
+
export const aiRoomPlannerCmd = new Command("ai-room-planner")
|
|
5
|
+
.summary("AI room planner — redesign a room photo with a new interior design style")
|
|
6
|
+
.description("Redesign a room photo with a new interior design style while preserving the room\n" +
|
|
7
|
+
"structure and window positions. Image is optional.\n\n" +
|
|
8
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
9
|
+
" Modern style redesign, clean integrated palette, preserving structure and windows.\n\n" +
|
|
10
|
+
"Examples:\n" +
|
|
11
|
+
" weshop ai-room-planner --image ./room.png\n" +
|
|
12
|
+
" weshop ai-room-planner --image ./living-room.png --prompt 'Scandinavian minimalist style, white and wood tones'\n" +
|
|
13
|
+
" weshop ai-room-planner --image ./bedroom.png --batch 4")
|
|
14
|
+
.option("--image <path|url>", "Input room photo — local file path or URL (optional)")
|
|
15
|
+
.option("--prompt <text>", "Describe the desired interior design style")
|
|
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
|
+
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-room-planner", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=ai-room-planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-room-planner.js","sourceRoot":"","sources":["../../src/commands/ai-room-planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,6PAA6P,CAAC;AAEhQ,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAC3D,OAAO,CAAC,0EAA0E,CAAC;KACnF,WAAW,CACV,oFAAoF;IACpF,wDAAwD;IACxD,mDAAmD;IACnD,0FAA0F;IAC1F,aAAa;IACb,+CAA+C;IAC/C,qHAAqH;IACrH,0DAA0D,CAC3D;KACA,MAAM,CAAC,oBAAoB,EAAE,sDAAsD,CAAC;KACpF,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;KACvE,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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "Generate a selfie shot, wide angle, iphone style, no need to show the phone.";
|
|
4
|
+
export const aiSelfieCmd = new Command("ai-selfie")
|
|
5
|
+
.summary("AI selfie generator — transform a portrait into a natural iPhone-style selfie photo")
|
|
6
|
+
.description("Transform a portrait photo into a natural-looking iPhone-style selfie with wide angle.\n\n" +
|
|
7
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
8
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
9
|
+
"Examples:\n" +
|
|
10
|
+
" weshop ai-selfie --image ./person.png\n" +
|
|
11
|
+
" weshop ai-selfie --image ./person.png --prompt 'Outdoor selfie at sunset, casual smile'\n" +
|
|
12
|
+
" weshop ai-selfie --image ./person.png --batch 2")
|
|
13
|
+
.requiredOption("--image <path|url>", "Input portrait image — local file path or URL")
|
|
14
|
+
.option("--prompt <text>", "Custom selfie scene instruction")
|
|
15
|
+
.option("--batch <count>", "Number of images to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
16
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
17
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
18
|
+
.action(async (opts) => {
|
|
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-selfie", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=ai-selfie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-selfie.js","sourceRoot":"","sources":["../../src/commands/ai-selfie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,cAAc,GAClB,8EAA8E,CAAC;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KAChD,OAAO,CAAC,qFAAqF,CAAC;KAC9F,WAAW,CACV,4FAA4F;IAC5F,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,2CAA2C;IAC3C,6FAA6F;IAC7F,mDAAmD,CACpD;KACA,cAAc,CAAC,oBAAoB,EAAE,+CAA+C,CAAC;KACrF,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,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
4
|
+
export const aiSexyPortraitCmd = new Command("ai-sexy-portrait")
|
|
5
|
+
.summary("AI sexy portrait — transform a person photo into a bikini model image or video")
|
|
6
|
+
.description("Transform a portrait or full-body photo into a bikini model image or video.\n\n" +
|
|
7
|
+
"Generated type (--generated-type):\n" +
|
|
8
|
+
" video Generate a short video (default)\n" +
|
|
9
|
+
" image Generate a still image\n\n" +
|
|
10
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
11
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
12
|
+
"Examples:\n" +
|
|
13
|
+
" weshop ai-sexy-portrait --image ./person.png --prompt 'Bikini model on a beach'\n" +
|
|
14
|
+
" weshop ai-sexy-portrait --image ./person.png --generated-type image --batch 2\n" +
|
|
15
|
+
" weshop ai-sexy-portrait --image ./person.png --generated-type video --no-wait")
|
|
16
|
+
.requiredOption("--image <path|url>", "Input portrait or full-body photo — local file path or URL")
|
|
17
|
+
.option("--prompt <text>", "Describe the desired bikini model scene")
|
|
18
|
+
.option("--generated-type <type>", "Output type: video (default) or image")
|
|
19
|
+
.option("--batch <count>", "Number of outputs to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
20
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
21
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
22
|
+
.action(async (opts) => {
|
|
23
|
+
const params = {
|
|
24
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
25
|
+
generatedType: opts.generatedType ?? "video",
|
|
26
|
+
};
|
|
27
|
+
if (opts.batch != null)
|
|
28
|
+
params.batchCount = opts.batch;
|
|
29
|
+
const extraInput = {};
|
|
30
|
+
if (opts.taskName)
|
|
31
|
+
extraInput.taskName = opts.taskName;
|
|
32
|
+
await executeRun("ai-sexy-portrait", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=ai-sexy-portrait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sexy-portrait.js","sourceRoot":"","sources":["../../src/commands/ai-sexy-portrait.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,iBAAiB,GAAG,IAAI,OAAO,CAAC,kBAAkB,CAAC;KAC7D,OAAO,CAAC,gFAAgF,CAAC;KACzF,WAAW,CACV,iFAAiF;IACjF,sCAAsC;IACtC,8CAA8C;IAC9C,sCAAsC;IACtC,mDAAmD;IACnD,MAAM,cAAc,OAAO;IAC3B,aAAa;IACb,qFAAqF;IACrF,mFAAmF;IACnF,iFAAiF,CAClF;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,kBAAkB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC3G,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "naturally undress and change the outfit into a thin bikini while keeping body proportions natural. Keep Model dancing tiktok dance.";
|
|
4
|
+
export const aiSexyTeensCmd = new Command("ai-sexy-teens")
|
|
5
|
+
.summary("AI sexy teens — transform a person photo into a bikini model image or video")
|
|
6
|
+
.description("Transform a portrait or full-body photo into a bikini model image or video.\n\n" +
|
|
7
|
+
"Generated type (--generated-type):\n" +
|
|
8
|
+
" video Generate a short video (default)\n" +
|
|
9
|
+
" image Generate a still image\n\n" +
|
|
10
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
11
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
12
|
+
"Examples:\n" +
|
|
13
|
+
" weshop ai-sexy-teens --image ./person.png --prompt 'Bikini model on a beach'\n" +
|
|
14
|
+
" weshop ai-sexy-teens --image ./person.png --generated-type image --batch 2\n" +
|
|
15
|
+
" weshop ai-sexy-teens --image ./person.png --generated-type video --no-wait")
|
|
16
|
+
.requiredOption("--image <path|url>", "Input portrait or full-body photo — local file path or URL")
|
|
17
|
+
.option("--prompt <text>", "Describe the desired bikini model scene")
|
|
18
|
+
.option("--generated-type <type>", "Output type: video (default) or image")
|
|
19
|
+
.option("--batch <count>", "Number of outputs to generate, 1-16 (default: 1)", (v) => parseInt(v, 10), 1)
|
|
20
|
+
.option("--task-name <name>", "Human-readable label for this run")
|
|
21
|
+
.option("--no-wait", "Return immediately after submission; use 'weshop status <id>' to check later")
|
|
22
|
+
.action(async (opts) => {
|
|
23
|
+
const params = {
|
|
24
|
+
textDescription: opts.prompt ?? DEFAULT_PROMPT,
|
|
25
|
+
generatedType: opts.generatedType ?? "video",
|
|
26
|
+
};
|
|
27
|
+
if (opts.batch != null)
|
|
28
|
+
params.batchCount = opts.batch;
|
|
29
|
+
const extraInput = {};
|
|
30
|
+
if (opts.taskName)
|
|
31
|
+
extraInput.taskName = opts.taskName;
|
|
32
|
+
await executeRun("ai-sexy-teens", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
33
|
+
});
|
|
34
|
+
//# 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,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,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,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,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { executeRun } from "../run-helper.js";
|
|
3
|
+
const DEFAULT_PROMPT = "Change the original photo to stencil style, only black and white, spray paint style.";
|
|
4
|
+
export const aiSprayPaintCmd = new Command("ai-spray-paint")
|
|
5
|
+
.summary("AI spray paint stencil maker — convert a photo into a black-and-white spray paint stencil")
|
|
6
|
+
.description("Convert any photo into a black-and-white spray paint stencil style image.\n" +
|
|
7
|
+
"Image is optional — text-only generation is supported.\n\n" +
|
|
8
|
+
"Default prompt (used when --prompt is omitted):\n" +
|
|
9
|
+
` "${DEFAULT_PROMPT}"\n\n` +
|
|
10
|
+
"Examples:\n" +
|
|
11
|
+
" weshop ai-spray-paint --image ./photo.png\n" +
|
|
12
|
+
" weshop ai-spray-paint --prompt 'Spray paint stencil of a wolf howling at the moon'\n" +
|
|
13
|
+
" weshop ai-spray-paint --image ./portrait.png --batch 2")
|
|
14
|
+
.option("--image <path|url>", "Input image — local file path or URL (optional)")
|
|
15
|
+
.option("--prompt <text>", "Custom stencil 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
|
+
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-spray-paint", "v1.0", { image: opts.image, wait: opts.wait }, params, extraInput);
|
|
27
|
+
});
|
|
28
|
+
//# 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,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,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,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,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACzG,CAAC,CAAC,CAAC"}
|