code wiki / (root) / nx_twinface.nx

nx_twinface.nx source

↩ module page · 72 lines · 4197 B

1// nx_twinface.nx -- aesthetictwin AT35 (2026-09-17): render the estate's own generated face (an nx_persongen identity over 2// the inside-out nx_faceanat face, the sovereign SDF renderer with its eye, lash and lip materials, our PNG writer) to a still 3// the photo ruler can read, so the SAME instrument that measures a reference photograph measures the twin's render, and the 4// outside oracle can be run on the render as the render-side liar-killer. No photo input, no third party: a seed is the 5// whole identity. The render lives in nx_twinfit_lib (tw_render_png); this is the file-door CLI. 6// nx_twinface render <seed> <yaw> <out.png> -> the identity (seven morph percents), skin tone, frame, PNG bytes on disk 7// exit: 0 ok | 2 usage | 3 png not written 8// license_tier: ORIGINAL No hw writes (Rule 26). 9import "nx_syscalls.nx" 10import "nx_twinfit_lib.nx" 11 12const TF_EXIT_USAGE: i64 = 2 13const TF_EXIT_PNG: i64 = 3 14const TF_ARGC_RENDER: i64 = 5 15const TF_ARGC_GENOME: i64 = 12 16const TF_ARGC_FITFACE: i64 = 18 17const TF_ID_FIELDS: i64 = 7 // persongen_build writes seven morph percents: width, length, jaw, eyes, lips, nose, cheek 18 19func tf_usage() -> i64 { ri_puts("usage: nx_twinface render <seed> <yaw> <out.png>\n" as *u8); return TF_EXIT_USAGE } 20 21func main(argc: i64, argv: **u8) -> i64 { 22 if argc < TF_ARGC_RENDER { return tf_usage() } 23 if ri_streq(argv[1], "fitface" as *u8) == 1 { 24 // nx_twinface fitface <7 morph pcts> <6 eye genes> <yaw> <camz> <out.png>: the thirteen-gene vector a fit printed, rendered 25 if argc < TF_ARGC_FITFACE { return tf_usage() } 26 let fbase: i64 = sys_mmap(sdf_bytes()) as i64 27 let fga: *i64 = sys_mmap(TW_ALL_GENES * TW_I64) as *i64 28 let fskin: *i64 = sys_mmap(TW_SLOTS * TW_I64) as *i64 29 tw_skin_default(fskin) 30 var fi: i64 = 0 31 while fi < TW_ALL_GENES { fga[fi] = tw_atoi(argv[2 + fi]); fi = fi + 1 } 32 let fyaw: i64 = tw_atoi(argv[2 + TW_ALL_GENES]) 33 let fcamz: i64 = tw_atoi(argv[3 + TW_ALL_GENES]) 34 let fn: i64 = tw_render_all_png(fbase, fga, fskin, fyaw, fcamz, argv[4 + TW_ALL_GENES]) 35 tw_kv("TWINFACE fitface yaw=" as *u8, fyaw); tw_kv(" camz=" as *u8, fcamz); tw_kv(" png_bytes=" as *u8, fn); ri_puts("\n" as *u8) 36 if fn <= 0 { return TF_EXIT_PNG } 37 return 0 38 } 39 if ri_streq(argv[1], "genome" as *u8) == 1 { 40 // nx_twinface genome <w> <l> <j> <e> <p> <n> <c> <yaw> <camz> <out.png>: explicit percents, default tone, any camera distance 41 if argc < TF_ARGC_GENOME { return tf_usage() } 42 let gbase: i64 = sys_mmap(sdf_bytes()) as i64 43 let gg: *i64 = sys_mmap(TW_SLOTS * TW_I64) as *i64 44 let gskin: *i64 = sys_mmap(TW_SLOTS * TW_I64) as *i64 45 tw_skin_default(gskin) 46 var gi: i64 = 0 47 while gi < TF_ID_FIELDS { gg[gi] = tw_atoi(argv[2 + gi]); gi = gi + 1 } 48 let gyaw: i64 = tw_atoi(argv[2 + TF_ID_FIELDS]) 49 let gcamz: i64 = tw_atoi(argv[3 + TF_ID_FIELDS]) 50 let gn: i64 = tw_render_genome_png(gbase, gg, gskin, gyaw, gcamz, argv[4 + TF_ID_FIELDS]) 51 tw_kv("TWINFACE genome yaw=" as *u8, gyaw); tw_kv(" camz=" as *u8, gcamz); tw_kv(" png_bytes=" as *u8, gn); ri_puts("\n" as *u8) 52 if gn <= 0 { return TF_EXIT_PNG } 53 return 0 54 } 55 if ri_streq(argv[1], "render" as *u8) == 0 { return tf_usage() } 56 let seed: i64 = tw_atoi(argv[2]) 57 let yaw: i64 = tw_atoi(argv[3]) 58 let outp: *u8 = argv[4] 59 let base: i64 = sys_mmap(sdf_bytes()) as i64 60 let skin: *i64 = sys_mmap(TW_SLOTS * TW_I64) as *i64 61 let idv: *i64 = sys_mmap(TW_SLOTS * TW_I64) as *i64 62 let n: i64 = tw_render_png(base, seed, yaw, outp, skin, idv) 63 tw_kv("TWINFACE seed=" as *u8, seed); tw_kv(" yaw=" as *u8, yaw); tw_kv(" w=" as *u8, ww()); tw_kv(" h=" as *u8, hh()) 64 tw_kv(" skin=" as *u8, skin[TW_SKIN_SLOT_R]); tw_kv("," as *u8, skin[TW_SKIN_SLOT_G]); tw_kv("," as *u8, skin[TW_SKIN_SLOT_B]) 65 ri_puts(" identity_pct=" as *u8) 66 var i: i64 = 0 67 while i < TF_ID_FIELDS { if i > 0 { ri_puts("," as *u8) } ri_putn(idv[i]); i = i + 1 } 68 tw_kv(" png_bytes=" as *u8, n) 69 ri_puts("\n" as *u8) 70 if n <= 0 { return TF_EXIT_PNG } 71 return 0 72}