WolfDavid's picture
feat(01-01): add the VRM tutor character and record its license facts
d096a92
|
Raw History Blame
8.88 kB

Shipped Assets β€” provenance and license facts

Source of truth for LICENSES.md (written in plan 01-10). Every row must be traceable to a document that was actually read, not inferred.

VRM character β€” avatar/assets/tutor.vrm

STATUS: TEMPORARY DEV ASSET. This is a properly-licensed placeholder chosen to unblock the avatar pipeline (plans 01-03, 01-06, 01-08, 01-09). The decision to author a bespoke character was deferred, not cancelled. Plan 01-10 MUST re-raise the VRM sourcing checkpoint before the phase-exit licensing audit. See "Open item for plan 01-10" below.

Field Value
Character name VRM1_Constraint_Twist_Sample (embedded meta.name), model version v1.0.1
Author pixiv Inc. (embedded meta.authors = ['pixiv Inc.'])
Copyright (c) 2022 pixiv Inc. (embedded meta.copyrightInformation)
Source Official VRM specification sample repository, vrm-c/vrm-specification, path samples/VRM1_Constraint_Twist_Sample/vrm/VRM1_Constraint_Twist_Sample.vrm β€” https://github.com/vrm-c/vrm-specification/tree/master/samples/VRM1_Constraint_Twist_Sample (HTTP 200, verified 2026-08-27)
Download URL used https://raw.githubusercontent.com/vrm-c/vrm-specification/master/samples/VRM1_Constraint_Twist_Sample/vrm/VRM1_Constraint_Twist_Sample.vrm (HTTP 200, verified 2026-08-27)
Terms URL https://vrm.dev/licenses/1.0/ β€” VRM Public License 1.0 (HTTP 200, verified 2026-08-27)
VRM spec version VRM 1.0 (extensions.VRMC_vrm.specVersion = 1.0), glTF binary container version 2
Embedded meta (read from the file) name=VRM1_Constraint_Twist_Sample authors=['pixiv Inc.'] licenseUrl=https://vrm.dev/licenses/1.0/ commercialUsage=corporation creditNotation=unnecessary avatarPermission=everyone allowRedistribution=true modification=allowModificationRedistribution copyrightInformation=(c) 2022 pixiv Inc.
Permissions relied on allowRedistribution: true (this repo redistributes the file), avatarPermission: everyone (used as an avatar by any visitor), modification: allowModificationRedistribution (headroom to retarget or adjust and still redistribute), commercialUsage: corporation (the broadest tier β€” covers a public portfolio Space unambiguously)
Required credit string none required β€” creditNotation: unnecessary. Credited voluntarily anyway as: VRM1_Constraint_Twist_Sample (c) 2022 pixiv Inc. β€” VRM Public License 1.0
File size 10,776,032 bytes (10.28 MiB)
SHA-256 12c2b97e95e700783a6a550dc0eee2d7880aeedccef9ae67bc4c5a2f0f2631a2
Git LFS yes β€” git check-attr filter reports filter: lfs, and the LFS pointer's oid sha256 equals the hash above

Why the embedded flags are the license answer, and the README is not

VRM Public License 1.0 is a template, not a fixed grant. It confers "Model Utilization" rights unconditionally, but redistribution, avatar use, modification and commercial use are per-file flags set by the licensor inside the model's own VRMC_vrm.meta block. Two files can both cite https://vrm.dev/licenses/1.0/ and grant materially different rights.

So the facts above were extracted by parsing this specific file's glTF JSON chunk, not read off a repository README. Every flag this project relies on is explicit and permissive in the file itself.

The complete embedded meta, verbatim, for the record:

allowAntisocialOrHateUsage    : False
allowExcessivelySexualUsage   : True
allowExcessivelyViolentUsage  : True
allowPoliticalOrReligiousUsage: True
allowRedistribution           : True
authors                       : ['pixiv Inc.']
avatarPermission              : everyone
commercialUsage               : corporation
copyrightInformation          : (c) 2022 pixiv Inc.
creditNotation                : unnecessary
licenseUrl                    : https://vrm.dev/licenses/1.0/
modification                  : allowModificationRedistribution
name                          : VRM1_Constraint_Twist_Sample
thumbnailImage                : 18
version                       : v1.0.1

allowAntisocialOrHateUsage: False is the one restriction. It is not a constraint this project can plausibly violate β€” a Japanese-language tutor has no such use path β€” but plan 01-10's LICENSES.md should carry it so the restriction is stated rather than silently dropped.

