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}