code wiki / (root) / nx_manga_charsheet.nx

nx_manga_charsheet.nx

buildroot/runtime/nx_manga_charsheet.nx

14753 B320 linesdepth 5pulls 6 transitivereach 0 importersview sourcekind tooltopic manga
docsdependenciesstructsconstsfunctions

about

nx_manga_charsheet.nx -- R4 of the mangagen lane (comparewatch- contract mangagen_mcs_sheet_emit): a CHARACTER SHEET. Composes four incumbents by forking them, and writes no renderer, no compositor and no judge of its own: nx_anat_sov one view per row <mesh> <mode> <eye C|L|R> <W> <H> <out.png> nx_contactsheet the grid <dir> <out.png> <tile> <cols> nx_charjudge per-cell identity <cell.png> <label> nx_headcrop (caller's choice) bands a mesh to the head before the sweep THE DONE-RULE, pre-declared on /compare/mangagen before this organ existed: "Legality-checked pose sweep, renders, sheet grid; identity judged per cell." HONEST REPORTING: face_axis is PRINTED for every cell, never suppressed and never floored away. ⚠RENDER SIZE IS A JUDGE PARAMETER, MEASURED 2026-08-14, AND IT CORRECTED ME. I first saw face_axis 0 at 320x480, at skin 512x768 and on a head-cropped mesh, and concluded the model had no face. All three shared a confound -- every one was at least 320 wide. At 256x384 the SAME mesh judges face_axis 1000 and CHARJUDGE 294. The face was there; the judge stops reporting it above roughly 320 px wide. So MCS_RENDER_W/H sit inside the range where the judge actually measures, and that is a deliberate, written-down choice rather than a lucky default. Filed as a judge-scale debt. usage: nx_manga_charsheet <mesh.nxmesh> <sheet.conf> <outdir> <out.png> [tile] [cols] sheet.conf rows: view|<mode>|<eye C|L|R>|<label> license_tier: ORIGINAL expect_exit: 0

dependencies 3 imports · 0 importers

nx_str.nx nx_syscalls.nx nx_tool_run.nx nx_manga_charsheet.nx

imports: nx_str.nxnx_syscalls.nxnx_tool_run.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main mcs_puts sys_write nx_str_len sys_exit mcs_exists sys_openat_rd sys_close sys_mmap nxa_die sys_write ↻ sys_exit ↻ nxa_lock_take nxa_lock_addr sys_write ↻ nxa_lock_give nxa_lock_addr ↻ nxa_report_overrun sys_write ↻ nxa_dump_printable sys_write ↻ nxa_dump_sizes sys_write ↻ mcs_read sys_openat_rd ↻ sys_read sys_close ↻ mcs_atoi mcs_pi sys_mmap ↻ sys_write ↻ mcs_sheet_emit sys_mmap ↻ mcs_num sys_mmap ↻ sys_mkdir mcs_mode_ok nx_str_eq mcs_puts ↻ mcs_pi ↻

structs

none

consts

23const MCS_MAGIC_1024: i64 = 1024
24const MCS_CAP: i64 = 65536
25const MCS_MAXVIEW: i64 = 32
26const MCS_RENDER_W: i64 = 256
27const MCS_RENDER_H: i64 = 384
28const MCS_TILE_DEFAULT: i64 = 192
29const MCS_COLS_DEFAULT: i64 = 4
30const MCS_ANAT: *u8 = "/volume1/homes/elderwesto/nishihost/nx_anat_sov.elf"
31const MCS_SHEET: *u8 = "/volume1/homes/elderwesto/nishihost/nx_contactsheet.elf"
32const MCS_JUDGE: *u8 = "/volume1/homes/elderwesto/nishihost/nx_charjudge.elf"

functions

33func mcs_puts(s: *u8) -> i64 { sys_write(1, s, nx_str_len(s)); return 0 }
34func mcs_pi(v: i64) -> i64
47func mcs_atoi(s: *u8) -> i64
called by 1: main
57func mcs_cat(dst: *u8, off: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { dst[off+i] = s[i]; i = i + 1 } return off + i }
called by 1: mcs_sheet_emit
58func mcs_num(dst: *u8, off: i64, v: i64) -> i64
called by 1: mcs_sheet_emit calls 1: sys_mmap
73func mcs_mode_ok(m: *u8) -> i64
called by 1: mcs_sheet_emit calls 1: nx_str_eq
84func mcs_exists(p: *u8) -> i64
90func mcs_read(path: *u8, buf: *u8, cap: i64) -> i64
called by 1: main calls 3: sys_openat_rdsys_readsys_close
101func mcs_json_int(buf: *u8, n: i64, key: *u8, miss: i64) -> i64
called by 1: mcs_sheet_emit calls 1: nx_str_len
137func mcs_sheet_emit(mesh: *u8, nviews: i64, modes: *i64, eyes: *i64, labels: *i64, dir: *u8, outp: *u8, tile: i64, cols: i64) -> i64
246func main(argc: i64, argv: *i64) -> i64