spawnpoint-studio 0.1.0__tar.gz → 0.1.1__tar.gz

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.
Files changed (126) hide show
  1. {spawnpoint_studio-0.1.0/compiler/spawnpoint_studio.egg-info → spawnpoint_studio-0.1.1}/PKG-INFO +39 -11
  2. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/README.md +38 -10
  3. spawnpoint_studio-0.1.1/compiler/spawnpoint/__init__.py +8 -0
  4. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/webcheck.py +25 -7
  5. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1/compiler/spawnpoint_studio.egg-info}/PKG-INFO +39 -11
  6. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/pyproject.toml +1 -1
  7. spawnpoint_studio-0.1.0/compiler/spawnpoint/__init__.py +0 -3
  8. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/LICENSE +0 -0
  9. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/MANIFEST.in +0 -0
  10. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/analyze.py +0 -0
  11. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/build.py +0 -0
  12. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/cli.py +0 -0
  13. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/cockpit/__init__.py +0 -0
  14. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/cockpit/server.py +0 -0
  15. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/cockpit/static/app.css +0 -0
  16. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/cockpit/static/app.js +0 -0
  17. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/cockpit/static/index.html +0 -0
  18. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/diagnostics.py +0 -0
  19. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/expr.py +0 -0
  20. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/gif.py +0 -0
  21. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/godot.py +0 -0
  22. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/graph.py +0 -0
  23. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/level.py +0 -0
  24. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/llm_server.py +0 -0
  25. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/manifest.py +0 -0
  26. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/playtest/__init__.py +0 -0
  27. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/playtest/report.py +0 -0
  28. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/playtest/runner.py +0 -0
  29. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/playtest/tuner.py +0 -0
  30. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/project.py +0 -0
  31. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/py.typed +0 -0
  32. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/rules.py +0 -0
  33. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sfx.py +0 -0
  34. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/__init__.py +0 -0
  35. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/ai.py +0 -0
  36. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/contour.py +0 -0
  37. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/generate.py +0 -0
  38. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/importer.py +0 -0
  39. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/resolve.py +0 -0
  40. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/spriteset.py +0 -0
  41. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/sprites/tiles.py +0 -0
  42. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/__init__.py +0 -0
  43. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/assemble.py +0 -0
  44. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/brief.py +0 -0
  45. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/creative.py +0 -0
  46. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/dataset.py +0 -0
  47. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/edits.py +0 -0
  48. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/levelgen.py +0 -0
  49. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/llm.py +0 -0
  50. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/orchestrator.py +0 -0
  51. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/prompts.py +0 -0
  52. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio/web.py +0 -0
  53. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint/studio_cli.py +0 -0
  54. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint_studio.egg-info/SOURCES.txt +0 -0
  55. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint_studio.egg-info/dependency_links.txt +0 -0
  56. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint_studio.egg-info/entry_points.txt +0 -0
  57. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint_studio.egg-info/requires.txt +0 -0
  58. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/spawnpoint_studio.egg-info/top_level.txt +0 -0
  59. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/conftest.py +0 -0
  60. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_ai_sprites.py +0 -0
  61. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_analyze.py +0 -0
  62. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_cockpit.py +0 -0
  63. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_e2e.py +0 -0
  64. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_expr.py +0 -0
  65. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_gif.py +0 -0
  66. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_godot_library.py +0 -0
  67. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_graph.py +0 -0
  68. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_level.py +0 -0
  69. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_live_llm.py +0 -0
  70. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_manifest.py +0 -0
  71. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_playtest.py +0 -0
  72. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_rules.py +0 -0
  73. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_sfx.py +0 -0
  74. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_sprites.py +0 -0
  75. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_studio.py +0 -0
  76. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/compiler/tests/test_web.py +0 -0
  77. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/examples/coin_hopper.json +0 -0
  78. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/examples/neon_arena.json +0 -0
  79. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/examples/pixel_arena.json +0 -0
  80. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/examples/pixel_hopper.json +0 -0
  81. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/aim_component.gd +0 -0
  82. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/animator_component.gd +0 -0
  83. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/chase_ai_component.gd +0 -0
  84. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/collectible_component.gd +0 -0
  85. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/gate_component.gd +0 -0
  86. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/health_component.gd +0 -0
  87. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/hitbox_component.gd +0 -0
  88. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/hurtbox_component.gd +0 -0
  89. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/juice_component.gd +0 -0
  90. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/patrol_ai_component.gd +0 -0
  91. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/platformer_movement_component.gd +0 -0
  92. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/player_input_component.gd +0 -0
  93. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/projectile_component.gd +0 -0
  94. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/spawner_component.gd +0 -0
  95. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/stomp_component.gd +0 -0
  96. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/top_down_movement_component.gd +0 -0
  97. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/trigger_zone_component.gd +0 -0
  98. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/components/weapon_component.gd +0 -0
  99. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/manifest.json +0 -0
  100. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/camera_rig.gd +0 -0
  101. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/cockpit.gd +0 -0
  102. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/entity_core.gd +0 -0
  103. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/fx.gd +0 -0
  104. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/game_state.gd +0 -0
  105. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/hud.gd +0 -0
  106. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/level.gd +0 -0
  107. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/sfx.gd +0 -0
  108. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/sp.gd +0 -0
  109. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/runtime/world.gd +0 -0
  110. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/shaders/flash.gdshader +0 -0
  111. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/shaders/floor_grid.gdshader +0 -0
  112. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/build.gd +0 -0
  113. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/build.tscn +0 -0
  114. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/capture.gd +0 -0
  115. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/capture.tscn +0 -0
  116. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/dump_manifest.gd +0 -0
  117. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/dump_manifest.tscn +0 -0
  118. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/playtest.gd +0 -0
  119. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/playtest.tscn +0 -0
  120. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/playtest_nav.gd +0 -0
  121. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/record.gd +0 -0
  122. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/record.tscn +0 -0
  123. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/smoke.gd +0 -0
  124. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/godot/addons/spawn_point/tools/smoke.tscn +0 -0
  125. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/setup.cfg +0 -0
  126. {spawnpoint_studio-0.1.0 → spawnpoint_studio-0.1.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spawnpoint-studio
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Turn a sentence into a juicy, playable Godot 4 game — locally, on a consumer GPU.
5
5
  Author: smoky1496
6
6
  License: MIT
@@ -24,7 +24,12 @@ Dynamic: license-file
24
24
 
25
25
  # Spawn Point
26
26
 
27
- **Compile a small JSON "game graph" into a juicy, runnable Godot 4 game — in seconds.**
27
+ **Describe a 2D game in one sentence — get a playable, juicy Godot 4 game in seconds.**
28
+
29
+ [![CI](https://github.com/leluong141996-dev/Spawn-Point/actions/workflows/ci.yml/badge.svg)](https://github.com/leluong141996-dev/Spawn-Point/actions/workflows/ci.yml)
30
+ [![PyPI](https://img.shields.io/pypi/v/spawnpoint-studio)](https://pypi.org/project/spawnpoint-studio/)
31
+ [![Model](https://img.shields.io/badge/%F0%9F%A4%97%20model-SpawnPoint--Coder--7B-yellow)](https://huggingface.co/smoky1496/SpawnPoint-Coder-7B-AWQ)
32
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
28
33
 
29
34
  <p align="center">
30
35
  <img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/pixel-hopper.gif" width="48%" alt="Pixel Hopper — generated platformer">
@@ -34,7 +39,7 @@ Dynamic: license-file
34
39
  <code>examples/pixel_arena.json</code>: generated sprites, collision traced from pixels, juice on by
35
40
  default. Recorded with <code>spawnpoint gif</code> (autopilot).</sub></p>
36
41
 
37
- Spawn Point is the foundation of an autonomous game-studio agent. Instead of asking an LLM to type
42
+ Spawn Point is an open-source, autonomous game studio that runs on your own machine. Instead of asking an LLM to type
38
43
  hundreds of lines of GDScript (slow, expensive, and easy to break with Godot 3/4 mix-ups), the LLM
39
44
  assembles **pre-tested components** like LEGO, places them on an **ASCII map**, and wires gameplay
40
45
  with **declarative rules**. A deterministic compiler validates everything and lets Godot itself write
@@ -54,6 +59,24 @@ graph.json ──► validate (Python) ──► build scenes (Godot headless)
54
59
  | Hitboxes | drift from visuals | derived from the same shape as the visual |
55
60
  | Failure mode | crashes, syntax errors | structured diagnostics *before* Godot runs |
56
61
 
62
+ ## Install
63
+
64
+ Requirements: Python ≥ 3.10, [Godot 4.6](https://godotengine.org/download) on your `PATH` (`godot4` or
65
+ `godot`, or set `GODOT_BIN`), and for the LLM features either a 12 GB NVIDIA GPU with Docker (local model)
66
+ or any OpenAI-compatible API.
67
+
68
+ ```bash
69
+ pip install spawnpoint-studio
70
+ spawnpoint llm up # serves SpawnPoint-Coder-7B locally (or set SPAWNPOINT_LLM_* for an API)
71
+ spawnpoint create "a ninja platformer where you collect stars"
72
+ ```
73
+
74
+ No GPU? Try the hand-written examples, no LLM needed:
75
+
76
+ ```bash
77
+ spawnpoint examples copy pixel_hopper && spawnpoint build pixel_hopper.json --run
78
+ ```
79
+
57
80
  ## Spawn Point Studio (web cockpit)
58
81
 
59
82
  ```bash
@@ -223,13 +246,10 @@ stop making the mistakes the normalizer and compiler had to fix (roadmap item 7)
223
246
 
224
247
  ## Quick start (hand-written graphs)
225
248
 
226
- Requirements: Python ≥ 3.10 and [Godot 4.6](https://godotengine.org/download) on your `PATH`
227
- (`godot4` or `godot`, or set `GODOT_BIN`).
228
-
229
249
  ```bash
230
- pip install -e ".[dev]"
231
- spawnpoint build examples/coin_hopper.json --run # platformer
232
- spawnpoint build examples/neon_arena.json --run # top-down shooter
250
+ spawnpoint examples list
251
+ spawnpoint examples copy coin_hopper && spawnpoint build coin_hopper.json --run # platformer
252
+ spawnpoint examples copy neon_arena && spawnpoint build neon_arena.json --run # top-down shooter
233
253
  ```
234
254
 
235
255
  Controls: move **WASD / arrows**, jump **Space / Z / W**, dash **Shift / C**, shoot **X / J / left mouse**,
@@ -321,15 +341,20 @@ godot/ Godot project hosting the component library and its t
321
341
  tests/ headless GDScript tests
322
342
  compiler/spawnpoint/ Python compiler: graph schema, analysis, rules codegen, sfx, CLI
323
343
  compiler/spawnpoint/studio LLM orchestrator: brief, assembler, level generators, web export, browser check
324
- compiler/spawnpoint/sprites SpriteSet format, pixel-art generator, importer, contour → collision
344
+ compiler/spawnpoint/sprites SpriteSet format, pixel-art generator and tiles, importer, contour → collision, AI-art providers
345
+ compiler/spawnpoint/playtest bots, jump-aware planner, telemetry, heatmaps, tuner
346
+ compiler/spawnpoint/cockpit web studio: HTTP + SSE server and the single-page UI
325
347
  compiler/tests/ pytest (includes end-to-end builds and the GDScript suite)
326
348
  examples/ example graphs
327
- docs/ design specs
349
+ scripts/ helper scripts (local LLM)
350
+ docs/media/ README GIFs
328
351
  ```
329
352
 
330
353
  ## Development
331
354
 
332
355
  ```bash
356
+ git clone https://github.com/leluong141996-dev/Spawn-Point && cd Spawn-Point
357
+ pip install -e ".[dev]"
333
358
  pytest # everything: compiler, studio, end-to-end builds, web + browser, GDScript suite
334
359
  pytest -m "not llm" # without the live-LLM tests
335
360
  spawnpoint manifest # regenerate manifest.json after changing a component
@@ -340,6 +365,9 @@ Adding a component: create `godot/addons/spawn_point/components/<name>_component
340
365
  contract (typed `@export`s with ranges, `SP_NAME` / `SP_HOSTS` / `SP_REQUIRES` / `SP_CATEGORY`
341
366
  constants, `##` docs on everything public), add tests in `godot/tests/`, then run `spawnpoint manifest`.
342
367
 
368
+ Contributions are welcome: open an issue to discuss a bigger change first, keep `pytest -m "not llm"`
369
+ green, and add a test with every fix. CI runs the full suite (with Godot) on every push and pull request.
370
+
343
371
  ## Roadmap
344
372
 
345
373
  1. ✅ Component library with juice
@@ -1,6 +1,11 @@
1
1
  # Spawn Point
2
2
 
3
- **Compile a small JSON "game graph" into a juicy, runnable Godot 4 game — in seconds.**
3
+ **Describe a 2D game in one sentence — get a playable, juicy Godot 4 game in seconds.**
4
+
5
+ [![CI](https://github.com/leluong141996-dev/Spawn-Point/actions/workflows/ci.yml/badge.svg)](https://github.com/leluong141996-dev/Spawn-Point/actions/workflows/ci.yml)
6
+ [![PyPI](https://img.shields.io/pypi/v/spawnpoint-studio)](https://pypi.org/project/spawnpoint-studio/)
7
+ [![Model](https://img.shields.io/badge/%F0%9F%A4%97%20model-SpawnPoint--Coder--7B-yellow)](https://huggingface.co/smoky1496/SpawnPoint-Coder-7B-AWQ)
8
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
4
9
 
5
10
  <p align="center">
6
11
  <img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/pixel-hopper.gif" width="48%" alt="Pixel Hopper — generated platformer">
@@ -10,7 +15,7 @@
10
15
  <code>examples/pixel_arena.json</code>: generated sprites, collision traced from pixels, juice on by
11
16
  default. Recorded with <code>spawnpoint gif</code> (autopilot).</sub></p>
12
17
 
13
- Spawn Point is the foundation of an autonomous game-studio agent. Instead of asking an LLM to type
18
+ Spawn Point is an open-source, autonomous game studio that runs on your own machine. Instead of asking an LLM to type
14
19
  hundreds of lines of GDScript (slow, expensive, and easy to break with Godot 3/4 mix-ups), the LLM
15
20
  assembles **pre-tested components** like LEGO, places them on an **ASCII map**, and wires gameplay
16
21
  with **declarative rules**. A deterministic compiler validates everything and lets Godot itself write
@@ -30,6 +35,24 @@ graph.json ──► validate (Python) ──► build scenes (Godot headless)
30
35
  | Hitboxes | drift from visuals | derived from the same shape as the visual |
31
36
  | Failure mode | crashes, syntax errors | structured diagnostics *before* Godot runs |
32
37
 
38
+ ## Install
39
+
40
+ Requirements: Python ≥ 3.10, [Godot 4.6](https://godotengine.org/download) on your `PATH` (`godot4` or
41
+ `godot`, or set `GODOT_BIN`), and for the LLM features either a 12 GB NVIDIA GPU with Docker (local model)
42
+ or any OpenAI-compatible API.
43
+
44
+ ```bash
45
+ pip install spawnpoint-studio
46
+ spawnpoint llm up # serves SpawnPoint-Coder-7B locally (or set SPAWNPOINT_LLM_* for an API)
47
+ spawnpoint create "a ninja platformer where you collect stars"
48
+ ```
49
+
50
+ No GPU? Try the hand-written examples, no LLM needed:
51
+
52
+ ```bash
53
+ spawnpoint examples copy pixel_hopper && spawnpoint build pixel_hopper.json --run
54
+ ```
55
+
33
56
  ## Spawn Point Studio (web cockpit)
34
57
 
35
58
  ```bash
@@ -199,13 +222,10 @@ stop making the mistakes the normalizer and compiler had to fix (roadmap item 7)
199
222
 
200
223
  ## Quick start (hand-written graphs)
201
224
 
202
- Requirements: Python ≥ 3.10 and [Godot 4.6](https://godotengine.org/download) on your `PATH`
203
- (`godot4` or `godot`, or set `GODOT_BIN`).
204
-
205
225
  ```bash
206
- pip install -e ".[dev]"
207
- spawnpoint build examples/coin_hopper.json --run # platformer
208
- spawnpoint build examples/neon_arena.json --run # top-down shooter
226
+ spawnpoint examples list
227
+ spawnpoint examples copy coin_hopper && spawnpoint build coin_hopper.json --run # platformer
228
+ spawnpoint examples copy neon_arena && spawnpoint build neon_arena.json --run # top-down shooter
209
229
  ```
210
230
 
211
231
  Controls: move **WASD / arrows**, jump **Space / Z / W**, dash **Shift / C**, shoot **X / J / left mouse**,
@@ -297,15 +317,20 @@ godot/ Godot project hosting the component library and its t
297
317
  tests/ headless GDScript tests
298
318
  compiler/spawnpoint/ Python compiler: graph schema, analysis, rules codegen, sfx, CLI
299
319
  compiler/spawnpoint/studio LLM orchestrator: brief, assembler, level generators, web export, browser check
300
- compiler/spawnpoint/sprites SpriteSet format, pixel-art generator, importer, contour → collision
320
+ compiler/spawnpoint/sprites SpriteSet format, pixel-art generator and tiles, importer, contour → collision, AI-art providers
321
+ compiler/spawnpoint/playtest bots, jump-aware planner, telemetry, heatmaps, tuner
322
+ compiler/spawnpoint/cockpit web studio: HTTP + SSE server and the single-page UI
301
323
  compiler/tests/ pytest (includes end-to-end builds and the GDScript suite)
302
324
  examples/ example graphs
303
- docs/ design specs
325
+ scripts/ helper scripts (local LLM)
326
+ docs/media/ README GIFs
304
327
  ```
305
328
 
306
329
  ## Development
307
330
 
308
331
  ```bash
332
+ git clone https://github.com/leluong141996-dev/Spawn-Point && cd Spawn-Point
333
+ pip install -e ".[dev]"
309
334
  pytest # everything: compiler, studio, end-to-end builds, web + browser, GDScript suite
310
335
  pytest -m "not llm" # without the live-LLM tests
311
336
  spawnpoint manifest # regenerate manifest.json after changing a component
@@ -316,6 +341,9 @@ Adding a component: create `godot/addons/spawn_point/components/<name>_component
316
341
  contract (typed `@export`s with ranges, `SP_NAME` / `SP_HOSTS` / `SP_REQUIRES` / `SP_CATEGORY`
317
342
  constants, `##` docs on everything public), add tests in `godot/tests/`, then run `spawnpoint manifest`.
318
343
 
344
+ Contributions are welcome: open an issue to discuss a bigger change first, keep `pytest -m "not llm"`
345
+ green, and add a test with every fix. CI runs the full suite (with Godot) on every push and pull request.
346
+
319
347
  ## Roadmap
320
348
 
321
349
  1. ✅ Component library with juice
@@ -0,0 +1,8 @@
1
+ """Spawn Point: compile JSON game graphs into runnable Godot 4 projects."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("spawnpoint-studio") # single source of truth: pyproject.toml
7
+ except PackageNotFoundError: # running from a source tree that was never installed
8
+ __version__ = "0.0.0+source"
@@ -10,6 +10,7 @@ import json
10
10
  import os
11
11
  import re
12
12
  import shutil
13
+ import signal
13
14
  import socket
14
15
  import struct
15
16
  import subprocess
@@ -106,12 +107,13 @@ def check(url: str, seconds: float = 12.0, size: tuple[int, int] = (960, 540), k
106
107
  if chrome is None:
107
108
  raise RuntimeError("Chrome not found (set CHROME_BIN)")
108
109
  result = WebCheck()
109
- with tempfile.TemporaryDirectory() as profile:
110
+ # Chrome's helper processes can outlive the main one for a moment and keep writing to the profile.
111
+ with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as profile:
110
112
  proc = subprocess.Popen(
111
113
  [chrome, "--headless=new", "--no-sandbox", f"--user-data-dir={profile}", "--remote-debugging-port=0",
112
114
  "--use-angle=swiftshader", "--enable-unsafe-swiftshader", "--autoplay-policy=no-user-gesture-required",
113
115
  f"--window-size={size[0]},{size[1]}", "about:blank"],
114
- stderr=subprocess.PIPE, stdout=subprocess.DEVNULL, text=True)
116
+ stderr=subprocess.PIPE, stdout=subprocess.DEVNULL, text=True, start_new_session=True)
115
117
  try:
116
118
  ws_url = _devtools_url(proc)
117
119
  port = re.match(r"ws://[^:]+:(\d+)", ws_url).group(1)
@@ -163,14 +165,30 @@ def check(url: str, seconds: float = 12.0, size: tuple[int, int] = (960, 540), k
163
165
  result.value = ev.get("result", {}).get("value")
164
166
  ws.close()
165
167
  finally:
166
- proc.terminate()
167
- try:
168
- proc.wait(timeout=10)
169
- except subprocess.TimeoutExpired:
170
- proc.kill()
168
+ _stop(proc)
171
169
  return result
172
170
 
173
171
 
172
+ def _stop(proc: subprocess.Popen) -> None:
173
+ """Stop Chrome and every helper process it started (they share its process group)."""
174
+ for sig in (signal.SIGTERM, signal.SIGKILL):
175
+ try:
176
+ os.killpg(proc.pid, sig)
177
+ except ProcessLookupError:
178
+ return
179
+ try:
180
+ proc.wait(timeout=10)
181
+ except subprocess.TimeoutExpired:
182
+ continue
183
+ deadline = time.time() + 5 # the main process is gone; give the helpers a moment to follow
184
+ while time.time() < deadline:
185
+ try:
186
+ os.killpg(proc.pid, 0)
187
+ except ProcessLookupError:
188
+ return
189
+ time.sleep(0.05)
190
+
191
+
174
192
  def _devtools_url(proc: subprocess.Popen) -> str:
175
193
  deadline = time.time() + 20
176
194
  while time.time() < deadline:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spawnpoint-studio
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Turn a sentence into a juicy, playable Godot 4 game — locally, on a consumer GPU.
5
5
  Author: smoky1496
6
6
  License: MIT
@@ -24,7 +24,12 @@ Dynamic: license-file
24
24
 
25
25
  # Spawn Point
26
26
 
27
- **Compile a small JSON "game graph" into a juicy, runnable Godot 4 game — in seconds.**
27
+ **Describe a 2D game in one sentence — get a playable, juicy Godot 4 game in seconds.**
28
+
29
+ [![CI](https://github.com/leluong141996-dev/Spawn-Point/actions/workflows/ci.yml/badge.svg)](https://github.com/leluong141996-dev/Spawn-Point/actions/workflows/ci.yml)
30
+ [![PyPI](https://img.shields.io/pypi/v/spawnpoint-studio)](https://pypi.org/project/spawnpoint-studio/)
31
+ [![Model](https://img.shields.io/badge/%F0%9F%A4%97%20model-SpawnPoint--Coder--7B-yellow)](https://huggingface.co/smoky1496/SpawnPoint-Coder-7B-AWQ)
32
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
28
33
 
29
34
  <p align="center">
30
35
  <img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/pixel-hopper.gif" width="48%" alt="Pixel Hopper — generated platformer">
@@ -34,7 +39,7 @@ Dynamic: license-file
34
39
  <code>examples/pixel_arena.json</code>: generated sprites, collision traced from pixels, juice on by
35
40
  default. Recorded with <code>spawnpoint gif</code> (autopilot).</sub></p>
36
41
 
37
- Spawn Point is the foundation of an autonomous game-studio agent. Instead of asking an LLM to type
42
+ Spawn Point is an open-source, autonomous game studio that runs on your own machine. Instead of asking an LLM to type
38
43
  hundreds of lines of GDScript (slow, expensive, and easy to break with Godot 3/4 mix-ups), the LLM
39
44
  assembles **pre-tested components** like LEGO, places them on an **ASCII map**, and wires gameplay
40
45
  with **declarative rules**. A deterministic compiler validates everything and lets Godot itself write
@@ -54,6 +59,24 @@ graph.json ──► validate (Python) ──► build scenes (Godot headless)
54
59
  | Hitboxes | drift from visuals | derived from the same shape as the visual |
55
60
  | Failure mode | crashes, syntax errors | structured diagnostics *before* Godot runs |
56
61
 
62
+ ## Install
63
+
64
+ Requirements: Python ≥ 3.10, [Godot 4.6](https://godotengine.org/download) on your `PATH` (`godot4` or
65
+ `godot`, or set `GODOT_BIN`), and for the LLM features either a 12 GB NVIDIA GPU with Docker (local model)
66
+ or any OpenAI-compatible API.
67
+
68
+ ```bash
69
+ pip install spawnpoint-studio
70
+ spawnpoint llm up # serves SpawnPoint-Coder-7B locally (or set SPAWNPOINT_LLM_* for an API)
71
+ spawnpoint create "a ninja platformer where you collect stars"
72
+ ```
73
+
74
+ No GPU? Try the hand-written examples, no LLM needed:
75
+
76
+ ```bash
77
+ spawnpoint examples copy pixel_hopper && spawnpoint build pixel_hopper.json --run
78
+ ```
79
+
57
80
  ## Spawn Point Studio (web cockpit)
58
81
 
59
82
  ```bash
@@ -223,13 +246,10 @@ stop making the mistakes the normalizer and compiler had to fix (roadmap item 7)
223
246
 
224
247
  ## Quick start (hand-written graphs)
225
248
 
226
- Requirements: Python ≥ 3.10 and [Godot 4.6](https://godotengine.org/download) on your `PATH`
227
- (`godot4` or `godot`, or set `GODOT_BIN`).
228
-
229
249
  ```bash
230
- pip install -e ".[dev]"
231
- spawnpoint build examples/coin_hopper.json --run # platformer
232
- spawnpoint build examples/neon_arena.json --run # top-down shooter
250
+ spawnpoint examples list
251
+ spawnpoint examples copy coin_hopper && spawnpoint build coin_hopper.json --run # platformer
252
+ spawnpoint examples copy neon_arena && spawnpoint build neon_arena.json --run # top-down shooter
233
253
  ```
234
254
 
235
255
  Controls: move **WASD / arrows**, jump **Space / Z / W**, dash **Shift / C**, shoot **X / J / left mouse**,
@@ -321,15 +341,20 @@ godot/ Godot project hosting the component library and its t
321
341
  tests/ headless GDScript tests
322
342
  compiler/spawnpoint/ Python compiler: graph schema, analysis, rules codegen, sfx, CLI
323
343
  compiler/spawnpoint/studio LLM orchestrator: brief, assembler, level generators, web export, browser check
324
- compiler/spawnpoint/sprites SpriteSet format, pixel-art generator, importer, contour → collision
344
+ compiler/spawnpoint/sprites SpriteSet format, pixel-art generator and tiles, importer, contour → collision, AI-art providers
345
+ compiler/spawnpoint/playtest bots, jump-aware planner, telemetry, heatmaps, tuner
346
+ compiler/spawnpoint/cockpit web studio: HTTP + SSE server and the single-page UI
325
347
  compiler/tests/ pytest (includes end-to-end builds and the GDScript suite)
326
348
  examples/ example graphs
327
- docs/ design specs
349
+ scripts/ helper scripts (local LLM)
350
+ docs/media/ README GIFs
328
351
  ```
329
352
 
330
353
  ## Development
331
354
 
332
355
  ```bash
356
+ git clone https://github.com/leluong141996-dev/Spawn-Point && cd Spawn-Point
357
+ pip install -e ".[dev]"
333
358
  pytest # everything: compiler, studio, end-to-end builds, web + browser, GDScript suite
334
359
  pytest -m "not llm" # without the live-LLM tests
335
360
  spawnpoint manifest # regenerate manifest.json after changing a component
@@ -340,6 +365,9 @@ Adding a component: create `godot/addons/spawn_point/components/<name>_component
340
365
  contract (typed `@export`s with ranges, `SP_NAME` / `SP_HOSTS` / `SP_REQUIRES` / `SP_CATEGORY`
341
366
  constants, `##` docs on everything public), add tests in `godot/tests/`, then run `spawnpoint manifest`.
342
367
 
368
+ Contributions are welcome: open an issue to discuss a bigger change first, keep `pytest -m "not llm"`
369
+ green, and add a test with every fix. CI runs the full suite (with Godot) on every push and pull request.
370
+
343
371
  ## Roadmap
344
372
 
345
373
  1. ✅ Component library with juice
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "spawnpoint-studio"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "Turn a sentence into a juicy, playable Godot 4 game — locally, on a consumer GPU."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,3 +0,0 @@
1
- """Spawn Point: compile JSON game graphs into runnable Godot 4 projects."""
2
-
3
- __version__ = "0.1.0"