CLI
Cette page n’est pas encore traduite : voici la version anglaise.
The engine is a Python package (vstudio, in lib/). The Mac app and the Claude Code skill both call these commands; you can run them yourself from a terminal:
cd ~/.claude/skills/video-studio # or your clone of the repositoryexport PYTHONPATH="$PWD/lib:$PYTHONPATH"python3 -m vstudio.intake --helpEvery command that reports something accepts --json for one machine-readable document. Each workflow also has its own scripts under workflows/<name>/scripts; see Workflows.
| Command | What it does |
|---|---|
vstudio.intake |
Say what you want and point at files: inventory, plan, revise, apply. |
vstudio.project |
Every workflow as a recipe; projects, runs, checkpoints, inbox, outputs, calendar. |
vstudio.batch |
Batch production: plan, estimate, run, status, review, package. |
vstudio.cleanup |
Shared speech cleanup: pauses, fillers, repeats, restarts. |
vstudio.export |
One clean master into a file, cover and post stub per platform. |
vstudio.reframe |
Face-tracked reframe between aspect ratios. |
vstudio.platform |
Print the platform profiles. |
vstudio.effects |
List and inspect the effect registry. |
vstudio.llm |
AI providers on this machine: list, route, auth, test. |
vstudio.retouch |
Portrait retouch and makeup for photos and frames. |
vstudio.intake
Section titled “vstudio.intake”Say what you want and point at files: inventory, plan, revise, apply.
usage: python -m vstudio.intake [-h] {analyze,plan,revise,apply,schema} ...
python -m vstudio.intake analyze | plan | revise | apply | schema (every command: --json -> onedocument).
positional arguments: {analyze,plan,revise,apply,schema} analyze inventory files / folders (video, audio, images, pdf / docx / pptx / md / srt) plan natural-language request + materials -> plan JSON revise update a plan from a follow-up instruction apply create the project(s) from a plan (a series when mixed); pilot run optional schema the plan JSON Schema
options: -h, --help show this help message and exitvstudio.project
Section titled “vstudio.project”Every workflow as a recipe; projects, runs, checkpoints, inbox, outputs, calendar.
usage: python -m vstudio.project [-h] {recipes,new,plan-items,show,status,preview,context,refresh,run,resume,checkpoint,set,export,list,adopt,touch,output,ai,series,inbox,calendar} ...
python -m vstudio.project - every workflow as a recipe; projects of N items (N=1 = one video). See
positional arguments: {recipes,new,plan-items,show,status,preview,context,refresh,run,resume,checkpoint,set,export,list,adopt,touch,output,ai,series,inbox,calendar} recipes list recipe manifests new create a project plan-items planner recipes: draft the items (segments of a recording) show manifest + project.yaml + status status items and stages preview preview artifacts context agent hook: compact state + playbook + commands refresh re-read project.yaml + item files, re-plan run run until done or a checkpoint resume run until done or a checkpoint checkpoint pending checkpoints / answer one set edit params export collect final files list registered projects (+ adopted work folders, series) adopt an existing folder made with the skill -> work record + registry touch register a job folder + report its live status (desk 进行中 lane) output second-pass edit of a finished output (references/OUTPUT_EDIT.md) ai project-level AI edit of every output (grouped per output; needs_rerender) series series presets inbox pending checkpoints across projects calendar publish calendar
options: -h, --help show this help message and exit
python -m vstudio.project - every workflow as a recipe; projects of N items (N=1 = one video). Seereferences/PROJECTS.md.
recipes [--json] [--schema] all recipe manifests + capabilities (--schema: the JSON Schema) new --recipe R --dir P [--name N] [--input key=path ...] [--folder D [--glob G]] [--list F] [--csv F] [--episodes N] [--param k=v ...] [--set JSON] [--series S] [--client C] [--variants JSON] [--auto a,b] [--spec JSON] create a project (items from files / lines / rows / episodes) plan-items --dir P [--replace] [--provider X] [--count N] [--min S --max S] planner recipes: draft the items show | status | preview [--item I] [--stage S] | context [--write] | refresh --dir P [--json] run | resume --dir P [--pilot N] [--confirm-pilot] [--items a,b] [--auto ids|all] [--concurrency k=n] [--json | --json-events] run until done or a checkpoint needs you (exit 7) checkpoint --dir P [--id X] [--item I | --items a,b] [--answer JSON | --answer-file F | --default] [--run] list pending payloads / record an answer set --dir P [--item I] (--param k=v ... | --set JSON) edit params in project.yaml, then refresh export --dir P [--out D] [--all] [--items a,b] final files + manifest.json (sha256) list registered projects (lanes) with their state + adopted work folders (kind work) + series adopt DIR [--recipe guess|NAME] [--title T] [--client C] a plain folder made with the skill (final/, REPORT.md, post.md, ...) -> DIR/.vstudio/work.json + registry (works.py) touch DIR [--status running|waiting|done|failed] [--stage S] [--progress 0..1] [--message M] [--eta S] [--needs-you] [--recipe R] [--title T] [--outputs a,b] register a job folder + its live status (heartbeat) output list | show | edit | preview-edl | render | undo | redo | revert | ai | chat | effects --project P --output O 2nd-pass edit of one finished output (references/OUTPUT_EDIT.md): edit --ops JSON | --op NAME --param k=v | --op ai --instruction T [--apply]; render [--quality preview|final] [--targets primary,douyin:vertical|all] ai --project P --instruction T [--outputs all|a,b] [--context JSON] [--timeout 120] [--json | --json-events] project-level AI edit: one model call for every output -> grouped changes per output, or needs_rerender (burned-in text on flattened outputs; answered by rules, no model call) series new --id S --recipe R [--name N] [--set JSON] [--cadence JSON] | show --id S | list | update --id S --set JSON inbox [--json] | inbox answer (--project P --id X [--item I] | --id X / --kind K [--projects a,b]) (--answer JSON | --default) calendar account add --id A --platform P [--times 12:00,19:00] [--per-day N] [--days 0,1,2,3,4] calendar plan --project P [--accounts a,b] [--start ISO] | calendar set --post ID --state S [--at ISO] [--url U] calendar list [--start ISO] [--end ISO] [--account A] | calendar add --account A --at ISO [--title T]--json: one JSON document on stdout; --json-events: one JSON event per line on stdout (logs -> stderr).Exit codes: 0 ok, 1 failed items, 2 refused (budget), 3 paused, 4 pilot waits, 5 bad input, 6 busy, 7 needs you.vstudio.batch
Section titled “vstudio.batch”Batch production: plan, estimate, run, status, review, package.
usage: python -m vstudio.batch [-h] {plan,estimate,run,status,review,job,plan-segments,client,deliver,cleanup-sources,metrics,timing,package,verify-manifest,clean,du,bench,recipes} ...
python -m vstudio.batch - batch video production (Fleet F0). See references/BATCH.md.
positional arguments: {plan,estimate,run,status,review,job,plan-segments,client,deliver,cleanup-sources,metrics,timing,package,verify-manifest,clean,du,bench,recipes} plan spec -> jobs in the batch store estimate time / storage / cost estimate and budget check run run the jobs status job table review HTML review page / apply decisions job one job: show (transcript, edits, captions, QC, exports) | edit | rerun plan-segments transcript -> candidate segments (segments.draft.yaml) client client workspace: init | show | update | list deliver client delivery package (per-platform folders, 文案.md, 排期表, zip) cleanup-sources list (dry run) / delete, with the dry run's code, source files of deliveries past their cleanup date metrics metrics: --batch / --client / --all, JSON or the weekly CSV timing review timing event -> batch store package publish folders + schedule + confirmation code verify-manifest recompute a package confirmation code clean delete regenerable intermediates du disk use bench benchmark table recipes list recipes
options: -h, --help show this help message and exit
python -m vstudio.batch - batch video production (Fleet F0). See references/BATCH.md.
plan SPEC [--batch DIR] [--planner file|claude] [--segments F] [--sync] [--json] spec -> jobs, replan estimate [--batch DIR] [--json] machine / wall time, storage, API cost vs budget run [--batch DIR] [--pilot N] [--confirm-pilot] [--resume] [--retry-failed] [--jobs a,b] [--concurrency asr=1,cpu-render=2] [--json-events] run the stage DAGs (resumable; refuses over budget) status [--batch DIR] [--json] [--events N] terminal table review [--batch DIR] [--apply decisions.json|JSON] [--confirm-kinds a,b] [--accept-policy] [--jobs a,b] [--approve-green] [--json] HTML grid + decisions sheet / ingest (+ bulk answers) job ID [--batch DIR] [--json] [--no-words] one job: transcript + cleanup edits, captions, QC, exports package [--batch DIR] [--per-day N] [--start YYYY-MM-DD] [--times 12:00,19:00] [--json] publish folders verify-manifest MANIFEST recompute a package's confirmation code (JSON) clean [--batch DIR] [--dry-run] delete regenerable intermediates of finished jobs du [--batch DIR] disk use of the batch folder bench [--batch DIR] the benchmark table used by estimate recipes [--json] registered recipes (--json: labels, inputs, row keys)v0.2 (desk; all with --json): plan-segments --source F [--transcript T] [--client C] [--count N] [--min S --max S] [--platforms a,b] [--provider auto|claude|openai|ollama|claude-code|...|none] [--out DIR] transcript -> candidate segments -> segments.draft.yaml client init|show|update|list --client C [--set JSON] client.yaml layered over the persona (effective config) job show ID | job edit --job J --op caption|trim|cut|notes|hook|cover|copy|undo ... | job rerun --job J [--json-events] deliver [--client C] [--zip] [--cleanup-days N] [--out DIR] client delivery package + manifest hash cleanup-sources [--batch B | --client C | --all] [--confirm-delete CODE] list (dry run + code) / delete exactly that list; sources outside the batch folder: report only metrics --batch B | --client C | --all [--csv] metrics JSON / weekly CSV timing --job J --event start|stop|add --what review [--seconds S] review timing -> batch store--json: one JSON document on stdout (paths absolute); run --json-events: one JSON event per line on stdout(the human log goes to stderr). See references/BATCH.md section 7.--batch defaults to the current folder when it holds batch.db.Exit codes (run): 0 ok, 1 some jobs failed, 2 refused over budget, 3 paused (circuit breaker), 4 pilot waits.vstudio.cleanup
Section titled “vstudio.cleanup”Shared speech cleanup: pauses, fillers, repeats, restarts.
usage: python -m vstudio.cleanup [-h] {analyze,review,apply,verify} ...
Speech cleanup, one shared tool: 气口 (pauses / breaths), 口头禅 fillers, repeats, stammers,
positional arguments: {analyze,review,apply,verify} analyze detect edits -> cleanup.json + cleanup_review.md review print the review sheet of an EDL apply cut the source with the decisions -> versioned output verify re-ASR the output and flag lost content words (exit 1)
options: -h, --help show this help message and exitvstudio.export
Section titled “vstudio.export”One clean master into a file, cover and post stub per platform.
usage: python -m vstudio.export [-h] [--platforms PLATFORMS] [--out OUT] [--cues CUES] [--cover COVER] [--no-captions] [--title TITLE] [--post POST] [--lang LANG] [--bilingual] [--account ACCOUNT] [--mode {face,center,pad-blur,letterbox}] [--fallback {center,pad-blur,letterbox}] [--start START] [--dur DUR] [--encoder ENCODER] [--preset PRESET] master
Multi-platform export: one clean master -> a file + cover + post stub per platform, plus amanifest.
positional arguments: master clean (caption-free) master video
options: -h, --help show this help message and exit --platforms PLATFORMS comma list of name[:orientation], e.g. xiaohongshu:vertical,douyin,youtube (default persona platforms.default). Known: xiaohongshu:vertical, xiaohongshu:full, xiaohongshu:horizontal, douyin:vertical, douyin:horizontal, tiktok:vertical, youtube:horizontal, youtube- shorts:vertical, bilibili:horizontal, bilibili:vertical, wechat- channels:vertical, wechat-channels:horizontal, x:horizontal, x:square, x:vertical, instagram:reels, instagram:feed, facebook:reels, facebook:feed, facebook:horizontal, linkedin:horizontal, linkedin:square, linkedin:feed, threads:vertical, threads:horizontal, reddit:horizontal, reddit:square, reddit:vertical, pinterest:vertical, pinterest:feed, pinterest:square, snapchat:vertical, kuaishou:vertical, kuaishou:horizontal, weibo:horizontal, weibo:vertical, zhihu:horizontal, zhihu:vertical, dailymotion:horizontal, dailymotion:vertical, kwai:vertical --out OUT --cues CUES cues.json (subs.Cue dicts) or .srt to burn per platform --cover COVER cover image(s): a path (closest aspect wins; another aspect is fitted on a blurred pad) or platform[:orientation]=path for one target, e.g. --cover xiaohongshu=c34.png --no-captions do not burn --cues (the master already carries its captions) --title TITLE post title (checked against each platform's limit) --post POST post.json {title, hook, body, chapters, links, tags} -> <target>.post.md --lang LANG post copy language (en | zh); default: the content language detected from the cues (English content -> English copy on X / Instagram / TikTok / YouTube) --bilingual post copy in English + Chinese (post.json en + zh blocks) --account ACCOUNT account tier for limits, e.g. premium (X: longer videos/posts) --mode {face,center,pad-blur,letterbox} reframe mode when the aspect changes --fallback {center,pad-blur,letterbox} --start START --dur DUR --encoder ENCODER H.264 encoder (default $VSTUDIO_H264_ENCODER / persona export.h264_encoder / libx264): libx264 | videotoolbox | h264_videotoolbox | h264_mf --preset PRESETvstudio.reframe
Section titled “vstudio.reframe”Face-tracked reframe between aspect ratios.
usage: python -m vstudio.reframe [-h] [--size SIZE] [--platform PLATFORM] [--mode {face,center,pad-blur,letterbox}] [--fallback {center,pad-blur,letterbox}] [--start START] [--dur DUR] [--zoom ZOOM] [--every EVERY] src dst
Reframe a video to another canvas: face-tracked virtual camera, centre crop, blurred-fill orletterbox.
positional arguments: src dst
options: -h, --help show this help message and exit --size SIZE WxH (default from --platform) --platform PLATFORM e.g. douyin or xiaohongshu:vertical (size + safe box) --mode {face,center,pad-blur,letterbox} --fallback {center,pad-blur,letterbox} --start START --dur DUR --zoom ZOOM --every EVERY detect every N framesvstudio.platform
Section titled “vstudio.platform”Print the platform profiles.
youtube:horizontal 1920x1080 safe=(96, 54, 1824, 1026) caption=(96, 880, 1824, 1020) cover=(1280, 720) title<=100 len [420, 1200]/43200s -14.0 LUFS/-1.5 dBTPyoutube-shorts:vertical 1080x1920 safe=(60, 180, 960, 1530) caption=(120, 1260, 960, 1480) cover=(1080, 1920) title<=100 len [20, 60]/180s -14.0 LUFS/-1.5 dBTPtiktok:vertical 1080x1920 safe=(60, 130, 940, 1436) caption=(140, 1200, 940, 1420) cover=(1080, 1920) title<=55 len [21, 60]/3600s -14.0 LUFS/-1.5 dBTPinstagram:reels 1080x1920 safe=(60, 285, 950, 1470) caption=(170, 1200, 910, 1440) cover=(1080, 1920) title<=0 len [15, 90]/1200s -14.0 LUFS/-1.5 dBTPinstagram:feed 1080x1350 safe=(60, 60, 1020, 1230) caption=(60, 1010, 1020, 1200) cover=(1080, 1350) title<=0 len [15, 90]/1200s -14.0 LUFS/-1.5 dBTPx:horizontal 1920x1080 safe=(96, 54, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=0 len [15, 90]/140s -14.0 LUFS/-1.5 dBTPx:square 1080x1080 safe=(60, 54, 1020, 990) caption=(60, 800, 1020, 980) cover=(1080, 1080) title<=0 len [15, 90]/140s -14.0 LUFS/-1.5 dBTPx:vertical 1080x1920 safe=(60, 160, 960, 1540) caption=(120, 1240, 960, 1460) cover=(1080, 1920) title<=0 len [15, 90]/140s -14.0 LUFS/-1.5 dBTPfacebook:reels 1080x1920 safe=(65, 269, 1015, 1248) caption=(65, 1040, 1015, 1240) cover=(1080, 1920) title<=0 len [15, 90]/14400s -14.0 LUFS/-1.5 dBTPfacebook:feed 1080x1350 safe=(60, 60, 1020, 1230) caption=(60, 1010, 1020, 1200) cover=(1080, 1350) title<=0 len [15, 90]/14400s -14.0 LUFS/-1.5 dBTPfacebook:horizontal 1920x1080 safe=(96, 54, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=0 len [15, 90]/14400s -14.0 LUFS/-1.5 dBTPlinkedin:horizontal 1920x1080 safe=(96, 54, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=0 len [30, 120]/900s -14.0 LUFS/-1.5 dBTPlinkedin:square 1080x1080 safe=(60, 54, 1020, 990) caption=(60, 800, 1020, 980) cover=(1080, 1080) title<=0 len [30, 120]/900s -14.0 LUFS/-1.5 dBTPlinkedin:feed 1080x1350 safe=(60, 60, 1020, 1230) caption=(60, 1010, 1020, 1200) cover=(1080, 1350) title<=0 len [30, 120]/900s -14.0 LUFS/-1.5 dBTPthreads:vertical 1080x1920 safe=(60, 160, 960, 1540) caption=(120, 1240, 960, 1460) cover=(1080, 1920) title<=0 len [15, 90]/300s -14.0 LUFS/-1.5 dBTPthreads:horizontal 1920x1080 safe=(96, 54, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=0 len [15, 90]/300s -14.0 LUFS/-1.5 dBTPreddit:horizontal 1920x1080 safe=(96, 54, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=300 len [15, 120]/900s -14.0 LUFS/-1.5 dBTPreddit:square 1080x1080 safe=(60, 54, 1020, 990) caption=(60, 800, 1020, 980) cover=(1080, 1080) title<=300 len [15, 120]/900s -14.0 LUFS/-1.5 dBTPreddit:vertical 1080x1920 safe=(60, 160, 1020, 1620) caption=(60, 1300, 1020, 1520) cover=(1080, 1920) title<=300 len [15, 120]/900s -14.0 LUFS/-1.5 dBTPpinterest:vertical 1080x1920 safe=(65, 270, 885, 1130) caption=(195, 920, 885, 1120) cover=(1080, 1920) title<=100 len [6, 60]/900s -14.0 LUFS/-1.5 dBTPpinterest:feed 1000x1500 safe=(60, 60, 940, 1340) caption=(60, 1120, 940, 1330) cover=(1000, 1500) title<=100 len [6, 60]/900s -14.0 LUFS/-1.5 dBTPpinterest:square 1080x1080 safe=(60, 60, 1020, 960) caption=(60, 780, 1020, 950) cover=(1080, 1080) title<=100 len [6, 60]/900s -14.0 LUFS/-1.5 dBTPsnapchat:vertical 1080x1920 safe=(60, 200, 940, 1520) caption=(140, 1220, 940, 1440) cover=(1080, 1920) title<=0 len [10, 60]/60s -14.0 LUFS/-1.5 dBTPxiaohongshu:vertical 1080x1440 safe=(48, 60, 1032, 1290) caption=(120, 1080, 960, 1270) cover=(1080, 1440) title<=20 len [30, 180]/900s -14.0 LUFS/-1.5 dBTPxiaohongshu:full 1080x1920 safe=(60, 240, 1020, 1660) caption=(160, 1420, 920, 1640) cover=(1080, 1440) title<=20 len [30, 180]/900s -14.0 LUFS/-1.5 dBTPxiaohongshu:horizontal 1920x1080 safe=(280, 60, 1640, 1020) caption=(280, 880, 1640, 1020) cover=(1920, 1080) title<=20 len [30, 180]/900s -14.0 LUFS/-1.5 dBTPdouyin:vertical 1080x1920 safe=(60, 160, 930, 1480) caption=(180, 1240, 900, 1460) cover=(1080, 1920) title<=55 len [15, 60]/900s -14.0 LUFS/-1.5 dBTPdouyin:horizontal 1920x1080 safe=(96, 60, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=55 len [15, 60]/900s -14.0 LUFS/-1.5 dBTPwechat-channels:vertical 1080x1920 safe=(60, 200, 1020, 1460) caption=(60, 1200, 1020, 1420) cover=(1080, 1440) title<=16 len [15, 120]/28800s -14.0 LUFS/-1.5 dBTPwechat-channels:horizontal 1920x1080 safe=(96, 54, 1824, 1000) caption=(96, 870, 1824, 1000) cover=(1920, 1080) title<=16 len [15, 120]/28800s -14.0 LUFS/-1.5 dBTPbilibili:horizontal 1920x1080 safe=(96, 54, 1824, 1000) caption=(96, 870, 1824, 1000) cover=(1146, 717) title<=80 len [180, 900]/36000s -14.0 LUFS/-1.5 dBTPbilibili:vertical 1080x1920 safe=(60, 200, 930, 1500) caption=(150, 1260, 930, 1480) cover=(1080, 1440) title<=80 len [180, 900]/36000s -14.0 LUFS/-1.5 dBTPkuaishou:vertical 1080x1920 safe=(60, 160, 930, 1520) caption=(180, 1240, 900, 1460) cover=(1080, 1920) title<=0 len [15, 90]/900s -14.0 LUFS/-1.5 dBTPkuaishou:horizontal 1920x1080 safe=(96, 60, 1824, 990) caption=(96, 870, 1824, 990) cover=(1920, 1080) title<=0 len [15, 90]/900s -14.0 LUFS/-1.5 dBTPweibo:horizontal 1920x1080 safe=(96, 54, 1824, 1000) caption=(96, 870, 1824, 1000) cover=(1920, 1080) title<=30 len [30, 300]/900s -14.0 LUFS/-1.5 dBTPweibo:vertical 1080x1920 safe=(60, 180, 960, 1520) caption=(120, 1240, 960, 1460) cover=(1080, 1920) title<=30 len [30, 300]/900s -14.0 LUFS/-1.5 dBTPzhihu:horizontal 1920x1080 safe=(96, 54, 1824, 1000) caption=(96, 870, 1824, 1000) cover=(1920, 1080) title<=30 len [60, 600]/3600s -14.0 LUFS/-1.5 dBTPzhihu:vertical 1080x1920 safe=(60, 160, 960, 1560) caption=(120, 1240, 960, 1460) cover=(1080, 1920) title<=30 len [60, 600]/3600s -14.0 LUFS/-1.5 dBTPdailymotion:horizontal 1920x1080 safe=(96, 54, 1824, 1000) caption=(96, 870, 1824, 1000) cover=(1280, 720) title<=255 len [60, 900]/7200s -14.0 LUFS/-1.5 dBTPdailymotion:vertical 1080x1920 safe=(60, 160, 1020, 1620) caption=(60, 1300, 1020, 1520) cover=(1080, 1920) title<=255 len [60, 900]/7200s -14.0 LUFS/-1.5 dBTPkwai:vertical 1080x1920 safe=(60, 160, 930, 1480) caption=(150, 1240, 930, 1460) cover=(1080, 1920) title<=0 len [15, 60]/300s -14.0 LUFS/-1.5 dBTPvstudio.effects
Section titled “vstudio.effects”List and inspect the effect registry.
usage: python -m vstudio.effects [-h] [--write-md] [--check] [--show ID] [--list] [--engine {pil-frame,ffmpeg,hyperframes,html,audio}] [--category {camera,layout,cards,text,highlight,freeze,transitions,looks,audio,progress,covers}]
Effect registry: every visual / audio effect in video-studio as one declarative catalogue.
options: -h, --help show this help message and exit --write-md regenerate the block in references/EFFECTS.md --check verify every entry point --show ID --list --engine {pil-frame,ffmpeg,hyperframes,html,audio} --category {camera,layout,cards,text,highlight,freeze,transitions,looks,audio,progress,covers}vstudio.llm
Section titled “vstudio.llm”AI providers on this machine: list, route, auth, test.
usage: python -m vstudio.llm [-h] {providers,route,auth,test} ...
LLM / ASR / TTS providers on this machine
positional arguments: {providers,route,auth,test} providers list LLM, ASR and TTS providers and whether they work here route show which provider each task would use auth auth status | login | logout (see vstudio.llm_auth) test one tiny JSON round-trip
options: -h, --help show this help message and exitvstudio.retouch
Section titled “vstudio.retouch”Portrait retouch and makeup for photos and frames.
usage: python -m vstudio.retouch [-h] [--slim SLIM] [--eye EYE] [--eye-extra EYE_EXTRA] [--shine SHINE] [--shine-feather SHINE_FEATHER] [--smooth SMOOTH] [--light LIGHT] [--makeup MAKEUP] [--body BODY] [--pores PORES] [--tone TONE] [--blemish BLEMISH] [--undereye UNDEREYE] [--neck NECK] [--min-face MIN_FACE] [--natural-cap NATURAL_CAP] [--identity-guard IDENTITY_GUARD] [--lip LIP] [--blush BLUSH] [--brow BROW] [--liner LINER] [--shadow SHADOW] [--contour CONTOUR] [--highlight HIGHLIGHT] [--gloss GLOSS] [--preset {daily,glam,natural,none}] [--lip-shade LIP_SHADE] [--blush-shade BLUSH_SHADE] [--shadow-shade SHADOW_SHADE] [--liner-shade LINER_SHADE] [--glasses {auto,none,thin,thick}] [--faces {main,all}] [--face-strength FACE_STRENGTH] [--no-seg] [--no-region] inp out
Portrait retouch for covers and talking-head frames (stills and video).
positional arguments: inp out
options: -h, --help show this help message and exit --slim SLIM --eye EYE --eye-extra EYE_EXTRA --shine SHINE --shine-feather SHINE_FEATHER --smooth SMOOTH --light LIGHT --makeup MAKEUP --body BODY --pores PORES --tone TONE --blemish BLEMISH --undereye UNDEREYE --neck NECK --min-face MIN_FACE --natural-cap NATURAL_CAP --identity-guard IDENTITY_GUARD --lip LIP --blush BLUSH --brow BROW --liner LINER --shadow SHADOW --contour CONTOUR --highlight HIGHLIGHT --gloss GLOSS --preset {daily,glam,natural,none} --lip-shade LIP_SHADE shade name or #rrggbb --blush-shade BLUSH_SHADE shade name or #rrggbb --shadow-shade SHADOW_SHADE shade name or #rrggbb --liner-shade LINER_SHADE shade name or #rrggbb --glasses {auto,none,thin,thick} --faces {main,all} --face-strength FACE_STRENGTH comma list of per-face strengths, largest face first (e.g. 1,0.6) --no-seg landmark-only skin mask --no-region