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