Capability check β€” this asset can actually satisfy AVTR-01 and AVTR-02

Verified by parsing extensions.VRMC_vrm.expressions: 18 preset expressions, 0 custom.

aa, angry, blink, blinkLeft, blinkRight, ee, happy, ih, lookDown, lookLeft,
lookRight, lookUp, neutral, oh, ou, relaxed, sad, surprised
Requirement Needs Present
AVTR-02 lip-sync aa, ih, ou, ee, oh all five present
AVTR-01 idle life blink (plus blinkLeft / blinkRight) present
Expression range (later phases) happy, angry, sad, relaxed, surprised, neutral present
Gaze (later phases) lookUp / lookDown / lookLeft / lookRight present

This was measured, not assumed. Both avatar requirements in Phase 1 are satisfiable with this file.

Also present, and relevant to plan 01-03's renderer wiring:

  • extensionsUsed: VRMC_springBone, VRMC_vrm, KHR_materials_unlit, VRMC_materials_mtoon, VRMC_node_constraint
  • 54 humanoid bones defined, including hips, head, leftEye, rightEye. There is no jaw bone β€” which is fine and expected: VRM lip-sync is driven by the aa/ih/ou/ee/oh blendshape expressions listed above, never by a jaw bone.
  • This sample exists specifically to exercise twist constraints (VRMC_node_constraint) and spring bones. That makes it a slightly heavier load path than a plain character, which is useful: if plan 01-03's transport seam holds for this file, it holds for simpler ones.

Not used, and why

AvatarSample_A, AvatarSample_B and AvatarSample_C are NOT CC0. Copyright is retained and VRoid Hub conditions apply; VRoid's own FAQ prohibits redistributing them under a CC0 designation. This is a widespread misconception, repeated confidently in many tutorials and blog posts. It is recorded here so it is not reintroduced later in this repository.

Two further traps worth stating once, since they are the reason sourcing a VRM is a human decision rather than a download:

  • CC0 cannot be set on VRoid Hub, so any "CC0 on VRoid Hub" claim is false by construction.
  • Enabling "Allow third-party usage" on VRoid Hub overwrites a model's embedded license with VRoid Hub's own conditions β€” so the embedded flags on a Hub-sourced model may not say what the original author intended.

Open item for plan 01-10

avatar/assets/tutor.vrm is a temporary dev asset. Plan 01-10 must re-raise the VRM sourcing checkpoint before the phase-exit licensing audit and decide one of:

  1. Keep this file. Legally clean as recorded above and requires no further action beyond the LICENSES.md entry. Costs the project its own character identity β€” it ships a spec sample named VRM1_Constraint_Twist_Sample, which is a visible tell on a flagship portfolio piece.
  2. Author a bespoke character in VRoid Studio (the original RESEARCH recommendation, estimated 2-4 hours). Converts DPLY-04 from "read someone else's terms and hope" into "state your own terms", and gives the tutor a real identity. The embedded vrm.meta must be set deliberately at export time, because plan 01-09 has an automated test asserting vrm.meta matches LICENSES.md.

Whichever is chosen, LICENSES.md must carry the VRM entry and tests/e2e/test_avatar_loop.py::test_vrm_meta_matches_licenses must assert against the file that actually ships.

Fallback already vetted, if this file ever fails verification: Seed-san.vrm by VirtualCast, Inc., in the sibling samples path of the same repository β€” same permission flags and the same 18 presets, except creditNotation: required, which would make a visible credit string mandatory.

Voice β€” VOICEVOX / γšγ‚“γ γ‚‚γ‚“

Already recorded in full by plan 01-04. See docs/VOICEVOX-SETUP.md, which carries all three licence layers, the exact VOICEVOX:γšγ‚“γ γ‚‚γ‚“ credit string, the placement standard, the flow-down obligation, the Nemo pre-cleared swap, and the Open JTalk dictionary's BSD-3-Clause notice with its dual Nara/Nagoya attribution. Not duplicated here; LICENSES.md (plan 01-10) should read that file directly.

Runtime libraries β€” to be filled by plan 01-10

three.js, @pixiv/three-vrm, transformers.js, and the Open JTalk dictionary. Note that this VRM additionally exercises VRMC_springBone, VRMC_node_constraint and VRMC_materials_mtoon, all of which are handled by @pixiv/three-vrm itself and add no separate licence entry.