Skip to main content

oxihuman_cli/
help.rs

1// Copyright (C) 2026 COOLJAPAN OU (Team KitaSan)
2// SPDX-License-Identifier: Apache-2.0
3
4//! CLI help text printer.
5
6use oxihuman_morph::presets::BodyPreset;
7use oxihuman_morph::ExpressionPreset;
8
9pub fn print_help() {
10    println!("OxiHuman CLI v0.1.0 — Copyright (C) 2026 COOLJAPAN OU (Team KitaSan)");
11    println!();
12    println!("SUBCOMMANDS:");
13    println!("  generate      Build a morphed .glb file");
14    println!("  pack-build    Scan targets directory and build manifest");
15    println!("  validate      Validate a single .target file or a pack manifest");
16    println!("  info          Print mesh/GLB/manifest info");
17    println!("  session       Print info about a saved session JSON");
18    println!("  stats         Parse an OBJ file and print mesh statistics");
19    println!("  workspace     Print workspace/build info (version, crates, features)");
20    println!("  quantize      Quantize a base OBJ mesh into a compact QMSH binary");
21    println!("  morph-export  Export morph targets directory to OXMD binary format");
22    println!("  zip-pack      Pack base mesh + targets into a self-contained ZIP");
23    println!("  stl           Export mesh to STL (ASCII or binary)");
24    println!("  collada       Export mesh to COLLADA (.dae)");
25    println!("  gltf-sep      Export mesh to glTF + separate .bin file");
26    println!("  svg           Export mesh wireframe/UV to SVG");
27    println!("  lod-export    Export LOD pack (multiple decimation levels)");
28    println!("  variant-pack  Export multiple character variants as a named pack");
29    println!("  report        Generate an HTML pipeline report");
30    println!("  asset-bundle  Pack base mesh + targets into an OXB asset bundle");
31    println!("  anim-bake     Bake animation cache from params JSON array to PC2/MDD");
32    println!("  stream-export Stream-export mesh positions in chunks");
33    println!("  plugin-list   List built-in plugin descriptors");
34    println!("  remesh              Remesh an OBJ (isotropic, stub)");
35    println!("  physics-export      Export physics scene (gltf-physics or openxr)");
36    println!("  camera-info         Print default camera rig JSON");
37    println!("  pack-dist-manifest  Generate SHA-256 distribution manifest for a pack directory");
38    println!("  pack-verify-dist    Verify a pack directory against a distribution manifest");
39    println!("  pack-wizard         Interactive wizard to build an .oxp asset pack step by step");
40    println!();
41    println!("GENERATE OPTIONS:");
42    println!("  --base <PATH>            Base .obj mesh file (required)");
43    println!("  --targets <DIR>          Directory of .target morph files");
44    println!("  --params <JSON|PATH>     Inline JSON or path to params JSON file");
45    println!("  --preset <NAME>          Body preset (average/athletic/slender/heavy/tall/petite/senior/child)");
46    println!(
47        "  --expression <NAME>      Expression preset (neutral/smile/frown/surprised/angry/sad)"
48    );
49    println!("  --output <PATH>          Output .glb file (required)");
50    println!("  --output-obj <PATH>      Also export as Wavefront .obj");
51    println!("  --max-targets <N>        Limit targets loaded (default: all)");
52    println!("  --strict                 Use strict policy profile");
53    println!("  --measurements           Print body measurements JSON to stdout");
54    println!("  --save-session <PATH>    Save current params as a session JSON");
55    println!("  --load-session <PATH>    Load params from a session JSON file");
56    println!("  --quantize <PATH>        Also export a quantized QMSH binary");
57    println!();
58    println!("SESSION OPTIONS:");
59    println!("  <FILE>                   Path to session .json file");
60    println!();
61    println!("PACK-BUILD OPTIONS:");
62    println!("  --targets <DIR>          Targets directory to scan (required)");
63    println!("  --output <PATH>          Output manifest .toml file");
64    println!("  --max-targets <N>        Limit files scanned");
65    println!();
66    println!("VALIDATE OPTIONS:");
67    println!("  <FILE>                   Path to .target file");
68    println!("  --pack <MANIFEST>        Path to pack manifest .toml file");
69    println!();
70    println!("INFO OPTIONS:");
71    println!("  <FILE>                   Path to .glb, .obj, or .toml manifest");
72    println!();
73    println!("STATS OPTIONS:");
74    println!("  <FILE>                   Path to Wavefront .obj file (required)");
75    println!("  --full                   Show full statistics (aspect ratios, face area range)");
76    println!("  --json                   Output as JSON instead of human-readable text");
77    println!();
78    println!("PRESETS:     {}", BodyPreset::all_names().join(", "));
79    println!("EXPRESSIONS: {}", ExpressionPreset::all_names().join(", "));
80    println!();
81    println!("PROXIES OPTIONS:");
82    println!("  --base <PATH>            Wavefront .obj mesh file (required)");
83    println!("  --output <PATH>          Write JSON output to file (default: stdout)");
84    println!("  --json                   Force JSON output (always on for this command)");
85    println!();
86    println!("QUANTIZE OPTIONS:");
87    println!("  --base <PATH>            Base .obj mesh file (required)");
88    println!("  --output <PATH>          Output .qmsh binary file (required)");
89    println!("  --stats                  Print quantization statistics to stdout");
90    println!();
91    println!("MORPH-EXPORT OPTIONS:");
92    println!("  --base <PATH>            Base .obj mesh file (required)");
93    println!("  --targets <DIR>          Directory of .target morph files (required)");
94    println!("  --output <PATH>          Output .oxmd binary file (required)");
95    println!("  --max-targets <N>        Limit number of targets exported (default: all)");
96    println!();
97    println!("ZIP-PACK OPTIONS:");
98    println!("  --base <PATH>            Base .obj mesh file (required)");
99    println!("  --targets <DIR>          Directory of .target morph files (required)");
100    println!("  --output <PATH>          Output .zip archive file (required)");
101    println!();
102    println!("STL OPTIONS:");
103    println!("  --base <PATH>            Base .obj mesh file (required)");
104    println!("  --output <PATH>          Output .stl file (required)");
105    println!("  --binary                 Write binary STL (default: ASCII)");
106    println!("  --targets <DIR>          Directory of .target morph files");
107    println!("  --params <JSON|PATH>     Inline JSON or path to params JSON file");
108    println!("  --preset <NAME>          Body preset name");
109    println!();
110    println!("COLLADA OPTIONS:");
111    println!("  --base <PATH>            Base .obj mesh file (required)");
112    println!("  --output <PATH>          Output .dae file (required)");
113    println!("  --targets <DIR>          Directory of .target morph files");
114    println!("  --params <JSON|PATH>     Inline JSON or path to params JSON file");
115    println!("  --preset <NAME>          Body preset name");
116    println!("  --author <STRING>        Author metadata string (default: OxiHuman)");
117    println!();
118    println!("GLTF-SEP OPTIONS:");
119    println!("  --base <PATH>            Base .obj mesh file (required)");
120    println!("  --output <PATH>          Output .gltf file (required)");
121    println!("  --bin <PATH>             Separate .bin path (default: same stem + .bin)");
122    println!("  --targets <DIR>          Directory of .target morph files");
123    println!("  --params <JSON|PATH>     Inline JSON or path to params JSON file");
124    println!();
125    println!("SVG OPTIONS:");
126    println!("  --base <PATH>            Base .obj mesh file (required)");
127    println!("  --output <PATH>          Output .svg file (required)");
128    println!("  --projection <front|side|top>  Projection axis (default: front)");
129    println!("  --uv                     Export UV map instead of projected wireframe");
130    println!("  --width <N>              Canvas width in pixels (default: 800)");
131    println!("  --height <N>             Canvas height in pixels (default: 600)");
132    println!();
133    println!("LOD-EXPORT OPTIONS:");
134    println!("  --base <PATH>            Base .obj mesh file (required)");
135    println!("  --output-dir <DIR>       Output directory for LOD GLBs (required)");
136    println!("  --targets <DIR>          Directory of .target morph files");
137    println!("  --params <JSON|PATH>     Inline JSON or path to params JSON file");
138    println!("  --preset <NAME>          Body preset name");
139    println!("  --levels <N>             Number of LOD levels (default: 3, uses built-in)");
140    println!();
141    println!("VARIANT-PACK OPTIONS:");
142    println!("  --params-list <JSON_FILE> JSON array of param objects (required)");
143    println!("  --base <PATH>            Base .obj mesh file (required)");
144    println!("  --targets <DIR>          Directory of .target morph files");
145    println!("  --output-dir <DIR>       Output directory for the pack (required)");
146    println!("  --pack-name <NAME>       Pack name (default: oxihuman_variants)");
147    println!();
148    println!("REPORT OPTIONS:");
149    println!("  --base <PATH>            Base .obj mesh file (required)");
150    println!("  --output <HTML>          Output .html report file (required)");
151    println!("  --targets <DIR>          Directory of .target morph files (optional)");
152    println!("  --pack <MANIFEST>        Path to manifest JSON file (optional)");
153    println!("  --title <STRING>         Report title (default: OxiHuman Report)");
154    println!();
155    println!("ASSET-BUNDLE OPTIONS:");
156    println!("  --base <PATH>            Base .obj mesh file (required)");
157    println!("  --targets <DIR>          Directory of .target morph files (required)");
158    println!("  --output <BUNDLE>        Output .oxb bundle file (required)");
159    println!("  --manifest <TOML>        Optional manifest TOML file");
160    println!();
161    println!("PACK-DIST-MANIFEST OPTIONS:");
162    println!("  --pack-dir <DIR>         Directory to scan (required)");
163    println!();
164    println!("PACK-VERIFY-DIST OPTIONS:");
165    println!("  --manifest <FILE>        Distribution manifest JSON file (required)");
166    println!("  --pack-dir <DIR>         Pack directory to verify (required)");
167}