1use 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}