cof-cli 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1757 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yannsouetre.github.io/cof/schemas/1.0/manifest.schema.json",
4
+ "title": "COF manifest.json (1.0)",
5
+ "type": "object",
6
+ "required": [
7
+ "cof",
8
+ "id",
9
+ "name",
10
+ "fictional",
11
+ "morphology",
12
+ "tags",
13
+ "elements",
14
+ "assets",
15
+ "rights",
16
+ "provenance",
17
+ "presets",
18
+ "default_preset"
19
+ ],
20
+ "additionalProperties": true,
21
+ "properties": {
22
+ "cof": {
23
+ "type": "string",
24
+ "pattern": "^1\\.[0-9]+$",
25
+ "description": "format version: 1.0; readers accept any 1.x (later minors only add optional fields)"
26
+ },
27
+ "id": {
28
+ "type": "string",
29
+ "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$",
30
+ "description": "stable ULID"
31
+ },
32
+ "name": {
33
+ "type": "string",
34
+ "minLength": 1,
35
+ "maxLength": 200
36
+ },
37
+ "nickname": {
38
+ "type": "string",
39
+ "maxLength": 100
40
+ },
41
+ "languages": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "string",
45
+ "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$"
46
+ }
47
+ },
48
+ "summary": {
49
+ "type": "string",
50
+ "maxLength": 2000
51
+ },
52
+ "fictional": {
53
+ "type": "boolean"
54
+ },
55
+ "morphology": {
56
+ "type": "object",
57
+ "required": [
58
+ "class"
59
+ ],
60
+ "properties": {
61
+ "class": {
62
+ "enum": [
63
+ "human",
64
+ "humanoid",
65
+ "anthropomorphic-animal",
66
+ "quadruped",
67
+ "avian",
68
+ "aquatic",
69
+ "mechanical",
70
+ "amorphous",
71
+ "other"
72
+ ],
73
+ "description": "human = human; humanoid = human-shaped non-human (elf, android, alien)"
74
+ },
75
+ "species": {
76
+ "type": "string"
77
+ },
78
+ "notes": {
79
+ "type": "string"
80
+ }
81
+ }
82
+ },
83
+ "tags": {
84
+ "type": "object",
85
+ "required": [
86
+ "content",
87
+ "ip"
88
+ ],
89
+ "properties": {
90
+ "auto": {
91
+ "type": "array",
92
+ "items": {
93
+ "$ref": "#/$defs/tag"
94
+ },
95
+ "maxItems": 60
96
+ },
97
+ "manual": {
98
+ "type": "array",
99
+ "items": {
100
+ "$ref": "#/$defs/tag"
101
+ },
102
+ "maxItems": 30
103
+ },
104
+ "content": {
105
+ "type": "array",
106
+ "minItems": 1,
107
+ "items": {
108
+ "enum": [
109
+ "none",
110
+ "nudity",
111
+ "sexual",
112
+ "violence",
113
+ "gore",
114
+ "drugs",
115
+ "profanity",
116
+ "horror",
117
+ "political",
118
+ "religious"
119
+ ]
120
+ }
121
+ },
122
+ "ip": {
123
+ "type": "object",
124
+ "required": [
125
+ "original"
126
+ ],
127
+ "properties": {
128
+ "original": {
129
+ "type": "boolean"
130
+ },
131
+ "franchise": {
132
+ "type": [
133
+ "string",
134
+ "null"
135
+ ]
136
+ },
137
+ "based_on": {
138
+ "type": [
139
+ "string",
140
+ "null"
141
+ ]
142
+ }
143
+ }
144
+ }
145
+ }
146
+ },
147
+ "thumbnail": {
148
+ "$ref": "#/$defs/path"
149
+ },
150
+ "elements": {
151
+ "type": "object",
152
+ "description": "Categories (by media nature) → variants; each variant declares its `kind`.",
153
+ "propertyNames": {
154
+ "pattern": "^(personality|appearance|identity_weights|volume3d|voice|posture|motion|files|x-[a-z0-9-]+)$"
155
+ },
156
+ "additionalProperties": {
157
+ "type": "object",
158
+ "required": [
159
+ "variants"
160
+ ],
161
+ "properties": {
162
+ "variants": {
163
+ "type": "object",
164
+ "propertyNames": {
165
+ "$ref": "#/$defs/vid"
166
+ },
167
+ "additionalProperties": {
168
+ "$ref": "#/$defs/variant"
169
+ }
170
+ }
171
+ }
172
+ }
173
+ },
174
+ "presets": {
175
+ "type": "object",
176
+ "minProperties": 1,
177
+ "description": "at least one preset (a file without presets is migrated: cof migrate adds 'default')",
178
+ "propertyNames": {
179
+ "$ref": "#/$defs/vid"
180
+ },
181
+ "additionalProperties": {
182
+ "$ref": "#/$defs/preset"
183
+ }
184
+ },
185
+ "default_preset": {
186
+ "$ref": "#/$defs/vid"
187
+ },
188
+ "priorities": {
189
+ "type": "object",
190
+ "properties": {
191
+ "visual": {
192
+ "$ref": "#/$defs/visualPriority"
193
+ },
194
+ "voice": {
195
+ "type": "array",
196
+ "items": {
197
+ "enum": [
198
+ "samples",
199
+ "described",
200
+ "engines"
201
+ ]
202
+ }
203
+ },
204
+ "by_target": {
205
+ "type": "object",
206
+ "additionalProperties": {
207
+ "type": "object",
208
+ "properties": {
209
+ "visual": {
210
+ "$ref": "#/$defs/visualPriority"
211
+ },
212
+ "voice": {
213
+ "type": "array",
214
+ "items": {
215
+ "enum": [
216
+ "samples",
217
+ "described",
218
+ "engines"
219
+ ]
220
+ }
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }
226
+ },
227
+ "completeness": {
228
+ "$ref": "#/$defs/completeness"
229
+ },
230
+ "coherence": {
231
+ "$ref": "#/$defs/coherence"
232
+ },
233
+ "coverage": {
234
+ "type": "object",
235
+ "properties": {
236
+ "elements": {
237
+ "type": "array",
238
+ "items": {
239
+ "type": "string"
240
+ }
241
+ },
242
+ "variants": {
243
+ "type": "integer"
244
+ },
245
+ "presets": {
246
+ "type": "integer"
247
+ }
248
+ }
249
+ },
250
+ "mapping_vocabularies": {
251
+ "type": "object",
252
+ "additionalProperties": {
253
+ "type": "string"
254
+ }
255
+ },
256
+ "assets": {
257
+ "type": "array",
258
+ "items": {
259
+ "$ref": "#/$defs/asset"
260
+ }
261
+ },
262
+ "size_class": {
263
+ "enum": [
264
+ "lite",
265
+ "standard",
266
+ "full"
267
+ ]
268
+ },
269
+ "container": {
270
+ "type": "object",
271
+ "properties": {
272
+ "aligned": {
273
+ "enum": [
274
+ 0,
275
+ 4,
276
+ 32,
277
+ 64
278
+ ]
279
+ },
280
+ "executableContent": {
281
+ "enum": [
282
+ "none",
283
+ "sandboxed-wasm",
284
+ "scripts"
285
+ ],
286
+ "default": "none"
287
+ }
288
+ }
289
+ },
290
+ "rights": {
291
+ "type": "object",
292
+ "required": [
293
+ "permissions"
294
+ ],
295
+ "properties": {
296
+ "permissions": {
297
+ "$ref": "#/$defs/permissions"
298
+ },
299
+ "consent": {
300
+ "oneOf": [
301
+ {
302
+ "type": "null"
303
+ },
304
+ {
305
+ "$ref": "#/$defs/consent"
306
+ }
307
+ ]
308
+ }
309
+ }
310
+ },
311
+ "provenance": {
312
+ "type": "object",
313
+ "required": [
314
+ "created",
315
+ "modified"
316
+ ],
317
+ "properties": {
318
+ "created": {
319
+ "type": "string",
320
+ "format": "date-time"
321
+ },
322
+ "modified": {
323
+ "type": "string",
324
+ "format": "date-time"
325
+ },
326
+ "generator": {
327
+ "type": "string"
328
+ },
329
+ "source": {
330
+ "type": "array",
331
+ "items": {
332
+ "type": "string"
333
+ }
334
+ },
335
+ "c2pa": {
336
+ "oneOf": [
337
+ {
338
+ "type": "null"
339
+ },
340
+ {
341
+ "$ref": "#/$defs/path"
342
+ }
343
+ ]
344
+ },
345
+ "signatures": {
346
+ "type": "array",
347
+ "items": {
348
+ "type": "object",
349
+ "required": [
350
+ "alg",
351
+ "kid",
352
+ "jws"
353
+ ],
354
+ "properties": {
355
+ "alg": {
356
+ "type": "string"
357
+ },
358
+ "kid": {
359
+ "type": "string"
360
+ },
361
+ "jws": {
362
+ "type": "string"
363
+ },
364
+ "canonicalization": {
365
+ "const": "RFC8785"
366
+ }
367
+ }
368
+ }
369
+ }
370
+ }
371
+ },
372
+ "metadata": {
373
+ "type": "object"
374
+ },
375
+ "extensions": {
376
+ "type": "object"
377
+ },
378
+ "identities": {
379
+ "type": "object",
380
+ "propertyNames": {
381
+ "$ref": "#/$defs/vid"
382
+ },
383
+ "additionalProperties": {
384
+ "$ref": "#/$defs/identity"
385
+ },
386
+ "description": "Optional: several identities (casting). The root carries a copy of the default identity."
387
+ },
388
+ "default_identity": {
389
+ "$ref": "#/$defs/vid"
390
+ },
391
+ "preset_tags": {
392
+ "type": "array",
393
+ "description": "Tags that organise presets (e.g. by language, by age, by style), at container level — never inside a preset, so nothing is inherited through `extends`. A preset may carry several tags. Tags sharing a `facet` are alternatives (e.g. facet \"language\": English / Français); tags of different facets combine. Readers MAY ignore them; builders use them as filters.",
394
+ "items": {
395
+ "type": "object",
396
+ "required": [
397
+ "id",
398
+ "presets"
399
+ ],
400
+ "properties": {
401
+ "id": {
402
+ "$ref": "#/$defs/vid"
403
+ },
404
+ "label": {
405
+ "type": "string",
406
+ "maxLength": 120
407
+ },
408
+ "facet": {
409
+ "type": "string",
410
+ "maxLength": 60,
411
+ "description": "optional family of tags (language, age, style…)"
412
+ },
413
+ "description": {
414
+ "type": "string",
415
+ "maxLength": 500
416
+ },
417
+ "presets": {
418
+ "type": "array",
419
+ "items": {
420
+ "$ref": "#/$defs/vid"
421
+ },
422
+ "uniqueItems": true
423
+ }
424
+ }
425
+ }
426
+ },
427
+ "thumbnail_source": {
428
+ "$ref": "#/$defs/aid",
429
+ "description": "asset chosen by the author as the source of Thumbnails/thumbnail.png (default: first view of the default preset)"
430
+ }
431
+ },
432
+ "allOf": [
433
+ {
434
+ "if": {
435
+ "required": [
436
+ "presets"
437
+ ],
438
+ "properties": {
439
+ "presets": {
440
+ "minProperties": 1
441
+ }
442
+ }
443
+ },
444
+ "then": {
445
+ "required": [
446
+ "default_preset"
447
+ ]
448
+ }
449
+ },
450
+ {
451
+ "if": {
452
+ "required": [
453
+ "identities"
454
+ ],
455
+ "properties": {
456
+ "identities": {
457
+ "minProperties": 1
458
+ }
459
+ }
460
+ },
461
+ "then": {
462
+ "required": [
463
+ "default_identity"
464
+ ]
465
+ }
466
+ }
467
+ ],
468
+ "$defs": {
469
+ "path": {
470
+ "type": "string",
471
+ "pattern": "^(?!/)(?!.*\\.\\.)[A-Za-z0-9._/-]+$"
472
+ },
473
+ "vid": {
474
+ "type": "string",
475
+ "pattern": "^[a-z0-9][a-z0-9.-]{0,63}$"
476
+ },
477
+ "aid": {
478
+ "type": "string",
479
+ "pattern": "^[a-z0-9][a-z0-9.-]{0,63}$"
480
+ },
481
+ "tag": {
482
+ "type": "string",
483
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
484
+ },
485
+ "age": {
486
+ "type": "object",
487
+ "required": [
488
+ "value"
489
+ ],
490
+ "properties": {
491
+ "value": {
492
+ "type": "number",
493
+ "minimum": 0
494
+ },
495
+ "unit": {
496
+ "enum": [
497
+ "years",
498
+ "months"
499
+ ],
500
+ "default": "years"
501
+ },
502
+ "basis": {
503
+ "enum": [
504
+ "declared",
505
+ "apparent",
506
+ "canonical"
507
+ ],
508
+ "default": "declared"
509
+ }
510
+ },
511
+ "description": "Depicted age of a variant (or a preset's floor via age_override). Never on the identity: age is a property of the depiction. Required on face / body / character-sheet / reference-set (human-shaped morphologies) and on intimate (≥ 18)."
512
+ },
513
+ "style": {
514
+ "type": "string",
515
+ "pattern": "^(photo-realistic|cinematic|3d-render|anime|manga|comic|cartoon|pixel-art|lego|clay|watercolor|oil-painting|ink-sketch|lineart|low-poly|voxel|chibi|other:[a-z0-9-]+)$"
516
+ },
517
+ "visualPriority": {
518
+ "type": "array",
519
+ "items": {
520
+ "enum": [
521
+ "identity_weights",
522
+ "images",
523
+ "avatar",
524
+ "mesh",
525
+ "descriptive"
526
+ ]
527
+ }
528
+ },
529
+ "variant": {
530
+ "type": "object",
531
+ "properties": {
532
+ "label": {
533
+ "type": "string",
534
+ "maxLength": 120
535
+ },
536
+ "derives_from": {
537
+ "$ref": "#/$defs/vid"
538
+ },
539
+ "style": {
540
+ "$ref": "#/$defs/style"
541
+ },
542
+ "tags": {
543
+ "type": "array",
544
+ "items": {
545
+ "$ref": "#/$defs/tag"
546
+ }
547
+ },
548
+ "images": {
549
+ "type": "array",
550
+ "items": {
551
+ "$ref": "#/$defs/aid"
552
+ }
553
+ },
554
+ "derived": {
555
+ "type": "array",
556
+ "items": {
557
+ "$ref": "#/$defs/aid"
558
+ }
559
+ },
560
+ "samples": {
561
+ "type": "array",
562
+ "items": {
563
+ "$ref": "#/$defs/aid"
564
+ }
565
+ },
566
+ "clips": {
567
+ "type": "array",
568
+ "items": {
569
+ "$ref": "#/$defs/aid"
570
+ }
571
+ },
572
+ "card": {
573
+ "$ref": "#/$defs/path"
574
+ },
575
+ "psyche": {
576
+ "$ref": "#/$defs/path"
577
+ },
578
+ "story": {
579
+ "$ref": "#/$defs/path"
580
+ },
581
+ "lorebook": {
582
+ "$ref": "#/$defs/path"
583
+ },
584
+ "params": {
585
+ "$ref": "#/$defs/path"
586
+ },
587
+ "code": {
588
+ "$ref": "#/$defs/path"
589
+ },
590
+ "spec": {
591
+ "$ref": "#/$defs/path"
592
+ },
593
+ "profile": {
594
+ "$ref": "#/$defs/path"
595
+ },
596
+ "vec": {
597
+ "$ref": "#/$defs/path"
598
+ },
599
+ "visemes": {
600
+ "$ref": "#/$defs/path"
601
+ },
602
+ "path": {
603
+ "$ref": "#/$defs/path"
604
+ },
605
+ "rig": {
606
+ "type": "string"
607
+ },
608
+ "skeleton": {
609
+ "$ref": "#/$defs/path"
610
+ },
611
+ "mesh": {
612
+ "type": "object",
613
+ "required": [
614
+ "path",
615
+ "topology"
616
+ ],
617
+ "properties": {
618
+ "path": {
619
+ "$ref": "#/$defs/path"
620
+ },
621
+ "topology": {
622
+ "enum": [
623
+ "FLAME-2023",
624
+ "MediaPipe-468",
625
+ "ARKit",
626
+ "ICT-FaceKit",
627
+ "MetaHuman",
628
+ "custom"
629
+ ]
630
+ },
631
+ "blendshapes": {
632
+ "enum": [
633
+ "ARKit-52",
634
+ "UnifiedExpressions-1.0",
635
+ "VRM-presets",
636
+ "none"
637
+ ]
638
+ },
639
+ "textures": {
640
+ "type": "array",
641
+ "items": {
642
+ "$ref": "#/$defs/aid"
643
+ }
644
+ },
645
+ "units": {
646
+ "enum": [
647
+ "m",
648
+ "cm",
649
+ "mm"
650
+ ]
651
+ },
652
+ "watertight": {
653
+ "type": "boolean"
654
+ },
655
+ "landmarks": {
656
+ "type": "string"
657
+ }
658
+ }
659
+ },
660
+ "profiles": {
661
+ "type": "object"
662
+ },
663
+ "estimated": {
664
+ "type": "boolean"
665
+ },
666
+ "style_tags": {
667
+ "type": "array",
668
+ "items": {
669
+ "$ref": "#/$defs/tag"
670
+ },
671
+ "maxItems": 8,
672
+ "description": "free-form refinements complementing style (e.g. anime-90s, ghibli-like)"
673
+ },
674
+ "kind": {
675
+ "type": "string"
676
+ },
677
+ "identity": {
678
+ "$ref": "#/$defs/vid",
679
+ "description": "the character this element belongs to (required as soon as the file holds several characters; otherwise the default character). A preset only uses its own character's elements."
680
+ },
681
+ "neutral": {
682
+ "type": "boolean",
683
+ "description": "Does this element carry nothing of a particular character (no likeness, no voice, no personal content)? Only neutral elements may share a file with another character's elements. Fixed by kind for most kinds (spec § 2.1); chosen by the author for clothing, accessory, posture photos, motion video, volume3d 'other' and every files kind. `false` is always allowed (stricter); `true` on a kind that is never neutral is an error."
684
+ },
685
+ "language": {
686
+ "type": "string",
687
+ "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$"
688
+ },
689
+ "garment": {
690
+ "type": "string",
691
+ "description": "garment type (garments-1.0 vocabulary) for kind=clothing"
692
+ },
693
+ "accessory": {
694
+ "type": "string",
695
+ "description": "accessory type (garments-1.0/accessories/types) for kind=accessory — meaningful when accessory_use is 'worn'"
696
+ },
697
+ "accessory_use": {
698
+ "enum": [
699
+ "worn",
700
+ "not-worn",
701
+ "companion",
702
+ "other"
703
+ ],
704
+ "description": "nature of an accessory (kind=accessory): worn = worn or carried by the character (has a body region, see 'accessory'); not-worn = vehicle, mount, furniture…; companion = drone, robot, animal…; other. Default: worn."
705
+ },
706
+ "area": {
707
+ "enum": [
708
+ "face",
709
+ "body"
710
+ ],
711
+ "description": "for kind=pilosity"
712
+ },
713
+ "region": {
714
+ "type": "string",
715
+ "description": "free-form region for kind=feature (horns, tail…)"
716
+ },
717
+ "text": {
718
+ "type": "string",
719
+ "maxLength": 8000,
720
+ "description": "for kind=description"
721
+ },
722
+ "use": {
723
+ "enum": [
724
+ "background",
725
+ "location",
726
+ "pose-only",
727
+ "other"
728
+ ],
729
+ "description": "environment variants: chat / video-avatar background, or a place tied to the character (home, workplace…); posture photos: pose-only (inference keeps only the pose)"
730
+ },
731
+ "videos": {
732
+ "type": "array",
733
+ "items": {
734
+ "$ref": "#/$defs/aid"
735
+ }
736
+ },
737
+ "topology": {
738
+ "type": "string"
739
+ },
740
+ "blendshapes": {
741
+ "type": "string"
742
+ },
743
+ "covers": {
744
+ "type": "array",
745
+ "items": {
746
+ "type": "string"
747
+ }
748
+ },
749
+ "max_bytes_ack": {
750
+ "type": "boolean",
751
+ "description": "the author has agreed to exceed the video cap"
752
+ },
753
+ "allow_multiple_sheets": {
754
+ "type": "boolean",
755
+ "description": "character-sheet: several sheets allowed (coherence is the author's responsibility)"
756
+ },
757
+ "age": {
758
+ "$ref": "#/$defs/age",
759
+ "description": "Depicted age of this variant. Required for face, body, character-sheet, reference-set (if morphology is human / humanoid / anthropomorphic-animal) and intimate (≥ 18); optional for hair, pilosity, 3D, identity weights; absent for clothing, accessory, feature, description."
760
+ },
761
+ "files": {
762
+ "type": "array",
763
+ "items": {
764
+ "$ref": "#/$defs/aid"
765
+ },
766
+ "description": "files category: the variant's assets (skill: SKILL.md folder + resources; memory: MEMORY.md…; document / other)"
767
+ },
768
+ "entry": {
769
+ "$ref": "#/$defs/path",
770
+ "description": "entry file (e.g. SKILL.md, MEMORY.md)"
771
+ },
772
+ "target": {
773
+ "type": "string",
774
+ "description": "target agent profile for a skill / memory: agent-skills (agentskills.io), openclaw, hermes, claude, custom"
775
+ },
776
+ "self_contained": {
777
+ "type": "boolean",
778
+ "description": "volume3d: false = the author accepts a 3D file whose external resources (MTL, textures, .bin) are absent, e.g. an untextured posing mesh"
779
+ },
780
+ "daz_category": {
781
+ "enum": [
782
+ "characters",
783
+ "wearables",
784
+ "hair",
785
+ "environments",
786
+ "props",
787
+ "poses-animations"
788
+ ],
789
+ "description": "volume3d/daz: Daz Studio content category (Daz 3D store taxonomy)"
790
+ },
791
+ "figure": {
792
+ "type": "string",
793
+ "description": "volume3d/daz: base figure generation, e.g. Genesis 9, Genesis 8.1 Female"
794
+ },
795
+ "requires": {
796
+ "type": "array",
797
+ "description": "volume3d/daz: store products the DUF files depend on (not embedded)",
798
+ "items": {
799
+ "type": "object",
800
+ "required": [
801
+ "name"
802
+ ],
803
+ "properties": {
804
+ "name": {
805
+ "type": "string"
806
+ },
807
+ "url": {
808
+ "type": "string"
809
+ },
810
+ "sku": {
811
+ "type": "string"
812
+ },
813
+ "vendor": {
814
+ "type": "string"
815
+ }
816
+ }
817
+ }
818
+ },
819
+ "nudity": {
820
+ "type": "boolean",
821
+ "description": "true when an image of this variant shows nudity WITHOUT visible genitals (bare chest, buttocks…). Visible genitals or sexual acts belong only in kind intimate. Forbidden in any preset under 18; for a real person, requires consent scope nudity or intimate."
822
+ }
823
+ },
824
+ "required": [
825
+ "kind"
826
+ ]
827
+ },
828
+ "preset": {
829
+ "type": "object",
830
+ "required": [
831
+ "slots"
832
+ ],
833
+ "properties": {
834
+ "label": {
835
+ "type": "string",
836
+ "maxLength": 120
837
+ },
838
+ "extends": {
839
+ "$ref": "#/$defs/vid"
840
+ },
841
+ "style": {
842
+ "$ref": "#/$defs/style"
843
+ },
844
+ "slots": {
845
+ "type": "object",
846
+ "propertyNames": {
847
+ "pattern": "^(personality|appearance|identity_weights|volume3d|voice|posture|motion|files|x-[a-z0-9-]+)$"
848
+ },
849
+ "additionalProperties": {
850
+ "type": "array",
851
+ "items": {
852
+ "$ref": "#/$defs/vid"
853
+ },
854
+ "uniqueItems": true
855
+ },
856
+ "description": "Elements APPLIED by default when the preset is selected (the default look). A child preset replaces a whole category list."
857
+ },
858
+ "alternatives": {
859
+ "type": "object",
860
+ "description": "Compatible elements OFFERED with this preset only (clothing, hairstyles, accessories, other voices…). Never applied by default; an advanced reader may swap them in, re-checking age, regions and style. Not allowed on the libraries (posture, motion, files). A child preset replaces a whole category list.",
861
+ "propertyNames": {
862
+ "pattern": "^(personality|appearance|identity_weights|volume3d|voice|x-[a-z0-9-]+)$"
863
+ },
864
+ "additionalProperties": {
865
+ "type": "array",
866
+ "items": {
867
+ "$ref": "#/$defs/vid"
868
+ },
869
+ "uniqueItems": true
870
+ }
871
+ },
872
+ "primary_image": {
873
+ "$ref": "#/$defs/aid",
874
+ "description": "Image asset that shows the preset's default look (outfit and hair included). Must belong to a variant applied by the preset (slots). Default: the first image of the first face / reference-set / character-sheet / body applied. When the preset applies no clothing (or no hairstyle), the outfit (or hair) visible on this image IS the default. The default preset's primary image is the source of the file thumbnail unless thumbnail_source says otherwise."
875
+ },
876
+ "age_override": {
877
+ "$ref": "#/$defs/age",
878
+ "description": "Preset age floor (useful for presets without a morphological element, e.g. text only). Preset age = min(ages of the resolved variants, age_override)."
879
+ },
880
+ "completeness": {
881
+ "$ref": "#/$defs/completeness"
882
+ },
883
+ "coherence": {
884
+ "$ref": "#/$defs/coherence"
885
+ },
886
+ "targets_ready": {
887
+ "type": "array",
888
+ "items": {
889
+ "type": "string"
890
+ }
891
+ },
892
+ "permissions_override": {
893
+ "type": "object",
894
+ "description": "Optional, rarely used: partial override of the global permissions for this preset (never more permissive than the preset's age allows).",
895
+ "properties": {
896
+ "avatarPermission": {
897
+ "enum": [
898
+ "onlyAuthor",
899
+ "onlySeparatelyLicensedPerson",
900
+ "everyone"
901
+ ]
902
+ },
903
+ "commercialUsage": {
904
+ "enum": [
905
+ "personalNonProfit",
906
+ "personalProfit",
907
+ "corporation"
908
+ ]
909
+ },
910
+ "modification": {
911
+ "enum": [
912
+ "prohibited",
913
+ "allowModification",
914
+ "allowModificationRedistribution"
915
+ ]
916
+ },
917
+ "allowRedistribution": {
918
+ "type": "boolean"
919
+ },
920
+ "creditNotation": {
921
+ "enum": [
922
+ "required",
923
+ "unnecessary"
924
+ ]
925
+ },
926
+ "allowExcessivelyViolentUsage": {
927
+ "type": "boolean"
928
+ },
929
+ "allowSexualUsage": {
930
+ "type": "boolean"
931
+ },
932
+ "allowPoliticalOrReligiousUsage": {
933
+ "type": "boolean"
934
+ },
935
+ "allowAntisocialOrHateUsage": {
936
+ "type": "boolean"
937
+ },
938
+ "allowVoiceCloning": {
939
+ "type": "boolean"
940
+ },
941
+ "allowTraining": {
942
+ "enum": [
943
+ "none",
944
+ "finetune-private",
945
+ "finetune-public",
946
+ "any"
947
+ ]
948
+ },
949
+ "allowImpersonationOfRealPerson": {
950
+ "type": "boolean"
951
+ },
952
+ "ageRating": {
953
+ "type": "string"
954
+ },
955
+ "minUserAge": {
956
+ "type": "integer",
957
+ "minimum": 0
958
+ },
959
+ "aiDisclosure": {
960
+ "type": "boolean"
961
+ }
962
+ },
963
+ "additionalProperties": true
964
+ },
965
+ "style_tags": {
966
+ "type": "array",
967
+ "items": {
968
+ "$ref": "#/$defs/tag"
969
+ },
970
+ "maxItems": 8,
971
+ "description": "free-form refinements complementing style (e.g. anime-90s, ghibli-like)"
972
+ },
973
+ "identity": {
974
+ "$ref": "#/$defs/vid",
975
+ "description": "the character this preset belongs to (inherited through extends; default: default_identity)"
976
+ },
977
+ "rules": {
978
+ "type": "object",
979
+ "properties": {
980
+ "exclusive_regions": {
981
+ "type": "boolean",
982
+ "default": true
983
+ },
984
+ "single_per_kind": {
985
+ "type": "boolean",
986
+ "default": true
987
+ }
988
+ }
989
+ },
990
+ "defaults": {
991
+ "type": "object",
992
+ "description": "variant to use by default in a library (posture, motion) — optional",
993
+ "additionalProperties": {
994
+ "$ref": "#/$defs/vid"
995
+ }
996
+ }
997
+ }
998
+ },
999
+ "completeness": {
1000
+ "type": "object",
1001
+ "required": [
1002
+ "score",
1003
+ "level",
1004
+ "layers"
1005
+ ],
1006
+ "properties": {
1007
+ "score": {
1008
+ "type": "integer",
1009
+ "minimum": 0,
1010
+ "maximum": 100
1011
+ },
1012
+ "level": {
1013
+ "enum": [
1014
+ "A",
1015
+ "B",
1016
+ "C",
1017
+ "D"
1018
+ ]
1019
+ },
1020
+ "layers": {
1021
+ "type": "object",
1022
+ "additionalProperties": {
1023
+ "type": "integer",
1024
+ "minimum": 0,
1025
+ "maximum": 100
1026
+ }
1027
+ },
1028
+ "targets_ready": {
1029
+ "type": "array",
1030
+ "items": {
1031
+ "enum": [
1032
+ "chat-text",
1033
+ "chat-voice",
1034
+ "video-realtime",
1035
+ "image-video-gen",
1036
+ "game-3d",
1037
+ "agent-persona",
1038
+ "print-3d",
1039
+ "archive",
1040
+ "agent-runtime"
1041
+ ]
1042
+ }
1043
+ },
1044
+ "computed_by": {
1045
+ "type": "string"
1046
+ },
1047
+ "computed_at": {
1048
+ "type": "string",
1049
+ "format": "date-time"
1050
+ }
1051
+ }
1052
+ },
1053
+ "coherence": {
1054
+ "type": "object",
1055
+ "required": [
1056
+ "score",
1057
+ "computed_by"
1058
+ ],
1059
+ "properties": {
1060
+ "score": {
1061
+ "type": "integer",
1062
+ "minimum": 0,
1063
+ "maximum": 100
1064
+ },
1065
+ "method": {
1066
+ "enum": [
1067
+ "heuristic",
1068
+ "ai-api",
1069
+ "platform-native",
1070
+ "human"
1071
+ ]
1072
+ },
1073
+ "computed_by": {
1074
+ "type": "string"
1075
+ },
1076
+ "computed_at": {
1077
+ "type": "string",
1078
+ "format": "date-time"
1079
+ },
1080
+ "issues": {
1081
+ "type": "array",
1082
+ "items": {
1083
+ "type": "object",
1084
+ "required": [
1085
+ "severity",
1086
+ "message"
1087
+ ],
1088
+ "properties": {
1089
+ "severity": {
1090
+ "enum": [
1091
+ "info",
1092
+ "minor",
1093
+ "major",
1094
+ "illegal"
1095
+ ]
1096
+ },
1097
+ "elements": {
1098
+ "type": "array",
1099
+ "items": {
1100
+ "type": "string"
1101
+ }
1102
+ },
1103
+ "message": {
1104
+ "type": "string"
1105
+ }
1106
+ }
1107
+ }
1108
+ }
1109
+ }
1110
+ },
1111
+ "asset": {
1112
+ "type": "object",
1113
+ "required": [
1114
+ "id",
1115
+ "role",
1116
+ "mediaType",
1117
+ "license"
1118
+ ],
1119
+ "anyOf": [
1120
+ {
1121
+ "required": [
1122
+ "path",
1123
+ "bytes",
1124
+ "sha256"
1125
+ ]
1126
+ },
1127
+ {
1128
+ "required": [
1129
+ "uri"
1130
+ ]
1131
+ }
1132
+ ],
1133
+ "properties": {
1134
+ "id": {
1135
+ "$ref": "#/$defs/aid"
1136
+ },
1137
+ "path": {
1138
+ "$ref": "#/$defs/path"
1139
+ },
1140
+ "uri": {
1141
+ "type": "string",
1142
+ "pattern": "^https://",
1143
+ "description": "External reference (e.g. LoRA weights by link). sha256 pins the exact file; without it the link follows the latest version (not reproducible)."
1144
+ },
1145
+ "role": {
1146
+ "enum": [
1147
+ "avatar",
1148
+ "derived",
1149
+ "document",
1150
+ "engine-artifact",
1151
+ "expression",
1152
+ "environment",
1153
+ "mesh",
1154
+ "motion-clip",
1155
+ "motion-reference",
1156
+ "other",
1157
+ "pose-image",
1158
+ "print",
1159
+ "reference",
1160
+ "sheet",
1161
+ "splat",
1162
+ "texture",
1163
+ "video",
1164
+ "view",
1165
+ "voice-consent",
1166
+ "voice-sample",
1167
+ "weights",
1168
+ "skill-file",
1169
+ "memory",
1170
+ "file",
1171
+ "archive"
1172
+ ]
1173
+ },
1174
+ "mediaType": {
1175
+ "type": "string",
1176
+ "pattern": "^[a-z0-9!#$&^_.+-]+/[a-zA-Z0-9!#$&^_.+-]+$"
1177
+ },
1178
+ "bytes": {
1179
+ "type": "integer",
1180
+ "minimum": 0
1181
+ },
1182
+ "sha256": {
1183
+ "type": "string",
1184
+ "pattern": "^[a-f0-9]{64}$"
1185
+ },
1186
+ "license": {
1187
+ "type": "string"
1188
+ },
1189
+ "digitalSourceType": {
1190
+ "type": "string",
1191
+ "format": "uri"
1192
+ },
1193
+ "generator": {
1194
+ "type": "string"
1195
+ },
1196
+ "style": {
1197
+ "$ref": "#/$defs/style"
1198
+ },
1199
+ "subject": {
1200
+ "enum": [
1201
+ "head",
1202
+ "body",
1203
+ "hands",
1204
+ "hair",
1205
+ "outfit",
1206
+ "detail"
1207
+ ]
1208
+ },
1209
+ "angle": {
1210
+ "enum": [
1211
+ "front",
1212
+ "left34",
1213
+ "left",
1214
+ "leftback34",
1215
+ "back",
1216
+ "rightback34",
1217
+ "right",
1218
+ "right34",
1219
+ "top",
1220
+ "low34"
1221
+ ]
1222
+ },
1223
+ "framing": {
1224
+ "enum": [
1225
+ "closeup",
1226
+ "head",
1227
+ "bust",
1228
+ "full"
1229
+ ]
1230
+ },
1231
+ "width": {
1232
+ "type": "integer"
1233
+ },
1234
+ "height": {
1235
+ "type": "integer"
1236
+ },
1237
+ "duration_s": {
1238
+ "type": "number",
1239
+ "minimum": 0
1240
+ },
1241
+ "fps": {
1242
+ "type": "number"
1243
+ },
1244
+ "transcript": {
1245
+ "$ref": "#/$defs/path"
1246
+ },
1247
+ "emotion": {
1248
+ "type": "string"
1249
+ },
1250
+ "rig": {
1251
+ "type": "string"
1252
+ },
1253
+ "labels": {
1254
+ "type": "array",
1255
+ "items": {
1256
+ "type": "string"
1257
+ }
1258
+ },
1259
+ "method": {
1260
+ "enum": [
1261
+ "canny",
1262
+ "lineart",
1263
+ "lineart-anime",
1264
+ "softedge",
1265
+ "hed",
1266
+ "pidinet",
1267
+ "teed",
1268
+ "depth",
1269
+ "normal",
1270
+ "openpose",
1271
+ "segmentation",
1272
+ "thumbnail",
1273
+ "other"
1274
+ ]
1275
+ },
1276
+ "source": {
1277
+ "$ref": "#/$defs/aid"
1278
+ },
1279
+ "bits": {
1280
+ "enum": [
1281
+ 1,
1282
+ 2,
1283
+ 4,
1284
+ 8
1285
+ ]
1286
+ },
1287
+ "base_model": {
1288
+ "type": "string"
1289
+ },
1290
+ "regions": {
1291
+ "type": "array",
1292
+ "items": {
1293
+ "type": "object",
1294
+ "required": [
1295
+ "box",
1296
+ "subject",
1297
+ "angle"
1298
+ ],
1299
+ "properties": {
1300
+ "box": {
1301
+ "type": "array",
1302
+ "items": {
1303
+ "type": "number",
1304
+ "minimum": 0,
1305
+ "maximum": 1
1306
+ },
1307
+ "minItems": 4,
1308
+ "maxItems": 4
1309
+ },
1310
+ "subject": {
1311
+ "type": "string"
1312
+ },
1313
+ "angle": {
1314
+ "type": "string"
1315
+ },
1316
+ "framing": {
1317
+ "type": "string"
1318
+ },
1319
+ "asset": {
1320
+ "$ref": "#/$defs/aid"
1321
+ },
1322
+ "confidence": {
1323
+ "type": "number"
1324
+ },
1325
+ "human_confirmed": {
1326
+ "type": "boolean"
1327
+ }
1328
+ }
1329
+ }
1330
+ },
1331
+ "derived_from": {
1332
+ "$ref": "#/$defs/aid"
1333
+ },
1334
+ "estimated": {
1335
+ "type": "boolean"
1336
+ },
1337
+ "confidence": {
1338
+ "type": "number"
1339
+ },
1340
+ "human_confirmed": {
1341
+ "type": "boolean"
1342
+ },
1343
+ "style_tags": {
1344
+ "type": "array",
1345
+ "items": {
1346
+ "$ref": "#/$defs/tag"
1347
+ },
1348
+ "maxItems": 8,
1349
+ "description": "free-form refinements complementing style (e.g. anime-90s, ghibli-like)"
1350
+ },
1351
+ "language": {
1352
+ "type": "string"
1353
+ }
1354
+ },
1355
+ "allOf": [
1356
+ {
1357
+ "if": {
1358
+ "properties": {
1359
+ "role": {
1360
+ "const": "voice-sample"
1361
+ }
1362
+ }
1363
+ },
1364
+ "then": {
1365
+ "required": [
1366
+ "duration_s"
1367
+ ]
1368
+ }
1369
+ },
1370
+ {
1371
+ "if": {
1372
+ "properties": {
1373
+ "role": {
1374
+ "const": "derived"
1375
+ }
1376
+ }
1377
+ },
1378
+ "then": {
1379
+ "required": [
1380
+ "method",
1381
+ "source"
1382
+ ]
1383
+ }
1384
+ },
1385
+ {
1386
+ "if": {
1387
+ "properties": {
1388
+ "role": {
1389
+ "const": "weights"
1390
+ }
1391
+ }
1392
+ },
1393
+ "then": {
1394
+ "required": [
1395
+ "base_model"
1396
+ ]
1397
+ }
1398
+ }
1399
+ ]
1400
+ },
1401
+ "permissions": {
1402
+ "type": "object",
1403
+ "required": [
1404
+ "avatarPermission",
1405
+ "commercialUsage",
1406
+ "modification",
1407
+ "aiDisclosure"
1408
+ ],
1409
+ "properties": {
1410
+ "avatarPermission": {
1411
+ "enum": [
1412
+ "onlyAuthor",
1413
+ "onlySeparatelyLicensedPerson",
1414
+ "everyone"
1415
+ ]
1416
+ },
1417
+ "commercialUsage": {
1418
+ "enum": [
1419
+ "personalNonProfit",
1420
+ "personalProfit",
1421
+ "corporation"
1422
+ ]
1423
+ },
1424
+ "modification": {
1425
+ "enum": [
1426
+ "prohibited",
1427
+ "allowModification",
1428
+ "allowModificationRedistribution"
1429
+ ]
1430
+ },
1431
+ "allowRedistribution": {
1432
+ "type": "boolean"
1433
+ },
1434
+ "creditNotation": {
1435
+ "enum": [
1436
+ "required",
1437
+ "unnecessary"
1438
+ ]
1439
+ },
1440
+ "allowExcessivelyViolentUsage": {
1441
+ "type": "boolean"
1442
+ },
1443
+ "allowSexualUsage": {
1444
+ "type": "boolean"
1445
+ },
1446
+ "allowPoliticalOrReligiousUsage": {
1447
+ "type": "boolean"
1448
+ },
1449
+ "allowAntisocialOrHateUsage": {
1450
+ "type": "boolean"
1451
+ },
1452
+ "allowVoiceCloning": {
1453
+ "type": "boolean"
1454
+ },
1455
+ "allowTraining": {
1456
+ "enum": [
1457
+ "none",
1458
+ "finetune-private",
1459
+ "finetune-public",
1460
+ "any"
1461
+ ]
1462
+ },
1463
+ "allowImpersonationOfRealPerson": {
1464
+ "type": "boolean"
1465
+ },
1466
+ "ageRating": {
1467
+ "type": "string"
1468
+ },
1469
+ "minUserAge": {
1470
+ "type": "integer",
1471
+ "minimum": 0
1472
+ },
1473
+ "aiDisclosure": {
1474
+ "type": "boolean"
1475
+ }
1476
+ }
1477
+ },
1478
+ "consent": {
1479
+ "type": "object",
1480
+ "additionalProperties": true,
1481
+ "properties": {
1482
+ "subject_is_real_person": {
1483
+ "const": true
1484
+ },
1485
+ "subject_ref": {
1486
+ "type": "string",
1487
+ "description": "non-identifying internal reference (never an ID number)"
1488
+ },
1489
+ "scope": {
1490
+ "type": "array",
1491
+ "minItems": 1,
1492
+ "items": {
1493
+ "enum": [
1494
+ "voice-synthesis",
1495
+ "likeness-image",
1496
+ "likeness-3d",
1497
+ "conversational-persona",
1498
+ "motion-capture",
1499
+ "training",
1500
+ "intimate",
1501
+ "nudity"
1502
+ ]
1503
+ }
1504
+ },
1505
+ "excluded": {
1506
+ "type": "array",
1507
+ "items": {
1508
+ "type": "string"
1509
+ }
1510
+ },
1511
+ "granted": {
1512
+ "type": "string",
1513
+ "format": "date"
1514
+ },
1515
+ "expires": {
1516
+ "type": [
1517
+ "string",
1518
+ "null"
1519
+ ],
1520
+ "format": "date"
1521
+ },
1522
+ "jurisdictions": {
1523
+ "type": "array",
1524
+ "items": {
1525
+ "type": "string",
1526
+ "pattern": "^[A-Z]{2}$"
1527
+ }
1528
+ },
1529
+ "revocation_uri": {
1530
+ "type": "string",
1531
+ "format": "uri"
1532
+ },
1533
+ "age_of_subject_at_consent": {
1534
+ "type": "number",
1535
+ "minimum": 18,
1536
+ "description": "consent from a minor is not admissible in this format"
1537
+ },
1538
+ "proof": {
1539
+ "type": "array",
1540
+ "items": {
1541
+ "type": "object",
1542
+ "required": [
1543
+ "type"
1544
+ ],
1545
+ "properties": {
1546
+ "type": {
1547
+ "enum": [
1548
+ "signed-document",
1549
+ "verbal-statement-audio",
1550
+ "video-statement",
1551
+ "platform-attestation",
1552
+ "other"
1553
+ ]
1554
+ },
1555
+ "path": {
1556
+ "type": "string",
1557
+ "pattern": "^(?!/)(?!.*\\.\\.)[A-Za-z0-9._/-]+$"
1558
+ },
1559
+ "sha256": {
1560
+ "type": "string",
1561
+ "pattern": "^[a-f0-9]{64}$"
1562
+ },
1563
+ "uri": {
1564
+ "type": "string",
1565
+ "format": "uri"
1566
+ },
1567
+ "transcript": {
1568
+ "type": "string",
1569
+ "pattern": "^(?!/)(?!.*\\.\\.)[A-Za-z0-9._/-]+$"
1570
+ }
1571
+ },
1572
+ "allOf": [
1573
+ {
1574
+ "if": {
1575
+ "required": [
1576
+ "path"
1577
+ ]
1578
+ },
1579
+ "then": {
1580
+ "required": [
1581
+ "sha256"
1582
+ ]
1583
+ }
1584
+ }
1585
+ ]
1586
+ },
1587
+ "minItems": 1
1588
+ },
1589
+ "subject": {
1590
+ "type": "object",
1591
+ "properties": {
1592
+ "name": {
1593
+ "type": "string"
1594
+ },
1595
+ "contact_hash": {
1596
+ "type": "string"
1597
+ }
1598
+ },
1599
+ "description": "never an ID number or contact details in clear text"
1600
+ }
1601
+ },
1602
+ "required": [
1603
+ "subject_is_real_person",
1604
+ "scope",
1605
+ "granted",
1606
+ "proof"
1607
+ ]
1608
+ },
1609
+ "identity": {
1610
+ "type": "object",
1611
+ "required": [
1612
+ "name",
1613
+ "fictional",
1614
+ "morphology"
1615
+ ],
1616
+ "properties": {
1617
+ "name": {
1618
+ "type": "string",
1619
+ "minLength": 1,
1620
+ "maxLength": 200
1621
+ },
1622
+ "nickname": {
1623
+ "type": "string",
1624
+ "maxLength": 100
1625
+ },
1626
+ "summary": {
1627
+ "type": "string",
1628
+ "maxLength": 2000
1629
+ },
1630
+ "fictional": {
1631
+ "type": "boolean"
1632
+ },
1633
+ "morphology": {
1634
+ "type": "object",
1635
+ "required": [
1636
+ "class"
1637
+ ],
1638
+ "properties": {
1639
+ "class": {
1640
+ "enum": [
1641
+ "human",
1642
+ "humanoid",
1643
+ "anthropomorphic-animal",
1644
+ "quadruped",
1645
+ "avian",
1646
+ "aquatic",
1647
+ "mechanical",
1648
+ "amorphous",
1649
+ "other"
1650
+ ],
1651
+ "description": "human = human; humanoid = human-shaped non-human (elf, android, alien)"
1652
+ },
1653
+ "species": {
1654
+ "type": "string"
1655
+ },
1656
+ "notes": {
1657
+ "type": "string"
1658
+ }
1659
+ }
1660
+ },
1661
+ "tags": {
1662
+ "type": "object"
1663
+ },
1664
+ "consent": {
1665
+ "oneOf": [
1666
+ {
1667
+ "type": "null"
1668
+ },
1669
+ {
1670
+ "$ref": "#/$defs/consent"
1671
+ }
1672
+ ]
1673
+ },
1674
+ "rights": {
1675
+ "type": "object",
1676
+ "description": "Rights of THIS character. When present, it replaces the root `rights` entirely for this character (no merge); characters without it use the root rights. Consent stays in `consent`.",
1677
+ "required": [
1678
+ "permissions"
1679
+ ],
1680
+ "properties": {
1681
+ "permissions": {
1682
+ "$ref": "#/$defs/permissions"
1683
+ }
1684
+ }
1685
+ },
1686
+ "default_preset": {
1687
+ "$ref": "#/$defs/vid",
1688
+ "description": "The default preset of this character (must belong to it). The root default_preset is the default character's."
1689
+ }
1690
+ }
1691
+ },
1692
+ "kinds": {
1693
+ "personality": [
1694
+ "card",
1695
+ "description"
1696
+ ],
1697
+ "appearance": [
1698
+ "reference-set",
1699
+ "character-sheet",
1700
+ "face",
1701
+ "body",
1702
+ "hair",
1703
+ "clothing",
1704
+ "accessory",
1705
+ "intimate",
1706
+ "pilosity",
1707
+ "feature",
1708
+ "environment",
1709
+ "description"
1710
+ ],
1711
+ "identity_weights": [
1712
+ "lora",
1713
+ "lycoris",
1714
+ "dora",
1715
+ "textual-inversion",
1716
+ "ip-adapter-embedding",
1717
+ "reference-latent",
1718
+ "dreambooth",
1719
+ "other"
1720
+ ],
1721
+ "volume3d": [
1722
+ "mesh",
1723
+ "face-mesh",
1724
+ "point-cloud",
1725
+ "print",
1726
+ "other",
1727
+ "environment",
1728
+ "daz"
1729
+ ],
1730
+ "voice": [
1731
+ "samples",
1732
+ "described",
1733
+ "embedding"
1734
+ ],
1735
+ "posture": [
1736
+ "photo",
1737
+ "photos",
1738
+ "openpose",
1739
+ "silhouette",
1740
+ "attitude",
1741
+ "description"
1742
+ ],
1743
+ "motion": [
1744
+ "clips",
1745
+ "video",
1746
+ "attitude",
1747
+ "description"
1748
+ ],
1749
+ "files": [
1750
+ "skill",
1751
+ "memory",
1752
+ "document",
1753
+ "other"
1754
+ ]
1755
+ }
1756
+ }
1757
+ }