Skip to main content

abstract_identity

Identity pipeline for hugpy, merged from the former standalone char360 and identity-render dists into one src-layout package with two subpackages:

Subpackage What it is
abstract_identity.char360 Video → per-character 360° view sets: scenes → person detect+track (YOLO) → face embed+pose (insightface) → identity cluster (agglomerative) → yaw-bin (12×30°) → best-per-bin crops + manifest.json. Library + CLI (char360 console script / python -m char360).
abstract_identity.render The identity-render GPU service (identity-render console script): reference photos → Hunyuan3D-2mv mesh (+ headless-Blender turntable), plus the char360-powered video_extract and video_characters_glb job kinds, behind a tokened Flask job API on :9750.

Install

Base (any box — coordinator, dev VM, CI):

pip install abstract_identity

Base is deliberately thin and wheels-only: flask + pydantic, nothing else. Every module still imports cleanly with no heavy deps present — heavy imports are lazy, inside the stage/job that needs them — so the service can boot anywhere and honestly report capabilities as not-ready.

ae render host (GPU box): run the installer instead of pip —

bash /srv/share/projects/hugpy/dev/py/abstract_identity/install/install_identity_render_ae.sh \
  --token <TOKEN>

It is idempotent (safe to re-run), refuses to run without --token or as root, and sets up: CUDA torch, the Hunyuan3D-2 checkout + weights, rembg, portable Blender 4.2, the char360 heavy deps, an editable install of this package into the venv, and the identity-render.service systemd user unit (ExecStart=venv/bin/python -m abstract_identity.render.service). See the script header and its PASS:/FAIL:/NOTE: output for details. One-time firewall opening on ae (verified 2026-07-14):

sudo ufw allow from 192.168.1.0/24 to any port 9750 proto tcp comment 'identity-render (hugpy central relay)'

Why the heavy deps are an extra, not base

pip install abstract_identity[render] pulls the char360 detection stack: scenedetect[opencv], ultralytics, insightface, onnxruntime-gpu==1.18.1, opencv-python, numpy, scikit-learn. They are not in base because they are

  • heavy/native/CUDA — pointless on a coordinator box, and
  • restrictively licensed — ultralytics is AGPL-3.0 (a deployed combination is an AGPL combined work) and the insightface pretrained packs (buffalo_l) are non-commercial research only. See the THIRD-PARTY OBLIGATIONS NOTICE in LICENSE before any commercial use or redistribution.

Hunyuan3D-2 is never a pip dep at all (restrictive Tencent community license — excludes EU/UK/South Korea including outputs). It is installed out-of-band, only on the render box, by install/install_identity_render_ae.sh (git checkout + pip install -e + weight pre-download); the code only reaches hy3dgen lazily inside a running mesh job. Same for torch, trimesh, and Blender.

Compat shims

The old import paths keep working — the wheel ships thin char360 and identity_render shim packages that re-export from their new homes:

import char360                      # -> abstract_identity.char360
from char360.pipeline import run_char360
import identity_render              # -> abstract_identity.render
from identity_render.jobstate import STAGE_DONE
python -m char360.cli <video> -o <outdir>
python -m identity_render.service   # old systemd ExecStart still boots

New code should import abstract_identity.char360 / abstract_identity.render directly. The log-capture contract is unchanged: service log records still flow through the literal "identity_render" logger name.

Service API (summary)

Every request, /health included, requires X-Identity-Render-Token: <TOKEN> (401 otherwise). Jobs run one at a time (single GPU, single worker thread).

Method Path What
GET /health Service + honest capability report
POST /jobs Queue a job (mesh_build, turntable, mesh_and_turntable, video_extract, video_characters_glb); returns 202 {"job_id": ...}
GET /jobs/<job_id> {job_id, status, error?, files?}
GET /jobs/<job_id>/files/<name> Fetch an artifact's bytes
DELETE /jobs/<job_id> Best-effort cleanup of a job's files

Artifacts land under $IDENTITY_RENDER_HOME/<job_id>/; nothing is cleaned up automatically. Env vars (IDENTITY_RENDER_TOKEN/PORT/HOME, BLENDER_BIN, FFMPEG_BIN, HUNYUAN3D_*, HF_HOME, ...) are written to ~/identity-render/env by the installer. Background removal (mesh_params.remove_background) is ON by default; originals are never modified.

On ae: systemctl --user status identity-render.service, journalctl --user -u identity-render.service -f. Code-only update: re-run the installer (editable install — a restart alone picks up share changes), then systemctl --user restart identity-render.service.

char360 CLI

char360 <video> -o <outdir> [--stride 8] [--yolo yolov8m.pt] \
    [--min-h-frac 0.15] [--cluster-dist 0.55] [--min-faces 4]

Output: <outdir>/manifest.json + char_NN/view_MM_yaw±DDD.png crops (bin 0 frontal, 30° bins CCW; rear bins are yaw_source=rear_inferred via track-level identity propagation). Missing heavy deps fail loud at stage-run time with a pip install hint, never at import time.

Tests

python -m pytest tests/ -q     # or: python -m unittest discover tests

The suite never imports cv2/torch/insightface/sklearn/scenedetect — heavy stages are mocked — so it runs on a base install (plus numpy for the pipeline test's fixtures).

Publishing

cd py/abstract_identity
python -m build          # sdist + wheel
twine upload dist/*      # public PyPI

Order matters: publish abstract_identity before publishing abstract_hugpy_dev 0.1.234, which now base-depends on abstract_identity>=0.1.0. Version is single-sourced from src/abstract_identity/__init__.py:__version__ — bump it there.

Metadata

Release files for abstract-identity 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for abstract-identity 0.1.1
File Size Uploaded Provenance Actions
abstract_identity-0.1.1.tar.gz 57.1 kB Without provenance Details for abstract_identity-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for abstract-identity 0.1.1
File Interpreter ABI Platform Actions
abstract_identity-0.1.1-py3-none-any.whl Python 3 none any Details for abstract_identity-0.1.1-py3-none-any.whl

Total release size: 119.5 kB

Release files / abstract_identity-0.1.1.tar.gz

Download URL abstract_identity-0.1.1.tar.gz
Size 57.1 kB
Tags Source
SHA-256 checksum
How to use checksums
8fac3caf577ae658a4ccc7545e68c5a4ed9e7950268e5beb594dc49ce40cdf88
BLAKE2b-256 checksum
How to use checksums
f6cd755c7ffe69352dd3dc1fea5e9542d2cf7aa13073b964b4303242fdd13ee1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / abstract_identity-0.1.1-py3-none-any.whl

Download URL abstract_identity-0.1.1-py3-none-any.whl
Size 62.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
774e05a5ac04ad6b7a5668a63dc6864412f3611ecad2f1a55c03915281e74c80
BLAKE2b-256 checksum
How to use checksums
b77d234374335355b233fd3f6096a2689aeaea14e7988e4310a847b2f99025b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for abstract-identity 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page