code wiki / (root) / nx_mesh_gen.nx

nx_mesh_gen.nx source

↩ module page · 347 lines · 18487 B

1// nx_mesh_gen.nx -- WORKER MESH R2: the SOVEREIGN end-to-end actuator. Retires the curl/base64 shell from the 2// dispatch loop. Runs on the orchestrator (NAS): given a prompt, it POSTs a gen job to a GPU worker over sovereign 3// TCP (nx_http_client), drains the OpenAI-compat response, extracts the base64 image, DECODES it (nx_base64), and 4// WRITES the PNG to the gallery docroot -- a complete NAS-organ -> worker -> gallery loop with ZERO shell. 5// 6// CLI: (no args) -> self-test GATE (b64 round-trip + JSON body build + response extraction) 7// gen <prompt> <outpath> -> live: POST to the gpu-image worker (laptop 5080), decode, write <outpath> 8// gen <prompt> <outpath> <a> <b> <c> <d> -> same, to an explicit worker ipv4 a.b.c.d:7861 9// The capability enforcement is nx_worker_dispatch's job (proven, deny-by-default); this is the ACTUATION it calls. 10// NO fake greens: the gate proves decode correctness + that the extractor pulls the value from a real JSON shape. 11// license_tier: ORIGINAL 12import "nx_syscalls.nx" 13import "nx_connect.nx" // bounded connect: a raw sys_connect hangs ~127s on a black-holed host 14import "nx_runtime.nx" 15import "nx_http_client.nx" 16import "nx_base64.nx" 17const MG_MAGIC_8192: i64 = 8192 18const MG_MAGIC_16384: i64 = 16384 19const MG_MAGIC_8388608: i64 = 8388608 20const MG_MAGIC_4096: i64 = 4096 21const MG_MAGIC_5080: i64 = 5080 22 23const MG_PORT: i64 = 7861 24const MG_RESP_CAP: i64 = 2097152 // 2 MB (image response ~550KB base64) 25 26func mg_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 27func mg_wn(fd: i64, v: i64) -> i64 { 28 let bb: *u8 = sys_mmap(28) 29 var m: i64 = v 30 if m < 0 { sys_write(fd, "-" as *u8, 1); m = 0 - m } 31 let tt: *u8 = sys_mmap(28) 32 var k: i64 = 0 33 if m == 0 { tt[0] = 48 as u8; k = 1 } 34 while m > 0 { tt[k] = (48 + (m - (m/10)*10)) as u8; m = m / 10; k = k + 1 } 35 var i: i64 = 0 36 while i < k { bb[i] = tt[k-1-i]; i = i + 1 } 37 sys_write(fd, bb, k) 38 return 0 39} 40func mg_p(s: *u8) -> i64 { return mg_w(1, s) } 41func mg_pn(v: i64) -> i64 { return mg_wn(1, v) } 42func mg_strlen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 43func mg_lit(buf: *u8, o: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { buf[o+i] = s[i]; i = i + 1 } return o + i } 44func mg_atoi(s: *u8) -> i64 { var v: i64 = 0; var i: i64 = 0; while s[i] != (0 as u8) { let c: i64 = s[i] as i64; if c >= 48 { if c <= 57 { v = v * 10 + (c - 48) } } i = i + 1 } return v } 45 46// build the OpenAI-compat gen body: {"prompt":"<p>","n":1,"size":"512x512","steps":8,"cfg_scale":1.0} 47// (emits the '"' byte as 34 -- string literals cannot safely carry '"' in nx_cc) 48func mg_body(buf: *u8, prompt: *u8) -> i64 { 49 var o: i64 = 0 50 buf[o] = 123 as u8; o = o + 1 // { 51 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, "prompt" as *u8); buf[o] = 34 as u8; o = o + 1; buf[o] = 58 as u8; o = o + 1 52 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, prompt); buf[o] = 34 as u8; o = o + 1; buf[o] = 44 as u8; o = o + 1 53 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, "n" as *u8); buf[o] = 34 as u8; o = o + 1; buf[o] = 58 as u8; o = o + 1; buf[o] = 49 as u8; o = o + 1; buf[o] = 44 as u8; o = o + 1 54 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, "size" as *u8); buf[o] = 34 as u8; o = o + 1; buf[o] = 58 as u8; o = o + 1 55 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, "512x512" as *u8);buf[o] = 34 as u8; o = o + 1; buf[o] = 44 as u8; o = o + 1 56 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, "steps" as *u8); buf[o] = 34 as u8; o = o + 1; buf[o] = 58 as u8; o = o + 1; buf[o] = 56 as u8; o = o + 1; buf[o] = 44 as u8; o = o + 1 57 buf[o] = 34 as u8; o = o + 1; o = mg_lit(buf, o, "cfg_scale" as *u8); buf[o] = 34 as u8; o = o + 1; buf[o] = 58 as u8; o = o + 1; buf[o] = 49 as u8; o = o + 1; buf[o] = 46 as u8; o = o + 1; buf[o] = 48 as u8; o = o + 1 58 buf[o] = 125 as u8; o = o + 1 // } 59 return o 60} 61 62func mg_find(buf: *u8, n: i64, pat: *u8, pl: i64) -> i64 { 63 var i: i64 = 0 64 while i + pl <= n { 65 var k: i64 = 0 66 var hit: i64 = 1 67 while k < pl { if buf[i+k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } } 68 if hit == 1 { return i + pl } 69 i = i + 1 70 } 71 return 0 - 1 72} 73// extract the value of the "b64_json" field: sets vstartbox/vlenbox to the base64 slice. returns 1/0. 74func mg_extract_b64(buf: *u8, n: i64, vstartbox: *i64, vlenbox: *i64) -> i64 { 75 let p: i64 = mg_find(buf, n, "b64_json" as *u8, 8) 76 if p < 0 { return 0 } 77 var i: i64 = p 78 var col: i64 = 0 - 1 79 while i < n { if buf[i] == (58 as u8) { col = i; i = n } else { i = i + 1 } } // find ':' 80 if col < 0 { return 0 } 81 var j: i64 = col + 1 82 while j < n { if buf[j] == (34 as u8) { i = j; j = n } else { j = j + 1 } } // value-open quote at i 83 let vstart: i64 = i + 1 84 var q: i64 = vstart 85 var vend: i64 = 0 - 1 86 while q < n { if buf[q] == (34 as u8) { vend = q; q = n } else { q = q + 1 } } 87 if vend < 0 { return 0 } 88 vstartbox[0] = vstart 89 vlenbox[0] = vend - vstart 90 return 1 91} 92 93func mg_drain(fd: i64, buf: *u8, cap: i64) -> i64 { 94 var off: i64 = 0 95 var keep: i64 = 1 96 while keep == 1 { 97 if off >= cap { keep = 0 } else { 98 let r: i64 = sys_read(fd, (buf as i64 + off) as *u8, cap - off) 99 if r <= 0 { keep = 0 } else { off = off + r } 100 } 101 } 102 return off 103} 104 105// live: POST prompt to a.b.c.d:7861 /v1/images/generations, decode the returned image, write to outpath. 106// returns PNG bytes written / negative error. 107func mg_gen(a: i64, b: i64, c: i64, d: i64, prompt: *u8, outpath: *u8) -> i64 { 108 let sa: *u8 = sys_mmap(16) 109 nx_http_client_sockaddr_ipv4(sa, a, b, c, d, MG_PORT) 110 let fd: i64 = sys_socket(AF_INET, SOCK_STREAM, 0) 111 if fd < 0 { return 0 - 1 } 112 if nx_connect_bounded(fd, sa, 16, NX_CONN_DEFAULT_MS) < 0 { sys_close(fd); return 0 - 2 } 113 let body: *u8 = sys_mmap(MG_MAGIC_8192) 114 let bl: i64 = mg_body(body, prompt) 115 let req: *u8 = sys_mmap(MG_MAGIC_16384) 116 let rl: i64 = nx_http_client_build_request_post("/v1/images/generations" as *u8, 22, "worker" as *u8, 6, "application/json" as *u8, 16, body, bl, req) 117 sys_write(fd, req, rl) 118 let resp: *u8 = sys_mmap(MG_RESP_CAP) 119 let got: i64 = mg_drain(fd, resp, MG_RESP_CAP) 120 sys_close(fd) 121 if got <= 0 { return 0 - 3 } 122 let vsb: *i64 = sys_mmap(8) as *i64 123 let vlb: *i64 = sys_mmap(8) as *i64 124 if mg_extract_b64(resp, got, vsb, vlb) == 0 { return 0 - 4 } 125 let png: *u8 = sys_mmap(MG_RESP_CAP) 126 let pngn: i64 = b64_decode((resp as i64 + vsb[0]) as *u8, vlb[0], png) 127 if pngn <= 0 { return 0 - 5 } 128 let wfd: i64 = sys_openat_wr(outpath, 0x1a4) 129 if wfd < 0 { return 0 - 6 } 130 sys_write(wfd, png, pngn) 131 sys_close(wfd) 132 // report PNG magic 133 mg_p(" response=" as *u8); mg_pn(got); mg_p(" bytes, b64_len=" as *u8); mg_pn(vlb[0]); mg_p(", png=" as *u8); mg_pn(pngn); mg_p(" bytes, magic=" as *u8) 134 mg_pn(png[0] as i64); mg_p(" " as *u8); mg_pn(png[1] as i64); mg_p(" " as *u8); mg_pn(png[2] as i64); mg_p(" " as *u8); mg_pn(png[3] as i64); mg_p("\n" as *u8) 135 return pngn 136} 137 138// ---- BATCHING DEPTH: n=K batched execution. POST "n":K -> K images in one round-trip -> decode + publish each. 139// This connects nx_mesh_batch's batch-formation policy to REAL execution (a batch of K = one worker call, K images). ---- 140func mg_num_buf(buf: *u8, o: i64, v: i64) -> i64 { 141 if v == 0 { buf[o] = 48 as u8; return o + 1 } 142 let tt: *u8 = sys_mmap(28) 143 var m: i64 = v 144 var k: i64 = 0 145 while m > 0 { tt[k] = (48 + (m - (m/10)*10)) as u8; m = m / 10; k = k + 1 } 146 var j: i64 = 0 147 while j < k { buf[o+j] = tt[k-1-j]; j = j + 1 } 148 return o + k 149} 150func mg_body_n(buf: *u8, prompt: *u8, nval: i64) -> i64 { 151 var o: i64 = 0 152 buf[o] = 123 as u8; o = o + 1 153 buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,"prompt" as *u8); buf[o]=34 as u8;o=o+1; buf[o]=58 as u8;o=o+1 154 buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,prompt); buf[o]=34 as u8;o=o+1; buf[o]=44 as u8;o=o+1 155 buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,"n" as *u8); buf[o]=34 as u8;o=o+1; buf[o]=58 as u8;o=o+1; o=mg_num_buf(buf,o,nval); buf[o]=44 as u8;o=o+1 156 buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,"size" as *u8); buf[o]=34 as u8;o=o+1; buf[o]=58 as u8;o=o+1; buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,"512x512" as *u8); buf[o]=34 as u8;o=o+1; buf[o]=44 as u8;o=o+1 157 buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,"steps" as *u8); buf[o]=34 as u8;o=o+1; buf[o]=58 as u8;o=o+1; buf[o]=56 as u8;o=o+1; buf[o]=44 as u8;o=o+1 158 buf[o]=34 as u8;o=o+1; o=mg_lit(buf,o,"cfg_scale" as *u8); buf[o]=34 as u8;o=o+1; buf[o]=58 as u8;o=o+1; buf[o]=49 as u8;o=o+1; buf[o]=46 as u8;o=o+1; buf[o]=48 as u8;o=o+1 159 buf[o] = 125 as u8; o = o + 1 160 return o 161} 162func mg_find_from(buf: *u8, n: i64, pat: *u8, pl: i64, start: i64) -> i64 { 163 var i: i64 = start 164 while i + pl <= n { 165 var k: i64 = 0 166 var hit: i64 = 1 167 while k < pl { if buf[i+k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } } 168 if hit == 1 { return i + pl } 169 i = i + 1 170 } 171 return 0 - 1 172} 173// extract the b64_json value at/after `start`; sets vsb/vlb; returns vend (closing-quote idx) for next search, or -1. 174func mg_extract_from(buf: *u8, n: i64, start: i64, vsb: *i64, vlb: *i64) -> i64 { 175 let p: i64 = mg_find_from(buf, n, "b64_json" as *u8, 8, start) 176 if p < 0 { return 0 - 1 } 177 var i: i64 = p 178 var col: i64 = 0 - 1 179 while i < n { if buf[i] == (58 as u8) { col = i; i = n } else { i = i + 1 } } 180 if col < 0 { return 0 - 1 } 181 var j: i64 = col + 1 182 while j < n { if buf[j] == (34 as u8) { i = j; j = n } else { j = j + 1 } } 183 let vstart: i64 = i + 1 184 var q: i64 = vstart 185 var vend: i64 = 0 - 1 186 while q < n { if buf[q] == (34 as u8) { vend = q; q = n } else { q = q + 1 } } 187 if vend < 0 { return 0 - 1 } 188 vsb[0] = vstart; vlb[0] = vend - vstart 189 return vend 190} 191func mg_genbatch(a: i64, b: i64, c: i64, d: i64, prompt: *u8, kk: i64, outprefix: *u8) -> i64 { 192 let sa: *u8 = sys_mmap(16) 193 nx_http_client_sockaddr_ipv4(sa, a, b, c, d, MG_PORT) 194 let fd: i64 = sys_socket(AF_INET, SOCK_STREAM, 0) 195 if fd < 0 { return 0 - 1 } 196 if nx_connect_bounded(fd, sa, 16, NX_CONN_DEFAULT_MS) < 0 { sys_close(fd); return 0 - 2 } 197 let body: *u8 = sys_mmap(MG_MAGIC_8192) 198 let bl: i64 = mg_body_n(body, prompt, kk) 199 let req: *u8 = sys_mmap(MG_MAGIC_16384) 200 let rl: i64 = nx_http_client_build_request_post("/v1/images/generations" as *u8, 22, "worker" as *u8, 6, "application/json" as *u8, 16, body, bl, req) 201 sys_write(fd, req, rl) 202 let resp: *u8 = sys_mmap(MG_MAGIC_8388608) // 8MB: holds many images 203 let got: i64 = mg_drain(fd, resp, MG_MAGIC_8388608) 204 sys_close(fd) 205 if got <= 0 { return 0 - 3 } 206 let vsb: *i64 = sys_mmap(8) as *i64 207 let vlb: *i64 = sys_mmap(8) as *i64 208 let png: *u8 = sys_mmap(MG_RESP_CAP) 209 var written: i64 = 0 210 var cur: i64 = 0 211 var go: i64 = 1 212 while go == 1 { 213 let vend: i64 = mg_extract_from(resp, got, cur, vsb, vlb) 214 if vend < 0 { go = 0 } else { 215 let pngn: i64 = b64_decode((resp as i64 + vsb[0]) as *u8, vlb[0], png) 216 if pngn > 0 { 217 let op: *u8 = sys_mmap(512) 218 var o2: i64 = mg_lit(op, 0, outprefix) 219 op[o2] = 95 as u8; o2 = o2 + 1 220 o2 = mg_num_buf(op, o2, written) 221 o2 = mg_lit(op, o2, ".png" as *u8) 222 op[o2] = 0 as u8 223 let wfd: i64 = sys_openat_wr(op, 0x1a4) 224 if wfd >= 0 { sys_write(wfd, png, pngn); sys_close(wfd); written = written + 1 } 225 } 226 cur = vend + 1 227 } 228 } 229 mg_p(" batched n=" as *u8); mg_pn(kk); mg_p(" response=" as *u8); mg_pn(got); mg_p(" bytes, images decoded+written=" as *u8); mg_pn(written); mg_p("\n" as *u8) 230 return written 231} 232 233func mg_gate() -> i64 { 234 mg_p("=== nx_mesh_gen: sovereign mesh actuator (POST -> decode -> gallery, zero shell) ===\n" as *u8) 235 // T1 base64 decode round-trip: "SGVsbG8=" -> "Hello" 236 let out1: *u8 = sys_mmap(16) 237 let n1: i64 = b64_decode("SGVsbG8=" as *u8, 8, out1) 238 var t1: i64 = 0 239 if n1 == 5 { if out1[0]==72 { if out1[1]==101 { if out1[4]==111 { t1 = 1 } } } } // H e ... o 240 // T2 body build: starts '{', ends '}', contains "prompt" 241 let bod: *u8 = sys_mmap(MG_MAGIC_4096) 242 let bl: i64 = mg_body(bod, "hi" as *u8) 243 var t2: i64 = 0 244 if bod[0] == (123 as u8) { if bod[bl-1] == (125 as u8) { if mg_find(bod, bl, "prompt" as *u8, 6) >= 0 { t2 = 1 } } } 245 // T3 extraction from a real JSON shape: build {..."b64_json":"SGVsbG8="...} then extract+decode -> "Hello" 246 let syn: *u8 = sys_mmap(128) 247 var o: i64 = 0 248 o = mg_lit(syn, o, "{" as *u8) 249 syn[o]=34;o=o+1; o = mg_lit(syn, o, "created" as *u8); syn[o]=34;o=o+1; syn[o]=58;o=o+1; syn[o]=49;o=o+1; syn[o]=44;o=o+1 250 syn[o]=34;o=o+1; o = mg_lit(syn, o, "b64_json" as *u8); syn[o]=34;o=o+1; syn[o]=58;o=o+1; syn[o]=34;o=o+1 251 o = mg_lit(syn, o, "SGVsbG8=" as *u8); syn[o]=34;o=o+1; syn[o]=125;o=o+1; syn[o]=0 252 let vsb: *i64 = sys_mmap(8) as *i64 253 let vlb: *i64 = sys_mmap(8) as *i64 254 var t3: i64 = 0 255 if mg_extract_b64(syn, o, vsb, vlb) == 1 { 256 let dout: *u8 = sys_mmap(16) 257 let dn: i64 = b64_decode((syn as i64 + vsb[0]) as *u8, vlb[0], dout) 258 if dn == 5 { if dout[0]==72 { if dout[4]==111 { t3 = 1 } } } 259 } 260 // neg-control: a response with NO b64_json field -> extraction fails cleanly (no false value) 261 let neg: *u8 = sys_mmap(64) 262 let negn: i64 = mg_lit(neg, 0, "server_error no image here" as *u8) 263 var neg1: i64 = 0 264 if mg_extract_b64(neg, negn, vsb, vlb) == 0 { neg1 = 1 } 265 // T4 BATCH extract: a 3-entry data array -> iterate mg_extract_from -> exactly 3 values, each decodes to "Hello" 266 let syn3: *u8 = sys_mmap(256) 267 var o3: i64 = 0 268 syn3[o3]=123 as u8; o3=o3+1 269 var e: i64 = 0 270 while e < 3 { 271 syn3[o3]=34 as u8;o3=o3+1; o3=mg_lit(syn3,o3,"b64_json" as *u8); syn3[o3]=34 as u8;o3=o3+1; syn3[o3]=58 as u8;o3=o3+1; syn3[o3]=34 as u8;o3=o3+1 272 o3=mg_lit(syn3,o3,"SGVsbG8=" as *u8); syn3[o3]=34 as u8;o3=o3+1; syn3[o3]=44 as u8;o3=o3+1 273 e = e + 1 274 } 275 syn3[o3]=125 as u8; o3=o3+1; syn3[o3]=0 as u8 276 var cnt: i64 = 0 277 var cur3: i64 = 0 278 var go3: i64 = 1 279 while go3 == 1 { 280 let ve: i64 = mg_extract_from(syn3, o3, cur3, vsb, vlb) 281 if ve < 0 { go3 = 0 } else { 282 let d3: *u8 = sys_mmap(16) 283 let dn3: i64 = b64_decode((syn3 as i64 + vsb[0]) as *u8, vlb[0], d3) 284 if dn3 == 5 { if d3[0]==72 { cnt = cnt + 1 } } 285 cur3 = ve + 1 286 } 287 } 288 var t4: i64 = 0 289 if cnt == 3 { t4 = 1 } 290 291 mg_p(" T1 base64 decode round-trip: " as *u8); mg_pn(t1) 292 mg_p(" | T2 JSON body build: " as *u8); mg_pn(t2) 293 mg_p(" | T3 extract+decode from response shape: " as *u8); mg_pn(t3) 294 mg_p(" | T4 batch extract 3-image array: " as *u8); mg_pn(t4) 295 mg_p(" | neg1 no-field-fails-clean: " as *u8); mg_pn(neg1); mg_p("\n" as *u8) 296 297 var pass: i64 = 0 298 if t1==1 { if t2==1 { if t3==1 { if t4==1 { if neg1==1 { pass = 1 } } } } } 299 if pass == 1 { mg_p("MESHGENGATE verdict=GREEN (decode correct; body built; extractor pulls value; liar-killed)\n" as *u8); return 0 } 300 mg_p("MESHGENGATE verdict=RED\n" as *u8) 301 return 1 302} 303 304func main(argc: i64, argv: *i64) -> i64 { 305 if argc >= 2 { 306 let cmd: *u8 = argv[1] as *u8 307 var same: i64 = 1 308 var qi: i64 = 0 309 let g: *u8 = "gen" as *u8 310 while g[qi] != (0 as u8) { if cmd[qi] != g[qi] { same = 0 } qi = qi + 1 } 311 if cmd[qi] != (0 as u8) { same = 0 } 312 if same == 1 { 313 if argc < 4 { mg_w(2, "usage: nx_mesh_gen gen <prompt> <outpath> [a b c d]\n" as *u8); return 2 } 314 let prompt: *u8 = argv[2] as *u8 315 let outpath: *u8 = argv[3] as *u8 316 var a: i64 = 192; var b: i64 = 168; var c: i64 = 8; var d: i64 = 193 // default gpu-image worker (laptop MG_MAGIC_5080) 317 if argc >= 8 { a = mg_atoi(argv[4] as *u8); b = mg_atoi(argv[5] as *u8); c = mg_atoi(argv[6] as *u8); d = mg_atoi(argv[7] as *u8) } 318 mg_p("mesh gen -> worker " as *u8); mg_pn(a); mg_p("." as *u8); mg_pn(b); mg_p("." as *u8); mg_pn(c); mg_p("." as *u8); mg_pn(d); mg_p(":7861\n" as *u8) 319 let r: i64 = mg_gen(a, b, c, d, prompt, outpath) 320 if r > 0 { mg_p(" WROTE " as *u8); mg_pn(r); mg_p(" bytes -> " as *u8); mg_p(outpath); mg_p(" (sovereign: POST+decode+write, no shell)\n" as *u8); return 0 } 321 mg_p(" FAIL code=" as *u8); mg_pn(r); mg_p(" (worker offline? -3=no response, -4=no image field)\n" as *u8) 322 return 4 323 } 324 // genbatch <n> <prompt> <outprefix> [a b c d] -- n=K batched execution, K images in ONE round-trip 325 var gb: i64 = 1 326 var gi: i64 = 0 327 let gbs: *u8 = "genbatch" as *u8 328 while gbs[gi] != (0 as u8) { if cmd[gi] != gbs[gi] { gb = 0 } gi = gi + 1 } 329 if cmd[gi] != (0 as u8) { gb = 0 } 330 if gb == 1 { 331 if argc < 5 { mg_w(2, "usage: nx_mesh_gen genbatch <n> <prompt> <outprefix> [a b c d]\n" as *u8); return 2 } 332 let kk: i64 = mg_atoi(argv[2] as *u8) 333 let prompt2: *u8 = argv[3] as *u8 334 let outpref: *u8 = argv[4] as *u8 335 var a2: i64 = 192; var b2: i64 = 168; var c2: i64 = 8; var d2: i64 = 193 336 if argc >= 9 { a2 = mg_atoi(argv[5] as *u8); b2 = mg_atoi(argv[6] as *u8); c2 = mg_atoi(argv[7] as *u8); d2 = mg_atoi(argv[8] as *u8) } 337 mg_p("mesh genbatch n=" as *u8); mg_pn(kk); mg_p(" -> worker " as *u8); mg_pn(a2); mg_p("." as *u8); mg_pn(b2); mg_p("." as *u8); mg_pn(c2); mg_p("." as *u8); mg_pn(d2); mg_p(":7861\n" as *u8) 338 let rb: i64 = mg_genbatch(a2, b2, c2, d2, prompt2, kk, outpref) 339 if rb > 0 { mg_p(" BATCH OK: " as *u8); mg_pn(rb); mg_p(" images from ONE worker round-trip -> " as *u8); mg_p(outpref); mg_p("_0.." as *u8); mg_pn(rb-1); mg_p(".png (sovereign, zero shell)\n" as *u8); return 0 } 340 mg_p(" BATCH FAIL code=" as *u8); mg_pn(rb); mg_p("\n" as *u8) 341 return 4 342 } 343 mg_w(2, "usage: nx_mesh_gen gen|genbatch ... (no args = gate)\n" as *u8) 344 return 2 345 } 346 return mg_gate() 347}