{"adoption": {"forks": 165, "observed_at": "2026-08-28T04:05:11.564104+00:00", "stars": 1615}, "canonical_url": "https://ross.abutalabs.com/products/img2obj", "card": {"archived": false, "artifact_type": "plugin", "description": "Codex plugin that turns attached object images into code-only, animation-ready procedural Three.js models.", "domain": ["graphics", "artificial-intelligence", "web-development", "developer-tools"], "enriched": true, "function": ["machine-learning", "graphics", "agent-framework", "prompt-engineering", "developer-tools"], "health_score": 78, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["vinhhien112/img2obj"], "name": "vinhhien112/img2obj", "platform": ["browser", "cli"], "pushed_at": "2026-08-06T07:54:18+00:00", "repo": "vinhhien112/img2obj", "stars": 1615, "tags": ["threejs", "procedural-geometry", "codex-plugin", "image-to-3d", "3d-modeling", "animation-ready", "objectsculptspec", "ai-workflow", "game-development", "web-server"], "topics": [], "urls": [], "use_cases": ["generate a procedural three.js model from a reference image", "turn a screenshot of an object into code-based 3d geometry", "create animation-ready 3d props for web scenes without downloading meshes", "rebuild stylized plants or mechanical objects as procedural three.js assets", "plan and refine 3d object structure with an ai coding agent", "make interactive browser 3d demos from photos"], "what_it_is": "img2obj is a Codex plugin that turns an attached object image into a code-only, animation-ready procedural Three.js model. It guides the AI through a quality-gated workflow of validating the reference, planning an ObjectSculptSpec, building geometry in phases, and reviewing browser renders against the source image.", "when_to_avoid": ["you need photogrammetry or exact mesh extraction from images", "you require guaranteed production-ready geometry from a single image", "you want a standalone tool rather than an AI-agent plugin", "you need high-poly scans or CAD-accurate models"], "when_to_choose": ["you want code-only procedural Three.js assets rather than downloaded meshes or art packs", "you work with stylized props, mechanical objects, plants, or scene assets", "you use Codex or a similar AI agent and want a structured, quality-gated reconstruction workflow", "you need animation-ready hierarchies with pivots and sockets"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/img2obj", "repo": "vinhhien112/img2obj", "role": "main", "score": 56}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:11.564104+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:50:18.063877+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ca0477b61642ee899349219031f43faf20c6dcfd66d6068344b51ba7afce9e", "fetched_at": "2026-08-28T04:05:11.564104+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vinhhien112/img2obj"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 96, "longevity": 3, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 55, "days_push": 27, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 56, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}