nx_photomark.nx
buildroot/runtime/nx_photomark.nx
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
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
structs
| none |
consts
| 21 | const PMC_EXIT_USAGE: i64 = 2 |
| 22 | const PMC_EXIT_READ: i64 = 3 |
| 23 | const PMC_EXIT_DECODE: i64 = 4 |
| 24 | const PMC_EXIT_UNMEASURED: i64 = 5 |
| 25 | const PMC_EXIT_EXISTS: i64 = 6 |
| 26 | const PMC_ARGC_MEASURE: i64 = 3 |
| 27 | const PMC_ARGC_CARD: i64 = 6 |
| 28 | const PMC_ARGC_REFEREE: i64 = 3 |
| 29 | const PMC_ARGC_REFEREE_DIR: i64 = 4 |
| 30 | const PMC_I64: i64 = 8 |
functions
| 32 | func pmc_usage() -> i64 called by 1: main |
| 36 | func pmc_kv(k: *u8, v: i64) -> i64 { ri_puts(k); ri_putn(v); return 0 } |
| 37 | func pmc_report(path: *u8, res: *i64) -> i64 |
| 104 | func pmc_load(rc: *i64, out: *i64) -> i64 |
| 113 | func main(argc: i64, argv: **u8) -> i64 |