Files
animation/tools/tailor/md_probe_v3.py
T
jeremy 3ba86b2ea8 feat: clothing lane, character sources, and DCC bridges
Bulk import of the working lanes that were living untracked on the PC.

Content:
- characters/  Lena/male body lanes, bakes, texture work, run logs
- clothing/    garment pipeline, configs, gates, contract docs
- garments/    MD-authored garment sources (.zprj/.zpac)
- UAL-Lib/     Universal Animation Library 2 source (.blend/.fbx/.glb)
- tools/       blender_bridge, iclone_bridge, md_bridge, tailor, glm_agent
- docs/, plans/, dev/, .agents/plans/

Repo hygiene:
- .gitattributes: LFS now covers .blend, .zprj, .zpac, .obj, .npy and the
  Reallusion .iAvatar/.ccAvatar/.ccRestore containers. Without this the
  ~3.8 GB in this commit would land as raw blobs. .png/.jpg are left out
  on purpose — ~250 are already tracked raw and converting them would
  rewrite every one without shrinking history.
- .gitignore: exclude /accurig/ (~1 GB AccuRig program files, redistributable
  from Reallusion, nothing authored here) and /dev/null/ (git-lfs hook copies
  dropped by a `>/dev/null` redirect on Windows).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 15:55:43 -07:00

40 lines
1.5 KiB
Python

# Probe: bind the v3 levers before using them.
#
# md_piupiu_v3.py needs four calls this repo has never made. Their signatures are
# NOT in tools/md_bridge/api_docs.json (48 harvested entries only), and the skill's
# rule is introspect-don't-trust-docs — overloaded pybind11 functions also break
# inspect.signature(), so read __doc__.
#
# python tools/md_bridge.py --file tools/tailor/md_probe_v3.py
#
# Read-only: creates no patterns, imports no avatar, simulates nothing. Safe to
# run in a live session at any point.
report = {}
TARGETS = [
("pattern_api", "SetAddlThicknessCollision"),
("pattern_api", "GetAddlThicknessCollisionValue"),
("pattern_api", "SetPatternPieceElastic"),
("pattern_api", "SetPatternPieceElasticStrength"),
("pattern_api", "SetPatternPieceElasticStrengthRatio"),
("pattern_api", "SetPatternPieceElasticTotalLength"),
("pattern_api", "SetPatternPieceElasticSegmentLength"),
("pattern_api", "SetPatternPieceSolidifyStrengthen"),
("pattern_api", "SetParticleDistanceOfPattern"),
("pattern_api", "GetLineLength"),
("utility_api", "SetSimulationSelfCollisionAvoidanceStiffness"),
("utility_api", "SetAvatarSoftBodyStiffness"),
]
mods = {"pattern_api": pattern_api, "utility_api": utility_api,
"fabric_api": fabric_api, "utility": utility_api}
for mod_name, fn_name in TARGETS:
fn = getattr(mods[mod_name], fn_name, None)
if fn is None:
report[fn_name] = "ABSENT"
else:
report[fn_name] = (getattr(fn, "__doc__", None) or "<no docstring>").strip()
result = report