code wiki / (root) / nx_photomark.nx

nx_photomark.nx

buildroot/runtime/nx_photomark.nx

11887 B155 linesdepth 11pulls 49 transitivereach 0 importersview sourcekind tool
docsdependenciesstructsconstsfunctions

about

nx_photomark.nx -- CLI over nx_photomark_lib (aesthetictwin AT4 / AT23 / AT30 / AT31, 2026-09-16): landmarks and scale-free face axes MEASURED from a mirrored photograph, written onto a twin card with a side per eye, and the referee that scores the ruler against the outside oracle rows. nx_photomark measure <jpeg|png> -> codec, route, face box, eye bands, both canthi of each eye, roll, tilt per side (raw and roll-corrected), canon ratios, mouth nx_photomark card <slug> <refkey> <jpeg|png> <when> -> measure, then append canthal_tilt L/R, intercanthal_index, intercanthal_eq_fissure and (when the mouth was seen) upper_over_lower_lip nx_photomark referee <oracle-file> [dir] -> every oracle row against the ruler: per-still NME per canthus and a partition; AT44: per mouth landmark too, as the ruler places it and anchored on the oracle's canthi, each with its own partition measure (AT44) also prints the fissure windows and any canthus pinned to one, and the mouth as five landmarks with its named reason exit: 0 ok | 2 usage | 3 unreadable | 4 decode failed | 5 UNMEASURED (no face or no eye pair) | 6 rows exist The cascade route is taken when the two cascade files load (knowledge/fetched/cmp_aesthetictwin_haar_*.xml, beta-only data); otherwise the skin route, and the receipt names the route. Sides follow the image: the eye on the image left is the subject's RIGHT eye; a mirrored still swaps them. A PNG (an estate render, e.g. nx_anat_sov output) reads through the same door as a JPEG still, so one ruler measures the reference and the twin; the receipt names the codec (1 JPEG, 2 PNG). license_tier: ORIGINAL No hw writes (Rule 26).

dependencies 2 imports · 0 importers

nx_syscalls.nx nx_photomark_lib.nx nx_photomark.nx

imports: nx_syscalls.nxnx_photomark_lib.nx

imported by: nobody (leaf or entry point)

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

main pmc_usage 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 ↻ pmc_load ff_load_face hx_load sys_mmap ↻ sys_read_file sys_openat_rd sys_lseek sys_mmap ↻ sys_read sys_munmap sys_close hx_parse hx_find hx_slen hx_skip_ws hx_is_ws hx_slen ↻ sys_mmap ↻ hx_tag_int hx_find ↻ hx_int hx_slen ↻ hx_count

structs

none

consts

21const PMC_EXIT_USAGE: i64 = 2
22const PMC_EXIT_READ: i64 = 3
23const PMC_EXIT_DECODE: i64 = 4
24const PMC_EXIT_UNMEASURED: i64 = 5
25const PMC_EXIT_EXISTS: i64 = 6
26const PMC_ARGC_MEASURE: i64 = 3
27const PMC_ARGC_CARD: i64 = 6
28const PMC_ARGC_REFEREE: i64 = 3
29const PMC_ARGC_REFEREE_DIR: i64 = 4
30const PMC_I64: i64 = 8

functions

32func pmc_usage() -> i64
called by 1: main
36func pmc_kv(k: *u8, v: i64) -> i64 { ri_puts(k); ri_putn(v); return 0 }
called by 2: pmc_reportmain
37func pmc_report(path: *u8, res: *i64) -> i64
104func pmc_load(rc: *i64, out: *i64) -> i64
called by 1: main calls 2: ff_load_faceff_load_eye
113func main(argc: i64, argv: **u8) -> i64