summer-engine 2.0.0 → 2.3.0
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.
- package/{marketplace.json → .claude-plugin/marketplace.json} +3 -3
- package/.claude-plugin/plugin.json +37 -4
- package/.codex-plugin/plugin.json +38 -5
- package/.cursor-plugin/plugin.json +37 -4
- package/.factory-plugin/plugin.json +20 -0
- package/.opencode/INSTALL.md +9 -3
- package/.opencode/plugins/summer.js +0 -2
- package/AGENTS.md +51 -0
- package/CLAUDE.md +5 -0
- package/GEMINI.md +56 -0
- package/README.md +211 -61
- package/_persona/summer/SKILL.md +113 -0
- package/dist/commands/install.js +2 -2
- package/dist/commands/setup.js +4 -0
- package/dist/commands/skills.js +115 -2
- package/dist/lib/agent-config.d.ts +2 -2
- package/dist/lib/agent-config.js +171 -5
- package/dist/lib/skills-registry.d.ts +290 -26
- package/dist/lib/skills-registry.js +503 -1
- package/dist/mcp/tools/generate-tools.js +101 -0
- package/gemini-extension.json +2 -2
- package/package.json +9 -3
- package/skills/2d-assets/character-portrait/SKILL.md +196 -0
- package/skills/2d-assets/concept-art/SKILL.md +152 -0
- package/skills/2d-assets/pixel-art/SKILL.md +180 -0
- package/skills/2d-assets/skybox-panorama/SKILL.md +207 -0
- package/skills/2d-assets/sprite-sheet/SKILL.md +239 -0
- package/skills/2d-assets/tileable-texture/SKILL.md +205 -0
- package/skills/2d-assets/ui-graphics/SKILL.md +210 -0
- package/skills/3d-assets/character-model/SKILL.md +225 -0
- package/skills/3d-assets/environment-kit/SKILL.md +164 -0
- package/skills/3d-assets/organic-model/SKILL.md +192 -0
- package/skills/3d-assets/prop-model/SKILL.md +133 -0
- package/skills/3d-assets/vehicle-model/SKILL.md +202 -0
- package/skills/ai-and-npcs/design-npc/SKILL.md +3 -1
- package/skills/animation/animation-tree/SKILL.md +260 -0
- package/skills/animation/facial-and-lipsync/SKILL.md +282 -0
- package/skills/animation/generate-motion/SKILL.md +129 -0
- package/skills/animation/procedural-animation/SKILL.md +234 -0
- package/skills/animation/retarget/SKILL.md +172 -0
- package/skills/asset-pipeline/asset-strategy/SKILL.md +102 -212
- package/skills/audio/adaptive-music/SKILL.md +326 -0
- package/skills/audio/ambient-bed/SKILL.md +278 -0
- package/skills/audio/music-track/SKILL.md +268 -0
- package/skills/audio/sound-effect/SKILL.md +237 -0
- package/skills/audio/voice-line/SKILL.md +253 -0
- package/skills/catalog.yaml +249 -3
- package/skills/video/animated-loop/SKILL.md +200 -0
- package/skills/video/cinematic-cutscene/SKILL.md +204 -0
- package/skills/video/trailer-shot/SKILL.md +203 -0
- package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +28 -0
- package/skills/visual-effects/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +51 -0
- package/skills/visual-effects/{vfx → game-feel}/SKILL.md +1 -1
- package/skills/visual-effects/recipes/dissolve/SKILL.md +349 -0
- package/skills/visual-effects/recipes/fire/SKILL.md +387 -0
- package/skills/visual-effects/recipes/hit-spark/SKILL.md +330 -0
- package/skills/visual-effects/recipes/lightning/SKILL.md +372 -0
- package/skills/visual-effects/recipes/magic-glow/SKILL.md +377 -0
- package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +326 -0
- package/skills/visual-effects/recipes/smoke/SKILL.md +381 -0
- package/skills/visual-effects/recipes/water-ripple/SKILL.md +340 -0
|
@@ -4,9 +4,16 @@ export const AGENT_CLIENTS = [
|
|
|
4
4
|
"claude-code",
|
|
5
5
|
"cursor",
|
|
6
6
|
"windsurf",
|
|
7
|
+
"cline",
|
|
8
|
+
"roo-code",
|
|
9
|
+
"gemini",
|
|
10
|
+
"opencode",
|
|
7
11
|
];
|
|
8
12
|
export const SKILL_CATEGORIES = [
|
|
9
13
|
"_meta",
|
|
14
|
+
"2d-assets",
|
|
15
|
+
"3d-assets",
|
|
16
|
+
"video",
|
|
10
17
|
"character-controllers",
|
|
11
18
|
"gameplay-mechanics",
|
|
12
19
|
"scripting-patterns",
|
|
@@ -274,7 +281,7 @@ export const SKILL_REGISTRY = [
|
|
|
274
281
|
testScenario: "Define audio direction (music + SFX vocabulary + dynamic plan) for a cozy farming sim; write .summer/audio-bible.md and configure the audio bus layout.",
|
|
275
282
|
},
|
|
276
283
|
{
|
|
277
|
-
name: "
|
|
284
|
+
name: "game-feel",
|
|
278
285
|
category: "visual-effects",
|
|
279
286
|
public: true,
|
|
280
287
|
clients: ALL_CLIENTS,
|
|
@@ -402,4 +409,499 @@ export const SKILL_REGISTRY = [
|
|
|
402
409
|
],
|
|
403
410
|
testScenario: "Run the Steam pre-flight checklist (Windows + Mac + Linux), validate icons/banners/screenshots/build config, and produce a release build only when green.",
|
|
404
411
|
},
|
|
412
|
+
{
|
|
413
|
+
name: "concept-art",
|
|
414
|
+
category: "2d-assets",
|
|
415
|
+
public: true,
|
|
416
|
+
clients: ALL_CLIENTS,
|
|
417
|
+
recommended: true,
|
|
418
|
+
requiresMcpTools: [
|
|
419
|
+
"summer_generate_image",
|
|
420
|
+
"summer_search_assets",
|
|
421
|
+
"summer_import_from_url",
|
|
422
|
+
],
|
|
423
|
+
testScenario: "User asks for 'concept art for the protagonist' — skill produces 3-4 variant prompts on a locked style anchor and writes prompts to art/concept/_prompts.md as fallback when MCP unavailable.",
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
name: "character-portrait",
|
|
427
|
+
category: "2d-assets",
|
|
428
|
+
public: true,
|
|
429
|
+
clients: ALL_CLIENTS,
|
|
430
|
+
recommended: true,
|
|
431
|
+
requiresMcpTools: [
|
|
432
|
+
"summer_generate_image",
|
|
433
|
+
"summer_search_assets",
|
|
434
|
+
"summer_import_from_url",
|
|
435
|
+
],
|
|
436
|
+
testScenario: "User asks for a 'final portrait of the queen for dialogue UI' — skill locks composition, generates one polished bust against a locked anchor, imports as res://art/portraits/queen.png.",
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
name: "pixel-art",
|
|
440
|
+
category: "2d-assets",
|
|
441
|
+
public: true,
|
|
442
|
+
clients: ALL_CLIENTS,
|
|
443
|
+
recommended: true,
|
|
444
|
+
requiresMcpTools: [
|
|
445
|
+
"summer_generate_image",
|
|
446
|
+
"summer_search_assets",
|
|
447
|
+
"summer_import_from_url",
|
|
448
|
+
],
|
|
449
|
+
testScenario: "User requests a '64x64 pixel art heart icon' — skill generates with style: 'pixel', enforces nearest-neighbor texture filter project setting, imports to res://art/sprites/.",
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
name: "ui-graphics",
|
|
453
|
+
category: "2d-assets",
|
|
454
|
+
public: true,
|
|
455
|
+
clients: ALL_CLIENTS,
|
|
456
|
+
recommended: false,
|
|
457
|
+
requiresMcpTools: [
|
|
458
|
+
"summer_generate_image",
|
|
459
|
+
"summer_import_from_url",
|
|
460
|
+
"summer_add_node",
|
|
461
|
+
"summer_set_prop",
|
|
462
|
+
],
|
|
463
|
+
testScenario: "User asks for an inventory grid icon set — skill generates flat-design transparent PNGs, sets up AtlasTexture import, wires into TextureRect / NinePatchRect.",
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
name: "tileable-texture",
|
|
467
|
+
category: "2d-assets",
|
|
468
|
+
public: true,
|
|
469
|
+
clients: ALL_CLIENTS,
|
|
470
|
+
recommended: false,
|
|
471
|
+
requiresMcpTools: [
|
|
472
|
+
"summer_generate_image",
|
|
473
|
+
"summer_import_from_url",
|
|
474
|
+
"summer_set_resource_property",
|
|
475
|
+
],
|
|
476
|
+
testScenario: "User asks for a 'seamless brick wall texture' — skill generates with seamless prompt suffix, applies to PlaneMesh + StandardMaterial3D with uv1_scale tiled.",
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
name: "sprite-sheet",
|
|
480
|
+
category: "2d-assets",
|
|
481
|
+
public: true,
|
|
482
|
+
clients: ALL_CLIENTS,
|
|
483
|
+
recommended: false,
|
|
484
|
+
requiresMcpTools: [
|
|
485
|
+
"summer_generate_image",
|
|
486
|
+
"summer_import_from_url",
|
|
487
|
+
"summer_set_resource_property",
|
|
488
|
+
"summer_add_node",
|
|
489
|
+
"summer_set_prop",
|
|
490
|
+
],
|
|
491
|
+
testScenario: "User requests a '4-frame walk cycle for the goblin' — skill generates per-frame at locked anchor, builds SpriteFrames resource, wires AnimatedSprite2D.",
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
name: "skybox-panorama",
|
|
495
|
+
category: "2d-assets",
|
|
496
|
+
public: true,
|
|
497
|
+
clients: ALL_CLIENTS,
|
|
498
|
+
recommended: false,
|
|
499
|
+
requiresMcpTools: [
|
|
500
|
+
"summer_generate_image",
|
|
501
|
+
"summer_import_from_url",
|
|
502
|
+
"summer_set_resource_property",
|
|
503
|
+
],
|
|
504
|
+
testScenario: "User asks for a 'sunset desert skybox' — skill generates equirectangular 2:1 panorama, wires PanoramaSkyMaterial on WorldEnvironment.",
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
name: "prop-model",
|
|
508
|
+
category: "3d-assets",
|
|
509
|
+
public: true,
|
|
510
|
+
clients: ALL_CLIENTS,
|
|
511
|
+
recommended: true,
|
|
512
|
+
requiresMcpTools: [
|
|
513
|
+
"summer_generate_3d",
|
|
514
|
+
"summer_search_assets",
|
|
515
|
+
"summer_import_from_url",
|
|
516
|
+
"summer_add_node",
|
|
517
|
+
"summer_set_prop",
|
|
518
|
+
],
|
|
519
|
+
testScenario: "User asks for 'a treasure chest' — skill calls summer_generate_3d via image-to-3d pipeline with white-background prompt suffix, imports as MeshInstance3D.",
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
name: "character-model",
|
|
523
|
+
category: "3d-assets",
|
|
524
|
+
public: true,
|
|
525
|
+
clients: ALL_CLIENTS,
|
|
526
|
+
recommended: true,
|
|
527
|
+
requiresMcpTools: [
|
|
528
|
+
"summer_generate_image",
|
|
529
|
+
"summer_generate_3d",
|
|
530
|
+
"summer_generate_motion",
|
|
531
|
+
"summer_search_assets",
|
|
532
|
+
"summer_inspect_resource",
|
|
533
|
+
"summer_add_node",
|
|
534
|
+
"summer_set_prop",
|
|
535
|
+
"summer_save_scene",
|
|
536
|
+
],
|
|
537
|
+
testScenario: "User asks for 'a knight character' — skill produces T-pose ref via image, gates rig pass on user approval, imports rigged glb, wires CharacterBody3D + Skeleton3D, hands off to animation/generate-motion.",
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
name: "environment-kit",
|
|
541
|
+
category: "3d-assets",
|
|
542
|
+
public: true,
|
|
543
|
+
clients: ALL_CLIENTS,
|
|
544
|
+
recommended: false,
|
|
545
|
+
requiresMcpTools: [
|
|
546
|
+
"summer_generate_3d",
|
|
547
|
+
"summer_search_assets",
|
|
548
|
+
"summer_import_from_url",
|
|
549
|
+
"summer_add_node",
|
|
550
|
+
"summer_set_prop",
|
|
551
|
+
"summer_save_scene",
|
|
552
|
+
],
|
|
553
|
+
testScenario: "User asks for 'a dungeon kit' — skill locks style anchor, generates 5-10 modular pieces with consistent prompt suffix, imports on snap-grid.",
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
name: "vehicle-model",
|
|
557
|
+
category: "3d-assets",
|
|
558
|
+
public: true,
|
|
559
|
+
clients: ALL_CLIENTS,
|
|
560
|
+
recommended: false,
|
|
561
|
+
requiresMcpTools: [
|
|
562
|
+
"summer_generate_3d",
|
|
563
|
+
"summer_search_assets",
|
|
564
|
+
"summer_import_from_url",
|
|
565
|
+
"summer_add_node",
|
|
566
|
+
"summer_set_prop",
|
|
567
|
+
],
|
|
568
|
+
testScenario: "User asks for 'a sci-fi hover bike' — skill provides multi-angle reference, generates with hard-surface model preference, recommends texture pass for panel detail.",
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
name: "organic-model",
|
|
572
|
+
category: "3d-assets",
|
|
573
|
+
public: true,
|
|
574
|
+
clients: ALL_CLIENTS,
|
|
575
|
+
recommended: false,
|
|
576
|
+
requiresMcpTools: [
|
|
577
|
+
"summer_generate_3d",
|
|
578
|
+
"summer_search_assets",
|
|
579
|
+
"summer_import_from_url",
|
|
580
|
+
"summer_add_node",
|
|
581
|
+
"summer_set_prop",
|
|
582
|
+
],
|
|
583
|
+
testScenario: "User asks for 'a glowing mushroom cluster' — skill generates organic shape via summer_generate_3d, imports with emission material, suggests MultiMeshInstance3D for forest fill.",
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
name: "generate-motion",
|
|
587
|
+
category: "animation",
|
|
588
|
+
public: true,
|
|
589
|
+
clients: ALL_CLIENTS,
|
|
590
|
+
recommended: true,
|
|
591
|
+
requiresMcpTools: [
|
|
592
|
+
"summer_generate_motion",
|
|
593
|
+
"summer_check_job",
|
|
594
|
+
"summer_search_assets",
|
|
595
|
+
"summer_inspect_resource",
|
|
596
|
+
"summer_get_scene_tree",
|
|
597
|
+
"summer_add_node",
|
|
598
|
+
"summer_set_prop",
|
|
599
|
+
"summer_set_resource_property",
|
|
600
|
+
"summer_save_scene",
|
|
601
|
+
],
|
|
602
|
+
testScenario: "User asks for 'a walk animation on the goblin' — skill verifies the rigged target, picks meshy-library backend for standard 'walk', wires the clip into AnimationPlayer.",
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
name: "retarget",
|
|
606
|
+
category: "animation",
|
|
607
|
+
public: true,
|
|
608
|
+
clients: ALL_CLIENTS,
|
|
609
|
+
recommended: false,
|
|
610
|
+
requiresMcpTools: [
|
|
611
|
+
"summer_generate_motion",
|
|
612
|
+
"summer_search_assets",
|
|
613
|
+
"summer_inspect_resource",
|
|
614
|
+
"summer_set_resource_property",
|
|
615
|
+
"summer_save_scene",
|
|
616
|
+
],
|
|
617
|
+
testScenario: "User asks to 'apply the goblin's walk to the orc' — skill identifies the source clip, retargets to the orc skeleton via SkeletonProfile, wires into the orc's AnimationPlayer.",
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
name: "animation-tree",
|
|
621
|
+
category: "animation",
|
|
622
|
+
public: true,
|
|
623
|
+
clients: ALL_CLIENTS,
|
|
624
|
+
recommended: false,
|
|
625
|
+
requiresMcpTools: [
|
|
626
|
+
"summer_get_scene_tree",
|
|
627
|
+
"summer_inspect_node",
|
|
628
|
+
"summer_add_node",
|
|
629
|
+
"summer_set_prop",
|
|
630
|
+
"summer_set_resource_property",
|
|
631
|
+
"summer_save_scene",
|
|
632
|
+
],
|
|
633
|
+
testScenario: "User has idle/walk/run clips — skill builds an AnimationTree with a BlendSpace1D driven by speed, wires the BlendTree to the player controller.",
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
name: "procedural-animation",
|
|
637
|
+
category: "animation",
|
|
638
|
+
public: true,
|
|
639
|
+
clients: ALL_CLIENTS,
|
|
640
|
+
recommended: false,
|
|
641
|
+
requiresMcpTools: [
|
|
642
|
+
"summer_get_scene_tree",
|
|
643
|
+
"summer_inspect_node",
|
|
644
|
+
"summer_add_node",
|
|
645
|
+
"summer_set_prop",
|
|
646
|
+
"summer_save_scene",
|
|
647
|
+
],
|
|
648
|
+
testScenario: "User asks for 'foot IK so the character doesn't sink into stairs' — skill adds SkeletonModification3DLookAt + raycasting on each foot, wires into the character's Skeleton3D.",
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
name: "facial-and-lipsync",
|
|
652
|
+
category: "animation",
|
|
653
|
+
public: true,
|
|
654
|
+
clients: ALL_CLIENTS,
|
|
655
|
+
recommended: false,
|
|
656
|
+
requiresMcpTools: [
|
|
657
|
+
"summer_inspect_resource",
|
|
658
|
+
"summer_set_resource_property",
|
|
659
|
+
"summer_save_scene",
|
|
660
|
+
"summer_generate_audio",
|
|
661
|
+
],
|
|
662
|
+
testScenario: "User has a voice line and wants the character to lip-sync to it — skill generates phoneme markers, builds blend-shape animation track on the character's MeshInstance3D.",
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
name: "sound-effect",
|
|
666
|
+
category: "audio",
|
|
667
|
+
public: true,
|
|
668
|
+
clients: ALL_CLIENTS,
|
|
669
|
+
recommended: true,
|
|
670
|
+
requiresMcpTools: [
|
|
671
|
+
"summer_generate_audio",
|
|
672
|
+
"summer_search_assets",
|
|
673
|
+
"summer_import_from_url",
|
|
674
|
+
"summer_add_node",
|
|
675
|
+
"summer_set_prop",
|
|
676
|
+
],
|
|
677
|
+
testScenario: "User asks for 'a sword swing sound' — skill reads audio bible, builds ElevenLabs SFX prompt with material+action+intensity, wires AudioStreamPlayer3D on the SFX bus.",
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
name: "music-track",
|
|
681
|
+
category: "audio",
|
|
682
|
+
public: true,
|
|
683
|
+
clients: ALL_CLIENTS,
|
|
684
|
+
recommended: true,
|
|
685
|
+
requiresMcpTools: [
|
|
686
|
+
"summer_generate_audio",
|
|
687
|
+
"summer_search_assets",
|
|
688
|
+
"summer_import_from_url",
|
|
689
|
+
"summer_add_node",
|
|
690
|
+
"summer_set_prop",
|
|
691
|
+
],
|
|
692
|
+
testScenario: "User asks for 'ambient forest theme music for level 1' — skill generates 60s loop via ElevenLabs music, imports with loop enabled, wires AudioStreamPlayer on Music bus.",
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
name: "ambient-bed",
|
|
696
|
+
category: "audio",
|
|
697
|
+
public: true,
|
|
698
|
+
clients: ALL_CLIENTS,
|
|
699
|
+
recommended: false,
|
|
700
|
+
requiresMcpTools: [
|
|
701
|
+
"summer_generate_audio",
|
|
702
|
+
"summer_search_assets",
|
|
703
|
+
"summer_import_from_url",
|
|
704
|
+
"summer_add_node",
|
|
705
|
+
"summer_set_prop",
|
|
706
|
+
],
|
|
707
|
+
testScenario: "User asks for 'rain on tin roof ambience' — skill generates loop-clean ambience, sets up positional or non-positional player on Ambient bus.",
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
name: "voice-line",
|
|
711
|
+
category: "audio",
|
|
712
|
+
public: true,
|
|
713
|
+
clients: ALL_CLIENTS,
|
|
714
|
+
recommended: true,
|
|
715
|
+
requiresMcpTools: [
|
|
716
|
+
"summer_generate_audio",
|
|
717
|
+
"summer_search_assets",
|
|
718
|
+
"summer_import_from_url",
|
|
719
|
+
"summer_add_node",
|
|
720
|
+
"summer_set_prop",
|
|
721
|
+
],
|
|
722
|
+
testScenario: "User asks for 'the king says: you have served me well' — skill picks a voice ID matching character traits, generates TTS, wires to character's mouth via AudioStreamPlayer3D.",
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
name: "adaptive-music",
|
|
726
|
+
category: "audio",
|
|
727
|
+
public: true,
|
|
728
|
+
clients: ALL_CLIENTS,
|
|
729
|
+
recommended: false,
|
|
730
|
+
requiresMcpTools: [
|
|
731
|
+
"summer_generate_audio",
|
|
732
|
+
"summer_search_assets",
|
|
733
|
+
"summer_inspect_node",
|
|
734
|
+
"summer_add_node",
|
|
735
|
+
"summer_set_prop",
|
|
736
|
+
"summer_set_resource_property",
|
|
737
|
+
],
|
|
738
|
+
testScenario: "User wants combat music that swells when enemies are nearby — skill generates layered stems (calm, tension, combat), wires AudioStreamPlaybackInteractive with combat-state listener.",
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
name: "cinematic-cutscene",
|
|
742
|
+
category: "video",
|
|
743
|
+
public: true,
|
|
744
|
+
clients: ALL_CLIENTS,
|
|
745
|
+
recommended: true,
|
|
746
|
+
requiresMcpTools: [
|
|
747
|
+
"summer_generate_video",
|
|
748
|
+
"summer_generate_image",
|
|
749
|
+
"summer_generate_audio",
|
|
750
|
+
"summer_search_assets",
|
|
751
|
+
"summer_import_from_url",
|
|
752
|
+
"summer_add_node",
|
|
753
|
+
"summer_set_prop",
|
|
754
|
+
],
|
|
755
|
+
testScenario: "User asks for 'an opening cutscene where the hero arrives at the castle' — skill builds reference image, generates 5-10s shot via image-to-video, wires VideoStreamPlayer in cutscene scene.",
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
name: "trailer-shot",
|
|
759
|
+
category: "video",
|
|
760
|
+
public: true,
|
|
761
|
+
clients: ALL_CLIENTS,
|
|
762
|
+
recommended: false,
|
|
763
|
+
requiresMcpTools: [
|
|
764
|
+
"summer_generate_video",
|
|
765
|
+
"summer_generate_image",
|
|
766
|
+
"summer_search_assets",
|
|
767
|
+
"summer_import_from_url",
|
|
768
|
+
],
|
|
769
|
+
testScenario: "User asks for 'a hero shot of the boss for the trailer' — skill picks kling for premium quality, generates 5s low-angle dramatic shot, exports to assets/trailer/.",
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
name: "animated-loop",
|
|
773
|
+
category: "video",
|
|
774
|
+
public: true,
|
|
775
|
+
clients: ALL_CLIENTS,
|
|
776
|
+
recommended: false,
|
|
777
|
+
requiresMcpTools: [
|
|
778
|
+
"summer_generate_video",
|
|
779
|
+
"summer_search_assets",
|
|
780
|
+
"summer_import_from_url",
|
|
781
|
+
"summer_add_node",
|
|
782
|
+
"summer_set_prop",
|
|
783
|
+
],
|
|
784
|
+
testScenario: "User asks for 'a looping fire backdrop for the title screen' — skill generates 3-5s loop-clean clip via ltx, wires VideoStreamPlayer with autoplay+loop in title scene.",
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
name: "fire",
|
|
788
|
+
category: "visual-effects",
|
|
789
|
+
public: true,
|
|
790
|
+
clients: ALL_CLIENTS,
|
|
791
|
+
recommended: true,
|
|
792
|
+
requiresMcpTools: [
|
|
793
|
+
"summer_add_node",
|
|
794
|
+
"summer_set_prop",
|
|
795
|
+
"summer_set_resource_property",
|
|
796
|
+
"summer_inspect_node",
|
|
797
|
+
"summer_save_scene",
|
|
798
|
+
],
|
|
799
|
+
testScenario: "User asks for 'a torch flame' — skill creates GPUParticles3D with custom shader, writes addons/vfx/fire/{fire.gdshader, fire_controller.gd}, wires to scene.",
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
name: "muzzle-flash",
|
|
803
|
+
category: "visual-effects",
|
|
804
|
+
public: true,
|
|
805
|
+
clients: ALL_CLIENTS,
|
|
806
|
+
recommended: true,
|
|
807
|
+
requiresMcpTools: [
|
|
808
|
+
"summer_add_node",
|
|
809
|
+
"summer_set_prop",
|
|
810
|
+
"summer_set_resource_property",
|
|
811
|
+
"summer_inspect_node",
|
|
812
|
+
"summer_save_scene",
|
|
813
|
+
],
|
|
814
|
+
testScenario: "User asks for 'a muzzle flash on the rifle' — skill creates one-shot GPUParticles3D with star-burst shader, wires restart() on weapon-fire signal.",
|
|
815
|
+
},
|
|
816
|
+
{
|
|
817
|
+
name: "water-ripple",
|
|
818
|
+
category: "visual-effects",
|
|
819
|
+
public: true,
|
|
820
|
+
clients: ALL_CLIENTS,
|
|
821
|
+
recommended: false,
|
|
822
|
+
requiresMcpTools: [
|
|
823
|
+
"summer_add_node",
|
|
824
|
+
"summer_set_prop",
|
|
825
|
+
"summer_set_resource_property",
|
|
826
|
+
"summer_inspect_node",
|
|
827
|
+
"summer_save_scene",
|
|
828
|
+
],
|
|
829
|
+
testScenario: "User wants 'water ripples when objects splash' — skill creates MeshInstance3D plane with custom water shader, exposes add_ripple(position) API.",
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
name: "lightning",
|
|
833
|
+
category: "visual-effects",
|
|
834
|
+
public: true,
|
|
835
|
+
clients: ALL_CLIENTS,
|
|
836
|
+
recommended: false,
|
|
837
|
+
requiresMcpTools: [
|
|
838
|
+
"summer_add_node",
|
|
839
|
+
"summer_set_prop",
|
|
840
|
+
"summer_set_resource_property",
|
|
841
|
+
"summer_inspect_node",
|
|
842
|
+
"summer_save_scene",
|
|
843
|
+
"summer_connect_signal",
|
|
844
|
+
],
|
|
845
|
+
testScenario: "User wants 'a lightning strike VFX' — skill builds ImmediateMesh-based jagged-segment renderer with shader, calls CameraShake.add_trauma(0.6) on cast.",
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
name: "dissolve",
|
|
849
|
+
category: "visual-effects",
|
|
850
|
+
public: true,
|
|
851
|
+
clients: ALL_CLIENTS,
|
|
852
|
+
recommended: false,
|
|
853
|
+
requiresMcpTools: [
|
|
854
|
+
"summer_add_node",
|
|
855
|
+
"summer_set_prop",
|
|
856
|
+
"summer_set_resource_property",
|
|
857
|
+
"summer_inspect_node",
|
|
858
|
+
"summer_save_scene",
|
|
859
|
+
],
|
|
860
|
+
testScenario: "User wants 'an enemy that dissolves on death' — skill writes dissolve.gdshader override + dissolve_object(target, duration) controller, animates threshold uniform.",
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
name: "smoke",
|
|
864
|
+
category: "visual-effects",
|
|
865
|
+
public: true,
|
|
866
|
+
clients: ALL_CLIENTS,
|
|
867
|
+
recommended: false,
|
|
868
|
+
requiresMcpTools: [
|
|
869
|
+
"summer_add_node",
|
|
870
|
+
"summer_set_prop",
|
|
871
|
+
"summer_set_resource_property",
|
|
872
|
+
"summer_inspect_node",
|
|
873
|
+
"summer_save_scene",
|
|
874
|
+
],
|
|
875
|
+
testScenario: "User wants 'smoke from a burning torch' — skill creates GPUParticles3D + smoke shader using shared FBM noise, wires wind direction parameter.",
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
name: "hit-spark",
|
|
879
|
+
category: "visual-effects",
|
|
880
|
+
public: true,
|
|
881
|
+
clients: ALL_CLIENTS,
|
|
882
|
+
recommended: false,
|
|
883
|
+
requiresMcpTools: [
|
|
884
|
+
"summer_add_node",
|
|
885
|
+
"summer_set_prop",
|
|
886
|
+
"summer_set_resource_property",
|
|
887
|
+
"summer_inspect_node",
|
|
888
|
+
"summer_save_scene",
|
|
889
|
+
],
|
|
890
|
+
testScenario: "User wants 'sparks when a sword hits metal' — skill spawns one-shot GPUParticles3D with additive billboard material, orients to surface normal.",
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
name: "magic-glow",
|
|
894
|
+
category: "visual-effects",
|
|
895
|
+
public: true,
|
|
896
|
+
clients: ALL_CLIENTS,
|
|
897
|
+
recommended: false,
|
|
898
|
+
requiresMcpTools: [
|
|
899
|
+
"summer_add_node",
|
|
900
|
+
"summer_set_prop",
|
|
901
|
+
"summer_set_resource_property",
|
|
902
|
+
"summer_inspect_node",
|
|
903
|
+
"summer_save_scene",
|
|
904
|
+
],
|
|
905
|
+
testScenario: "User wants 'a magical glow on a rune' — skill creates OmniLight3D with pulse-on-sin script + GPUParticles3D motes, uses additive billboard material from building blocks.",
|
|
906
|
+
},
|
|
405
907
|
];
|
|
@@ -273,6 +273,20 @@ Available kinds:
|
|
|
273
273
|
- "image-to-3d" — From your own image. Requires 'imageUrl'.
|
|
274
274
|
- "texture" — Generate textures for a model. Requires 'imageUrl'.
|
|
275
275
|
|
|
276
|
+
Optional rig pass (image-to-3d only):
|
|
277
|
+
Set options.rig = true to add an auto-rig pass via Meshy v6. The result
|
|
278
|
+
job (poll via summer_check_job) will include rigAssetId — the asset ID
|
|
279
|
+
of the rigged glb. Use that rigAssetId with summer_generate_motion to
|
|
280
|
+
add animation clips. Adds ~$0.30 and ~60s to the job.
|
|
281
|
+
|
|
282
|
+
Example:
|
|
283
|
+
summer_generate_3d({
|
|
284
|
+
kind: "image-to-3d",
|
|
285
|
+
imageUrl: "https://...",
|
|
286
|
+
options: { rig: true }
|
|
287
|
+
})
|
|
288
|
+
// Returns jobId; poll until result includes { assetId, rigAssetId }.
|
|
289
|
+
|
|
276
290
|
By default, waits for completion (up to 5 min) and returns the result directly.
|
|
277
291
|
Set wait=false to get the jobId immediately and poll manually with summer_check_job.
|
|
278
292
|
|
|
@@ -419,4 +433,91 @@ Requires authentication: run 'npx summer-engine login' first.`, {
|
|
|
419
433
|
return errorResult(`Job status check failed: ${msg}`);
|
|
420
434
|
}
|
|
421
435
|
});
|
|
436
|
+
// ========================================================================
|
|
437
|
+
// summer_generate_motion
|
|
438
|
+
//
|
|
439
|
+
// NOTE (2026-05-10): only the "meshy-library" backend is exposed today.
|
|
440
|
+
// The "hunyuan-custom" path exists in the Studio route but has not been
|
|
441
|
+
// tested end-to-end on a user's rig (Hunyuan returns a generic skeleton
|
|
442
|
+
// FBX that isn't retargeted onto the caller's character). The schema and
|
|
443
|
+
// call are kept commented-out below — re-enable by restoring the wider
|
|
444
|
+
// zod enum, the prompt/durationSeconds params, the validation branch, and
|
|
445
|
+
// the relevant description lines once the path is verified.
|
|
446
|
+
// ========================================================================
|
|
447
|
+
server.tool("summer_generate_motion", `Generate an animation clip for a Meshy-rigged humanoid character via Summer Engine Studio.
|
|
448
|
+
|
|
449
|
+
Backend:
|
|
450
|
+
- "meshy-library" — picks a clip from a curated mocap set by name (idle, walk,
|
|
451
|
+
run, attack_sword, jump, ~70 standard names). Fast (~30s), cheap (~$0.10),
|
|
452
|
+
real mocap quality.
|
|
453
|
+
|
|
454
|
+
Requires a Meshy-rigged humanoid as the target. The 'rigAssetId' must come from
|
|
455
|
+
a prior summer_generate_3d call with options.rig=true.
|
|
456
|
+
|
|
457
|
+
By default, waits for completion (up to 5 min) and returns the result directly.
|
|
458
|
+
Set wait=false to get the jobId immediately and poll manually with summer_check_job.
|
|
459
|
+
|
|
460
|
+
Common motion names:
|
|
461
|
+
Locomotion: idle, idle_alert, idle_combat, walk, walk_back, run, sprint,
|
|
462
|
+
crouch_idle, crouch_walk, jump, jump_loop, jump_land
|
|
463
|
+
Combat: attack_sword, attack_punch, attack_kick, attack_bow, attack_cast,
|
|
464
|
+
block, dodge_left, dodge_right, hit_react, death
|
|
465
|
+
Social: wave, dance, sit_idle
|
|
466
|
+
|
|
467
|
+
Cost: ~$0.10 per clip. Confirm with user before spending.
|
|
468
|
+
|
|
469
|
+
Custom prompt-driven motion is on the roadmap; not yet shipped. For one-off
|
|
470
|
+
signature moves not on the curated list, fall back to hand-authoring in the
|
|
471
|
+
Godot editor or importing from Mixamo.
|
|
472
|
+
|
|
473
|
+
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
474
|
+
rigAssetId: z
|
|
475
|
+
.string()
|
|
476
|
+
.describe("Asset ID of a rigged character (from summer_generate_3d with options.rig=true)"),
|
|
477
|
+
backend: z
|
|
478
|
+
.enum(["meshy-library"])
|
|
479
|
+
.default("meshy-library")
|
|
480
|
+
.describe("Backend: meshy-library (only option today)"),
|
|
481
|
+
motionName: z
|
|
482
|
+
.string()
|
|
483
|
+
.describe("Curated motion name: walk, run, attack_sword, idle, jump, etc."),
|
|
484
|
+
// prompt + durationSeconds reserved for the hunyuan-custom backend (not
|
|
485
|
+
// shipped yet — see header comment).
|
|
486
|
+
wait: z
|
|
487
|
+
.boolean()
|
|
488
|
+
.default(true)
|
|
489
|
+
.describe("Wait for completion (default true, up to 5 min). Set false to get jobId immediately."),
|
|
490
|
+
options: z
|
|
491
|
+
.record(z.any())
|
|
492
|
+
.optional()
|
|
493
|
+
.describe("Backend-specific passthrough"),
|
|
494
|
+
}, async ({ rigAssetId, backend, motionName, wait, options }) => {
|
|
495
|
+
// Client-side validation
|
|
496
|
+
if (!motionName) {
|
|
497
|
+
return errorResult("motionName is required (e.g. 'walk', 'run', 'attack_sword'). See the tool description for the curated list.");
|
|
498
|
+
}
|
|
499
|
+
const body = {
|
|
500
|
+
rigAssetId,
|
|
501
|
+
backend,
|
|
502
|
+
motionName,
|
|
503
|
+
options,
|
|
504
|
+
};
|
|
505
|
+
const result = await mcpGenerate("/api/mcp/generate/motion", body);
|
|
506
|
+
if (result.error) {
|
|
507
|
+
return errorResult(result.error, result.data);
|
|
508
|
+
}
|
|
509
|
+
const jobId = result.data?.jobId;
|
|
510
|
+
if (!wait || !jobId) {
|
|
511
|
+
return successResult(result.data);
|
|
512
|
+
}
|
|
513
|
+
const pollResult = await pollJob(jobId);
|
|
514
|
+
if (pollResult.error) {
|
|
515
|
+
return errorResult(pollResult.error, { ...pollResult.data, jobId });
|
|
516
|
+
}
|
|
517
|
+
return successResult({
|
|
518
|
+
...pollResult.data,
|
|
519
|
+
jobId,
|
|
520
|
+
message: "Motion generation complete. animationAssetId is in result.",
|
|
521
|
+
});
|
|
522
|
+
});
|
|
422
523
|
}
|
package/gemini-extension.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "summer",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "Superpowers for AI game dev. MCP bridge to the local Summer Engine plus a context primer that teaches Gemini the
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"description": "Superpowers for AI game dev. MCP bridge to the local Summer Engine plus a context primer that teaches Gemini the 24 Summer skills. Use with the npm CLI for skill files on disk.",
|
|
5
5
|
"contextFileName": "GEMINI.md",
|
|
6
6
|
"mcpServers": {
|
|
7
7
|
"summer-engine": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "summer-engine",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Summer — superpowers for AI game dev. CLI, skills, and MCP tools for Summer Engine.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"game-engine",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"author": "Summer Engine <founders@summerengine.com>",
|
|
21
21
|
"type": "module",
|
|
22
|
+
"main": ".opencode/plugins/summer.js",
|
|
22
23
|
"bin": {
|
|
23
24
|
"summer": "./dist/bin/summer.js"
|
|
24
25
|
},
|
|
@@ -26,16 +27,21 @@
|
|
|
26
27
|
"dist/",
|
|
27
28
|
"skills/",
|
|
28
29
|
"hooks/",
|
|
30
|
+
"assets/",
|
|
31
|
+
"_persona/",
|
|
29
32
|
".claude-plugin/",
|
|
30
33
|
".cursor-plugin/",
|
|
31
34
|
".codex-plugin/",
|
|
35
|
+
".factory-plugin/",
|
|
32
36
|
".opencode/",
|
|
33
37
|
"gemini-extension.json",
|
|
34
|
-
"marketplace.json",
|
|
35
38
|
".mcp.json",
|
|
36
39
|
"README.md",
|
|
37
40
|
"LICENSE",
|
|
38
|
-
"CHANGELOG.md"
|
|
41
|
+
"CHANGELOG.md",
|
|
42
|
+
"AGENTS.md",
|
|
43
|
+
"GEMINI.md",
|
|
44
|
+
"CLAUDE.md"
|
|
39
45
|
],
|
|
40
46
|
"scripts": {
|
|
41
47
|
"build": "tsc",
|