{"id":19521842,"url":"https://github.com/inochi2d/inox2d","last_synced_at":"2025-05-15T14:07:40.545Z","repository":{"id":63493002,"uuid":"566317952","full_name":"Inochi2D/inox2d","owner":"Inochi2D","description":"Native Rust reimplementation of Inochi2D","archived":false,"fork":false,"pushed_at":"2025-03-10T19:08:56.000Z","size":1000,"stargazers_count":223,"open_issues_count":9,"forks_count":24,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-15T14:07:30.365Z","etag":null,"topics":["animation","inochi2d","rust","vtuber"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Inochi2D.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-11-15T12:26:46.000Z","updated_at":"2025-05-05T22:40:58.000Z","dependencies_parsed_at":"2023-02-17T18:30:54.804Z","dependency_job_id":"4b76e9d0-1868-420d-b063-49446f3a2bab","html_url":"https://github.com/Inochi2D/inox2d","commit_stats":{"total_commits":216,"total_committers":9,"mean_commits":24.0,"dds":0.09722222222222221,"last_synced_commit":"9a227b7a612075e6de14389e23793370a4f5855d"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inochi2D%2Finox2d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inochi2D%2Finox2d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inochi2D%2Finox2d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inochi2D%2Finox2d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Inochi2D","download_url":"https://codeload.github.com/Inochi2D/inox2d/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254355335,"owners_count":22057354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","inochi2d","rust","vtuber"],"created_at":"2024-11-11T00:35:22.742Z","updated_at":"2025-05-15T14:07:35.533Z","avatar_url":"https://github.com/Inochi2D.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003eInox2D\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\n    \u003cimg width=\"200\" height=\"256\" src=\"inox2d_logo.svg\"\u003e\n  \u003c/p\u003e\n  \u003cdiv align=\"center\"\u003e\n\nOfficially supported experimental Rust port of [Inochi2D](https://github.com/Inochi2D/inochi2d).\n    \u0026nbsp;\n    \u003ca align=\"center\" href=\"https://discord.com/invite/abnxwN6r9v\"\u003e\n      \u003cimg align=\"center\" src=\"https://img.shields.io/discord/855173611409506334?color=7289DA\u0026label=%20\u0026logo=discord\u0026logoColor=white\" alt=\"Discord\" /\u003e\n    \u003c/a\u003e\n  \u003c/div\u003e\n\u003c/p\u003e\n\n\u0026nbsp;\n\nThe Inox2D workgroup provides support in the **#inox2d** channel on the [Inochi2D Discord][discord-invite].\n\n**Currently this library and the specification is in a prototype state**, it is not recommended to use this library in production.\n\n[discord-invite]: https://discord.com/invite/abnxwN6r9v\n\n\u0026nbsp;\n\n## Rigging\n\nIf you're a model rigger you may want to check out [Inochi Creator](https://github.com/Inochi2D/inochi-creator), the official Inochi2D rigging app in development.  \nThis repository is purely for developers and is not useful if you're an end user.\n\n\u0026nbsp;\n\n## Status\n\nBoth INP and INX files get parsed correctly.\n\nThe OpenGL renderer works on all models we could test them on (Aka, Midori, Arch-chan).\nThe newer models which use the MeshGroup feature don't work yet though.\n\nSupport for mesh groups and animations is on the way!\n\n### Feature tree\n\n- [x] Parsing\n  - [x] INP format\n  - [x] INX format\n- [x] Rendering\n  - [x] OpenGL\n    - [x] WASM (WebGL)\n  - [ ] Draw List\n- [x] Parameters\n  - [x] Deforms (mesh vertex offsets)\n  - [x] Values (node transform offsets)\n  - [ ] Z-sort\n- [x] Physics\n- [ ] Animations\n- [ ] Mesh groups\n\n### INP and INX parsing\n\n```sh\ncargo run -p inox2d --features owo --example parse-inp path/to/puppet.inp\n```\n\n![Parsed foxgirl](https://fs.speykious.dev/inox2d/inox2d-parsed-foxgirl.png)\n\n### OpenGL renderer\n\n```sh\ncargo run -p render-opengl path/to/puppet.inp\n```\n\n![OpenGL-rendered Arch-chan](https://fs.speykious.dev/inox2d/inox2d-opengl-arch-chan.png)\n\n### WebGL demo\n\nSee the [`render_webgl`](/examples/render_webgl) example.\n\n![WebGL-rendered Aka](https://fs.speykious.dev/inox2d/inox2d-webgl-foxgirl.png)\n\n## Implementation\n\nInox2D aims to support all features currently present in the standard D implementation.\n\nInox2D is designed to be extensible. Nodes are extensible through a generic `InoxData\u003cT\u003e` enum which has a `Custom(T)` variant. Every other part of the library accounts for it: the OpenGL renderer accepts any struct that implements the `CustomRenderer` trait to be able to render your custom nodes, and the deserialization functions accept generic `Fn`s for deserialization of custom nodes when it is relevant.\n\n\u0026nbsp;\n\n## Optimization on OpenGL\n\n| Implementation        | language | OpenGL calls |\n| --------------------- | -------- | ------------ |\n| Inochi2D reference*   | D        | 3076         |\n| Link Mauve's inochi2d | Rust     | 551          |\n| Inox2D                | Rust     | 1639         |\n\nThe OpenGL renderer on Inox2D has a few simple optimizations that result in fewer OpenGL calls:\n\n- it uses a simple OpenGL cache to avoid making calls when the resulting state won't change,\n- it only uploads a model's part textures once instead of every frame.\n\n\u003e \\* Reference implementation is subject to change as optimisation passes are done, additionally code is more geared towards readability than performance for implementers to be able to more easily use it as reference.\n\n\u0026nbsp;\n\n## License\n\nThis project is licensed under the 2-Clause BSD license.\nSee [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finochi2d%2Finox2d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finochi2d%2Finox2d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finochi2d%2Finox2d/lists"}