assgen 0.3.0__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 (326) hide show
  1. assgen-0.3.0/.dockerignore +26 -0
  2. assgen-0.3.0/.github/copilot-instructions.md +8 -0
  3. assgen-0.3.0/.github/hooks/hooks.json +29 -0
  4. assgen-0.3.0/.github/workflows/ci.yml +92 -0
  5. assgen-0.3.0/.github/workflows/docs.yml +50 -0
  6. assgen-0.3.0/.github/workflows/release.yml +429 -0
  7. assgen-0.3.0/.gitignore +57 -0
  8. assgen-0.3.0/.idea/runConfigurations/assgen_cli.xml +25 -0
  9. assgen-0.3.0/.idea/runConfigurations/assgen_server.xml +25 -0
  10. assgen-0.3.0/.idea/runConfigurations/pytest_all_tests.xml +40 -0
  11. assgen-0.3.0/.idea/runConfigurations/pytest_debug_mode.xml +41 -0
  12. assgen-0.3.0/.idea/runConfigurations/pytest_watch_mode.xml +25 -0
  13. assgen-0.3.0/.idea/runConfigurations/pytest_with_profiling.xml +40 -0
  14. assgen-0.3.0/.idea/runConfigurations/space_assgen_animate_keyframe.xml +25 -0
  15. assgen-0.3.0/.idea/runConfigurations/space_assgen_animate_mocap.xml +25 -0
  16. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_ambient_generate.xml +25 -0
  17. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_music_adaptive.xml +25 -0
  18. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_music_compose.xml +25 -0
  19. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_music_loop.xml +25 -0
  20. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_convert.xml +25 -0
  21. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_downmix.xml +25 -0
  22. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_loop_optimize.xml +25 -0
  23. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_normalize.xml +25 -0
  24. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_resample.xml +25 -0
  25. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_trim_silence.xml +25 -0
  26. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_process_waveform.xml +25 -0
  27. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_sfx_generate.xml +25 -0
  28. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_voice_clone.xml +25 -0
  29. assgen-0.3.0/.idea/runConfigurations/space_assgen_audio_voice_tts.xml +25 -0
  30. assgen-0.3.0/.idea/runConfigurations/space_assgen_blockout_create.xml +25 -0
  31. assgen-0.3.0/.idea/runConfigurations/space_assgen_concept_generate.xml +25 -0
  32. assgen-0.3.0/.idea/runConfigurations/space_assgen_concept_style.xml +25 -0
  33. assgen-0.3.0/.idea/runConfigurations/space_assgen_lod_generate.xml +25 -0
  34. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_bounds.xml +25 -0
  35. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_center.xml +25 -0
  36. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_convert.xml +25 -0
  37. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_flipnormals.xml +25 -0
  38. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_merge.xml +25 -0
  39. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_scale.xml +25 -0
  40. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_validate.xml +25 -0
  41. assgen-0.3.0/.idea/runConfigurations/space_assgen_mesh_weld.xml +25 -0
  42. assgen-0.3.0/.idea/runConfigurations/space_assgen_model_create.xml +25 -0
  43. assgen-0.3.0/.idea/runConfigurations/space_assgen_model_multiview.xml +25 -0
  44. assgen-0.3.0/.idea/runConfigurations/space_assgen_model_splat.xml +25 -0
  45. assgen-0.3.0/.idea/runConfigurations/space_assgen_narrative_dialogue_npc.xml +25 -0
  46. assgen-0.3.0/.idea/runConfigurations/space_assgen_narrative_dialogue_validate.xml +25 -0
  47. assgen-0.3.0/.idea/runConfigurations/space_assgen_narrative_lore_generate.xml +25 -0
  48. assgen-0.3.0/.idea/runConfigurations/space_assgen_narrative_quest_design.xml +25 -0
  49. assgen-0.3.0/.idea/runConfigurations/space_assgen_narrative_quest_validate.xml +25 -0
  50. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_foliage_scatter.xml +25 -0
  51. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_level_dungeon.xml +25 -0
  52. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_level_voronoi.xml +25 -0
  53. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_plant_lsystem.xml +25 -0
  54. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_terrain_heightmap.xml +25 -0
  55. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_texture_noise.xml +25 -0
  56. assgen-0.3.0/.idea/runConfigurations/space_assgen_procedural_tileset_wfc.xml +25 -0
  57. assgen-0.3.0/.idea/runConfigurations/space_assgen_rig_auto.xml +25 -0
  58. assgen-0.3.0/.idea/runConfigurations/space_assgen_scene_depth_estimate.xml +25 -0
  59. assgen-0.3.0/.idea/runConfigurations/space_assgen_scene_lighting_hdri.xml +25 -0
  60. assgen-0.3.0/.idea/runConfigurations/space_assgen_scene_physics_collider.xml +25 -0
  61. assgen-0.3.0/.idea/runConfigurations/space_assgen_sprite_pack.xml +25 -0
  62. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_atlas_pack.xml +25 -0
  63. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_channel_pack.xml +25 -0
  64. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_convert.xml +25 -0
  65. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_from_concept.xml +25 -0
  66. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_generate.xml +25 -0
  67. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_inpaint.xml +25 -0
  68. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_mipmap.xml +25 -0
  69. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_normalmap_convert.xml +25 -0
  70. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_pbr.xml +25 -0
  71. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_report.xml +25 -0
  72. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_resize.xml +25 -0
  73. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_seamless.xml +25 -0
  74. assgen-0.3.0/.idea/runConfigurations/space_assgen_texture_upscale.xml +25 -0
  75. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_button.xml +25 -0
  76. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_icon.xml +25 -0
  77. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_iconset.xml +25 -0
  78. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_layout.xml +25 -0
  79. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_mockup.xml +25 -0
  80. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_panel.xml +25 -0
  81. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_screen.xml +25 -0
  82. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_theme.xml +25 -0
  83. assgen-0.3.0/.idea/runConfigurations/space_assgen_ui_widget.xml +25 -0
  84. assgen-0.3.0/.idea/runConfigurations/space_assgen_uv_auto.xml +25 -0
  85. assgen-0.3.0/.idea/runConfigurations/space_assgen_vfx_particle.xml +25 -0
  86. assgen-0.3.0/.python-version +1 -0
  87. assgen-0.3.0/CLAUDE.md +8 -0
  88. assgen-0.3.0/Makefile +48 -0
  89. assgen-0.3.0/PERSONAS.md +238 -0
  90. assgen-0.3.0/PKG-INFO +735 -0
  91. assgen-0.3.0/README.md +680 -0
  92. assgen-0.3.0/RELEASING.md +153 -0
  93. assgen-0.3.0/choco/assgen.nuspec +21 -0
  94. assgen-0.3.0/choco/tools/chocolateyinstall.ps1 +13 -0
  95. assgen-0.3.0/choco/tools/chocolateyuninstall.ps1 +8 -0
  96. assgen-0.3.0/demos/01_version.tape +23 -0
  97. assgen-0.3.0/demos/02_task_tree.tape +37 -0
  98. assgen-0.3.0/demos/03_models_catalog.tape +30 -0
  99. assgen-0.3.0/demos/04_config.tape +37 -0
  100. assgen-0.3.0/demos/05_server.tape +28 -0
  101. assgen-0.3.0/demos/06_gen_procedural.tape +23 -0
  102. assgen-0.3.0/demos/07_compose_pipeline.tape +23 -0
  103. assgen-0.3.0/demos/08_jobs.tape +23 -0
  104. assgen-0.3.0/demos/09_output_formats.tape +28 -0
  105. assgen-0.3.0/demos/10_upgrade.tape +23 -0
  106. assgen-0.3.0/demos/_settings.tape +8 -0
  107. assgen-0.3.0/docker/Dockerfile.client +48 -0
  108. assgen-0.3.0/docker/Dockerfile.server +51 -0
  109. assgen-0.3.0/docker/Dockerfile.server-cuda +59 -0
  110. assgen-0.3.0/docker-compose.yml +90 -0
  111. assgen-0.3.0/docs/PYCHARM_SETUP.md +134 -0
  112. assgen-0.3.0/docs/api-reference.md +97 -0
  113. assgen-0.3.0/docs/cli-reference.md +534 -0
  114. assgen-0.3.0/docs/compose-pipelines.md +333 -0
  115. assgen-0.3.0/docs/configuration.md +94 -0
  116. assgen-0.3.0/docs/contributing.md +138 -0
  117. assgen-0.3.0/docs/design/20260411_120000_UTC_hf_spaces_feasibility.md +282 -0
  118. assgen-0.3.0/docs/design/20260411_120100_UTC_hf_spaces_spec_tier1.md +1098 -0
  119. assgen-0.3.0/docs/design/20260411_120200_UTC_hf_spaces_spec_tier2_tier3.md +887 -0
  120. assgen-0.3.0/docs/design/20260411_120300_UTC_repo_health_improvements.md +570 -0
  121. assgen-0.3.0/docs/design/20260411_120400_UTC_hf_spaces_packaging_and_sdk.md +670 -0
  122. assgen-0.3.0/docs/design/20260411_120500_UTC_hf_spaces_implementation_risks.md +417 -0
  123. assgen-0.3.0/docs/design/20260411_130000_UTC_agent_briefing.md +295 -0
  124. assgen-0.3.0/docs/design/20260411_131500_UTC_pycharm_run_configs.md +321 -0
  125. assgen-0.3.0/docs/gen_pages.py +347 -0
  126. assgen-0.3.0/docs/index.md +102 -0
  127. assgen-0.3.0/docs/install.md +123 -0
  128. assgen-0.3.0/docs/introspect/20260328_161334-UTC_CHECKPOINT.md +455 -0
  129. assgen-0.3.0/docs/model-validation.md +99 -0
  130. assgen-0.3.0/docs/openapi.json +908 -0
  131. assgen-0.3.0/docs/quickstart.md +161 -0
  132. assgen-0.3.0/docs/server-setup.md +302 -0
  133. assgen-0.3.0/docs/stylesheets/extra.css +20 -0
  134. assgen-0.3.0/docs/ux-design.md +274 -0
  135. assgen-0.3.0/docs/workflow-audio-designer.md +231 -0
  136. assgen-0.3.0/docs/workflow-character-artist.md +203 -0
  137. assgen-0.3.0/docs/workflow-ci-pipeline.md +289 -0
  138. assgen-0.3.0/docs/workflow-environment-artist.md +238 -0
  139. assgen-0.3.0/docs/workflow-solo-indie.md +216 -0
  140. assgen-0.3.0/mkdocs.yml +129 -0
  141. assgen-0.3.0/pyinstaller/assgen-client.spec +129 -0
  142. assgen-0.3.0/pyproject.toml +128 -0
  143. assgen-0.3.0/scripts/export_openapi.py +74 -0
  144. assgen-0.3.0/scripts/generate_run_configs.py +147 -0
  145. assgen-0.3.0/scripts/record-demo.sh +58 -0
  146. assgen-0.3.0/scripts/smoke_test_inference.py +165 -0
  147. assgen-0.3.0/scripts/sync_spaces.py +162 -0
  148. assgen-0.3.0/spaces/_template/README.md +25 -0
  149. assgen-0.3.0/spaces/_template/app.py +43 -0
  150. assgen-0.3.0/spaces/assgen.audio.music.compose/README.md +27 -0
  151. assgen-0.3.0/spaces/assgen.audio.music.compose/app.py +57 -0
  152. assgen-0.3.0/spaces/assgen.audio.sfx.generate/README.md +27 -0
  153. assgen-0.3.0/spaces/assgen.audio.sfx.generate/app.py +58 -0
  154. assgen-0.3.0/spaces/assgen.audio.voice.tts/README.md +27 -0
  155. assgen-0.3.0/spaces/assgen.audio.voice.tts/app.py +70 -0
  156. assgen-0.3.0/spaces/assgen.concept.generate/README.md +28 -0
  157. assgen-0.3.0/spaces/assgen.concept.generate/app.py +68 -0
  158. assgen-0.3.0/spaces/assgen.model.create/README.md +32 -0
  159. assgen-0.3.0/spaces/assgen.model.create/app.py +63 -0
  160. assgen-0.3.0/spaces/assgen.narrative.dialogue.npc/README.md +27 -0
  161. assgen-0.3.0/spaces/assgen.narrative.dialogue.npc/app.py +74 -0
  162. assgen-0.3.0/spaces/assgen.procedural.terrain.heightmap/README.md +27 -0
  163. assgen-0.3.0/spaces/assgen.procedural.terrain.heightmap/app.py +59 -0
  164. assgen-0.3.0/spaces/assgen.scene.depth.estimate/README.md +28 -0
  165. assgen-0.3.0/spaces/assgen.scene.depth.estimate/app.py +63 -0
  166. assgen-0.3.0/spaces/assgen.texture.generate/README.md +28 -0
  167. assgen-0.3.0/spaces/assgen.texture.generate/app.py +66 -0
  168. assgen-0.3.0/spaces/assgen.texture.upscale/README.md +28 -0
  169. assgen-0.3.0/spaces/assgen.texture.upscale/app.py +65 -0
  170. assgen-0.3.0/src/assgen/__init__.py +3 -0
  171. assgen-0.3.0/src/assgen/__main__.py +12 -0
  172. assgen-0.3.0/src/assgen/_version.py +24 -0
  173. assgen-0.3.0/src/assgen/catalog.py +122 -0
  174. assgen-0.3.0/src/assgen/catalog.yaml +572 -0
  175. assgen-0.3.0/src/assgen/client/__init__.py +1 -0
  176. assgen-0.3.0/src/assgen/client/api.py +209 -0
  177. assgen-0.3.0/src/assgen/client/auto_server.py +163 -0
  178. assgen-0.3.0/src/assgen/client/cli.py +142 -0
  179. assgen-0.3.0/src/assgen/client/commands/__init__.py +1 -0
  180. assgen-0.3.0/src/assgen/client/commands/audio/__init__.py +1 -0
  181. assgen-0.3.0/src/assgen/client/commands/audio/music.py +79 -0
  182. assgen-0.3.0/src/assgen/client/commands/audio/process.py +122 -0
  183. assgen-0.3.0/src/assgen/client/commands/audio/sfx.py +94 -0
  184. assgen-0.3.0/src/assgen/client/commands/audio/voice.py +75 -0
  185. assgen-0.3.0/src/assgen/client/commands/client_cmd.py +133 -0
  186. assgen-0.3.0/src/assgen/client/commands/compose.py +882 -0
  187. assgen-0.3.0/src/assgen/client/commands/config.py +658 -0
  188. assgen-0.3.0/src/assgen/client/commands/gen.py +111 -0
  189. assgen-0.3.0/src/assgen/client/commands/jobs.py +259 -0
  190. assgen-0.3.0/src/assgen/client/commands/models.py +161 -0
  191. assgen-0.3.0/src/assgen/client/commands/pipeline.py +326 -0
  192. assgen-0.3.0/src/assgen/client/commands/procedural.py +177 -0
  193. assgen-0.3.0/src/assgen/client/commands/qa.py +90 -0
  194. assgen-0.3.0/src/assgen/client/commands/scene/__init__.py +1 -0
  195. assgen-0.3.0/src/assgen/client/commands/scene/lighting.py +86 -0
  196. assgen-0.3.0/src/assgen/client/commands/scene/physics.py +88 -0
  197. assgen-0.3.0/src/assgen/client/commands/server.py +249 -0
  198. assgen-0.3.0/src/assgen/client/commands/submit.py +208 -0
  199. assgen-0.3.0/src/assgen/client/commands/support.py +166 -0
  200. assgen-0.3.0/src/assgen/client/commands/tasks.py +418 -0
  201. assgen-0.3.0/src/assgen/client/commands/upgrade.py +210 -0
  202. assgen-0.3.0/src/assgen/client/commands/visual/__init__.py +1 -0
  203. assgen-0.3.0/src/assgen/client/commands/visual/animate.py +95 -0
  204. assgen-0.3.0/src/assgen/client/commands/visual/blockout.py +70 -0
  205. assgen-0.3.0/src/assgen/client/commands/visual/concept.py +74 -0
  206. assgen-0.3.0/src/assgen/client/commands/visual/lod.py +32 -0
  207. assgen-0.3.0/src/assgen/client/commands/visual/mesh.py +115 -0
  208. assgen-0.3.0/src/assgen/client/commands/visual/model.py +159 -0
  209. assgen-0.3.0/src/assgen/client/commands/visual/rig.py +63 -0
  210. assgen-0.3.0/src/assgen/client/commands/visual/sprite.py +29 -0
  211. assgen-0.3.0/src/assgen/client/commands/visual/texture.py +227 -0
  212. assgen-0.3.0/src/assgen/client/commands/visual/ui_cmd.py +328 -0
  213. assgen-0.3.0/src/assgen/client/commands/visual/uv.py +63 -0
  214. assgen-0.3.0/src/assgen/client/commands/visual/vfx.py +67 -0
  215. assgen-0.3.0/src/assgen/client/compose.py +108 -0
  216. assgen-0.3.0/src/assgen/client/context.py +113 -0
  217. assgen-0.3.0/src/assgen/client/output.py +431 -0
  218. assgen-0.3.0/src/assgen/config.py +161 -0
  219. assgen-0.3.0/src/assgen/db.py +370 -0
  220. assgen-0.3.0/src/assgen/sdk.py +124 -0
  221. assgen-0.3.0/src/assgen/server/__init__.py +1 -0
  222. assgen-0.3.0/src/assgen/server/app.py +215 -0
  223. assgen-0.3.0/src/assgen/server/cli.py +197 -0
  224. assgen-0.3.0/src/assgen/server/handlers/__init__.py +8 -0
  225. assgen-0.3.0/src/assgen/server/handlers/audio_ambient_generate.py +58 -0
  226. assgen-0.3.0/src/assgen/server/handlers/audio_music_adaptive.py +54 -0
  227. assgen-0.3.0/src/assgen/server/handlers/audio_music_compose.py +77 -0
  228. assgen-0.3.0/src/assgen/server/handlers/audio_music_loop.py +120 -0
  229. assgen-0.3.0/src/assgen/server/handlers/audio_process_convert.py +58 -0
  230. assgen-0.3.0/src/assgen/server/handlers/audio_process_downmix.py +64 -0
  231. assgen-0.3.0/src/assgen/server/handlers/audio_process_loop_optimize.py +127 -0
  232. assgen-0.3.0/src/assgen/server/handlers/audio_process_normalize.py +89 -0
  233. assgen-0.3.0/src/assgen/server/handlers/audio_process_resample.py +54 -0
  234. assgen-0.3.0/src/assgen/server/handlers/audio_process_trim_silence.py +66 -0
  235. assgen-0.3.0/src/assgen/server/handlers/audio_process_waveform.py +96 -0
  236. assgen-0.3.0/src/assgen/server/handlers/audio_sfx_generate.py +77 -0
  237. assgen-0.3.0/src/assgen/server/handlers/audio_voice_clone.py +64 -0
  238. assgen-0.3.0/src/assgen/server/handlers/audio_voice_tts.py +114 -0
  239. assgen-0.3.0/src/assgen/server/handlers/mesh_utils.py +108 -0
  240. assgen-0.3.0/src/assgen/server/handlers/narrative_dialogue_npc.py +189 -0
  241. assgen-0.3.0/src/assgen/server/handlers/narrative_dialogue_validate.py +118 -0
  242. assgen-0.3.0/src/assgen/server/handlers/narrative_i18n_extract.py +88 -0
  243. assgen-0.3.0/src/assgen/server/handlers/narrative_lore_generate.py +112 -0
  244. assgen-0.3.0/src/assgen/server/handlers/narrative_quest_design.py +130 -0
  245. assgen-0.3.0/src/assgen/server/handlers/narrative_quest_validate.py +149 -0
  246. assgen-0.3.0/src/assgen/server/handlers/pipeline_asset_manifest.py +75 -0
  247. assgen-0.3.0/src/assgen/server/handlers/pipeline_asset_rename.py +125 -0
  248. assgen-0.3.0/src/assgen/server/handlers/pipeline_asset_report.py +90 -0
  249. assgen-0.3.0/src/assgen/server/handlers/pipeline_asset_validate.py +104 -0
  250. assgen-0.3.0/src/assgen/server/handlers/pipeline_git_lfs_rules.py +102 -0
  251. assgen-0.3.0/src/assgen/server/handlers/pipeline_integrate_export.py +152 -0
  252. assgen-0.3.0/src/assgen/server/handlers/procedural_foliage_scatter.py +129 -0
  253. assgen-0.3.0/src/assgen/server/handlers/procedural_level_dungeon.py +167 -0
  254. assgen-0.3.0/src/assgen/server/handlers/procedural_level_voronoi.py +104 -0
  255. assgen-0.3.0/src/assgen/server/handlers/procedural_plant_lsystem.py +144 -0
  256. assgen-0.3.0/src/assgen/server/handlers/procedural_terrain_heightmap.py +115 -0
  257. assgen-0.3.0/src/assgen/server/handlers/procedural_texture_noise.py +116 -0
  258. assgen-0.3.0/src/assgen/server/handlers/procedural_tileset_wfc.py +158 -0
  259. assgen-0.3.0/src/assgen/server/handlers/scene_depth_estimate.py +85 -0
  260. assgen-0.3.0/src/assgen/server/handlers/scene_lighting_hdri.py +91 -0
  261. assgen-0.3.0/src/assgen/server/handlers/scene_physics_collider.py +104 -0
  262. assgen-0.3.0/src/assgen/server/handlers/visual_animate_keyframe.py +114 -0
  263. assgen-0.3.0/src/assgen/server/handlers/visual_animate_mocap.py +226 -0
  264. assgen-0.3.0/src/assgen/server/handlers/visual_animate_retarget.py +408 -0
  265. assgen-0.3.0/src/assgen/server/handlers/visual_blockout_create.py +2 -0
  266. assgen-0.3.0/src/assgen/server/handlers/visual_concept_generate.py +153 -0
  267. assgen-0.3.0/src/assgen/server/handlers/visual_concept_style.py +93 -0
  268. assgen-0.3.0/src/assgen/server/handlers/visual_lod_generate.py +93 -0
  269. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_bounds.py +79 -0
  270. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_center.py +54 -0
  271. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_convert.py +48 -0
  272. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_flipnormals.py +46 -0
  273. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_merge.py +56 -0
  274. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_scale.py +72 -0
  275. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_validate.py +84 -0
  276. assgen-0.3.0/src/assgen/server/handlers/visual_mesh_weld.py +56 -0
  277. assgen-0.3.0/src/assgen/server/handlers/visual_model_create.py +144 -0
  278. assgen-0.3.0/src/assgen/server/handlers/visual_model_multiview.py +156 -0
  279. assgen-0.3.0/src/assgen/server/handlers/visual_model_retopo.py +87 -0
  280. assgen-0.3.0/src/assgen/server/handlers/visual_model_splat.py +171 -0
  281. assgen-0.3.0/src/assgen/server/handlers/visual_rig_auto.py +255 -0
  282. assgen-0.3.0/src/assgen/server/handlers/visual_sprite_pack.py +98 -0
  283. assgen-0.3.0/src/assgen/server/handlers/visual_texture_atlas_pack.py +114 -0
  284. assgen-0.3.0/src/assgen/server/handlers/visual_texture_bake.py +209 -0
  285. assgen-0.3.0/src/assgen/server/handlers/visual_texture_channel_pack.py +83 -0
  286. assgen-0.3.0/src/assgen/server/handlers/visual_texture_convert.py +71 -0
  287. assgen-0.3.0/src/assgen/server/handlers/visual_texture_from_concept.py +165 -0
  288. assgen-0.3.0/src/assgen/server/handlers/visual_texture_generate.py +2 -0
  289. assgen-0.3.0/src/assgen/server/handlers/visual_texture_inpaint.py +87 -0
  290. assgen-0.3.0/src/assgen/server/handlers/visual_texture_mipmap.py +65 -0
  291. assgen-0.3.0/src/assgen/server/handlers/visual_texture_normalmap_convert.py +58 -0
  292. assgen-0.3.0/src/assgen/server/handlers/visual_texture_pbr.py +205 -0
  293. assgen-0.3.0/src/assgen/server/handlers/visual_texture_report.py +102 -0
  294. assgen-0.3.0/src/assgen/server/handlers/visual_texture_resize.py +66 -0
  295. assgen-0.3.0/src/assgen/server/handlers/visual_texture_seamless.py +80 -0
  296. assgen-0.3.0/src/assgen/server/handlers/visual_texture_upscale.py +81 -0
  297. assgen-0.3.0/src/assgen/server/handlers/visual_ui_button.py +193 -0
  298. assgen-0.3.0/src/assgen/server/handlers/visual_ui_icon.py +2 -0
  299. assgen-0.3.0/src/assgen/server/handlers/visual_ui_iconset.py +107 -0
  300. assgen-0.3.0/src/assgen/server/handlers/visual_ui_layout.py +132 -0
  301. assgen-0.3.0/src/assgen/server/handlers/visual_ui_mockup.py +146 -0
  302. assgen-0.3.0/src/assgen/server/handlers/visual_ui_panel.py +90 -0
  303. assgen-0.3.0/src/assgen/server/handlers/visual_ui_screen.py +93 -0
  304. assgen-0.3.0/src/assgen/server/handlers/visual_ui_theme.py +100 -0
  305. assgen-0.3.0/src/assgen/server/handlers/visual_ui_widget.py +91 -0
  306. assgen-0.3.0/src/assgen/server/handlers/visual_uv_auto.py +100 -0
  307. assgen-0.3.0/src/assgen/server/handlers/visual_vfx_particle.py +2 -0
  308. assgen-0.3.0/src/assgen/server/logging_setup.py +93 -0
  309. assgen-0.3.0/src/assgen/server/model_manager.py +308 -0
  310. assgen-0.3.0/src/assgen/server/routes/__init__.py +1 -0
  311. assgen-0.3.0/src/assgen/server/routes/health.py +65 -0
  312. assgen-0.3.0/src/assgen/server/routes/jobs.py +350 -0
  313. assgen-0.3.0/src/assgen/server/routes/models.py +63 -0
  314. assgen-0.3.0/src/assgen/server/validation.py +209 -0
  315. assgen-0.3.0/src/assgen/server/worker.py +286 -0
  316. assgen-0.3.0/src/assgen/version.py +124 -0
  317. assgen-0.3.0/tests/__init__.py +0 -0
  318. assgen-0.3.0/tests/test_api_routes.py +466 -0
  319. assgen-0.3.0/tests/test_catalog.py +78 -0
  320. assgen-0.3.0/tests/test_cli_smoke.py +1109 -0
  321. assgen-0.3.0/tests/test_compose_pipeline.py +240 -0
  322. assgen-0.3.0/tests/test_db.py +232 -0
  323. assgen-0.3.0/tests/test_hf_integration.py +211 -0
  324. assgen-0.3.0/tests/test_tasks.py +106 -0
  325. assgen-0.3.0/tests/test_validation.py +200 -0
  326. assgen-0.3.0/tests/test_version.py +126 -0
@@ -0,0 +1,26 @@
1
+ # ── build/cache artifacts ────────────────────────────────────────────────────
2
+ .git
3
+ .venv
4
+ .venv/
5
+ __pycache__
6
+ *.pyc
7
+ *.pyo
8
+ .pytest_cache
9
+ .ruff_cache
10
+
11
+ # ── generated / built ────────────────────────────────────────────────────────
12
+ dist/
13
+ site/
14
+ *.egg-info
15
+ *.egg-info/
16
+
17
+ # ── docs source (not needed in image) ────────────────────────────────────────
18
+ docs/
19
+ mkdocs.yml
20
+
21
+ # ── dev / CI files ───────────────────────────────────────────────────────────
22
+ .github/
23
+ tests/
24
+ *.md
25
+ !README.md
26
+ docker/
@@ -0,0 +1,8 @@
1
+
2
+ ## Documentation
3
+
4
+ When creating documentation files:
5
+
6
+ - Place them in the `docs/` directory or a subdirectory. Typical subdirectories include `docs/design/` and `docs/research/`.
7
+ - Prepend a UTC timestamp to the `.md` filename in the format `YYYYMMDD_HHMMSS_UTC_` so files sort chronologically (e.g., `docs/design/20260329_150800_UTC_architecture_overview.md`).
8
+
@@ -0,0 +1,29 @@
1
+ {
2
+ "version": 1,
3
+ "hooks": {
4
+ "sessionStart": [
5
+ {
6
+ "type": "command",
7
+ "bash": "bash ~/.claude/hooks/peon-ping/adapters/copilot.sh sessionStart"
8
+ }
9
+ ],
10
+ "userPromptSubmitted": [
11
+ {
12
+ "type": "command",
13
+ "bash": "bash ~/.claude/hooks/peon-ping/adapters/copilot.sh userPromptSubmitted"
14
+ }
15
+ ],
16
+ "postToolUse": [
17
+ {
18
+ "type": "command",
19
+ "bash": "bash ~/.claude/hooks/peon-ping/adapters/copilot.sh postToolUse"
20
+ }
21
+ ],
22
+ "errorOccurred": [
23
+ {
24
+ "type": "command",
25
+ "bash": "bash ~/.claude/hooks/peon-ping/adapters/copilot.sh errorOccurred"
26
+ }
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,92 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+ branches: ["main"]
8
+
9
+ jobs:
10
+ lint-and-test:
11
+ name: Lint & Test (Python ${{ matrix.python-version }})
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ python-version: ["3.11", "3.12"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+ cache: pip
26
+
27
+ - name: Install dev dependencies
28
+ run: pip install -e ".[dev]"
29
+
30
+ - name: Lint with ruff
31
+ run: ruff check src/ tests/
32
+
33
+ - name: Check OpenAPI spec is up to date
34
+ run: python scripts/export_openapi.py --check
35
+
36
+ - name: Run tests
37
+ run: pytest -v --tb=short -q -m "not integration"
38
+
39
+ hf-integration:
40
+ name: HuggingFace Integration Tests
41
+ runs-on: ubuntu-latest
42
+ # Only run on pushes to main (not every PR) to avoid hammering HF API
43
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
44
+ needs: lint-and-test
45
+
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+
49
+ - name: Set up Python 3.12
50
+ uses: actions/setup-python@v5
51
+ with:
52
+ python-version: "3.12"
53
+ cache: pip
54
+
55
+ - name: Install dev dependencies
56
+ run: pip install -e ".[dev]"
57
+
58
+ - name: Run HuggingFace integration tests
59
+ run: pytest -v --tb=short -m integration tests/test_hf_integration.py
60
+
61
+ docker-build:
62
+ name: Docker Build (smoke test)
63
+ runs-on: ubuntu-latest
64
+ needs: lint-and-test
65
+
66
+ steps:
67
+ - uses: actions/checkout@v4
68
+
69
+ - name: Set up Docker Buildx
70
+ uses: docker/setup-buildx-action@v3
71
+
72
+ - name: Build server image
73
+ uses: docker/build-push-action@v6
74
+ with:
75
+ context: .
76
+ file: docker/Dockerfile.server
77
+ push: false
78
+ build-args: VERSION=0.0.0.dev0
79
+ tags: assgen-server:ci
80
+ cache-from: type=gha
81
+ cache-to: type=gha,mode=max
82
+
83
+ - name: Build client image
84
+ uses: docker/build-push-action@v6
85
+ with:
86
+ context: .
87
+ file: docker/Dockerfile.client
88
+ push: false
89
+ build-args: VERSION=0.0.0.dev0
90
+ tags: assgen-client:ci
91
+ cache-from: type=gha
92
+ cache-to: type=gha,mode=max
@@ -0,0 +1,50 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ tags:
8
+ - "v*"
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ concurrency:
17
+ group: pages
18
+ cancel-in-progress: false
19
+
20
+ jobs:
21
+ deploy:
22
+ name: Build & Deploy Docs
23
+ runs-on: ubuntu-latest
24
+ environment:
25
+ name: github-pages
26
+ url: ${{ steps.deploy.outputs.page_url }}
27
+
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+
31
+ - name: Set up Python 3.12
32
+ uses: actions/setup-python@v5
33
+ with:
34
+ python-version: "3.12"
35
+ cache: pip
36
+
37
+ - name: Install package + docs dependencies
38
+ run: pip install -e ".[docs]"
39
+
40
+ - name: Build docs
41
+ run: mkdocs build --strict --site-dir site
42
+
43
+ - name: Upload Pages artifact
44
+ uses: actions/upload-pages-artifact@v3
45
+ with:
46
+ path: site
47
+
48
+ - name: Deploy to GitHub Pages
49
+ id: deploy
50
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,429 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v[0-9]+.[0-9]+.[0-9]+" # strict semver: v1.2.3
7
+ - "v[0-9]+.[0-9]+.[0-9]+-*" # pre-releases: v1.2.3-rc.1, v1.2.3-beta.1
8
+
9
+ permissions:
10
+ contents: write
11
+ pages: write
12
+ id-token: write
13
+ packages: write # needed to push Docker images to ghcr.io
14
+
15
+ # ---------------------------------------------------------------------------
16
+ # Validate the tag is proper semver before we do any real work.
17
+ # A typo like "v0.1" will abort here rather than produce a broken release.
18
+ # ---------------------------------------------------------------------------
19
+ jobs:
20
+ validate-tag:
21
+ name: Validate semver tag
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: Check tag format
25
+ run: |
26
+ TAG="${GITHUB_REF_NAME}"
27
+ if ! echo "$TAG" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then
28
+ echo "ERROR: Tag '$TAG' is not valid semver (expected vMAJOR.MINOR.PATCH[-prerelease])"
29
+ exit 1
30
+ fi
31
+ echo "Tag '$TAG' is valid semver ✓"
32
+
33
+ # ---------------------------------------------------------------------------
34
+ # Build wheel + sdist, run tests, build and attach docs
35
+ # ---------------------------------------------------------------------------
36
+ release:
37
+ name: Build & Publish Release
38
+ runs-on: ubuntu-latest
39
+ needs: validate-tag
40
+
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ with:
44
+ fetch-depth: 0 # needed so hatch-vcs can read all tags
45
+
46
+ - name: Set up Python 3.12
47
+ uses: actions/setup-python@v5
48
+ with:
49
+ python-version: "3.12"
50
+ cache: pip
51
+
52
+ - name: Install dev + build + docs dependencies
53
+ run: pip install -e ".[dev,docs]" hatch
54
+
55
+ - name: Lint with ruff
56
+ run: ruff check src/ tests/
57
+
58
+ - name: Run tests
59
+ run: pytest -v --tb=short -m "not integration"
60
+
61
+ - name: Build distribution packages
62
+ run: hatch build
63
+
64
+ - name: Publish to PyPI
65
+ uses: pypa/gh-action-pypi-publish@release/v1
66
+ with:
67
+ # Uses Trusted Publishing (OIDC) — no API token needed.
68
+ # One-time setup: pypi.org → your project → Publishing → add GitHub publisher:
69
+ # Owner: aallbrig Repo: assgen Workflow: release.yml Environment: (blank)
70
+ skip-existing: true
71
+
72
+ - name: Build docs site
73
+ run: mkdocs build --strict
74
+
75
+ - name: Zip docs
76
+ run: |
77
+ VERSION="${{ github.ref_name }}"
78
+ zip -r "assgen-docs-${VERSION}.zip" site/
79
+
80
+ - name: Upload to GitHub Release
81
+ uses: softprops/action-gh-release@v2
82
+ with:
83
+ files: |
84
+ dist/*
85
+ assgen-docs-*.zip
86
+ generate_release_notes: true
87
+ body: |
88
+ ## assgen ${{ github.ref_name }}
89
+
90
+ ### Install via pip
91
+ ```bash
92
+ pip install assgen==${{ github.ref_name }}
93
+ ```
94
+
95
+ Or use the upgrade command if you already have assgen installed:
96
+ ```bash
97
+ assgen upgrade
98
+ ```
99
+
100
+ ### Standalone binaries
101
+ Grab the pre-built binary for your platform from the assets below —
102
+ no Python installation required.
103
+
104
+ | Platform | File |
105
+ |---|---|
106
+ | Windows (x64) | `assgen-${{ github.ref_name }}-windows-x64.exe` |
107
+ | Linux (x64) | `assgen-${{ github.ref_name }}-linux-x64` |
108
+ | macOS (x64) | `assgen-${{ github.ref_name }}-macos-x64` |
109
+
110
+ ### Install via Homebrew (macOS / Linux)
111
+ ```bash
112
+ brew install aallbrig/tap/assgen
113
+ ```
114
+
115
+ ### Install via Chocolatey (Windows)
116
+ ```powershell
117
+ choco install assgen
118
+ ```
119
+
120
+ ### Docker (server)
121
+ ```bash
122
+ docker pull ghcr.io/${{ github.repository_owner }}/assgen-server:${{ github.ref_name }}
123
+ ```
124
+
125
+ See the [README](https://github.com/${{ github.repository }}/blob/main/README.md)
126
+ for full usage documentation. Offline docs are attached as
127
+ `assgen-docs-${{ github.ref_name }}.zip`.
128
+
129
+ # ---------------------------------------------------------------------------
130
+ # Build standalone client binaries with PyInstaller
131
+ # ---------------------------------------------------------------------------
132
+ binaries:
133
+ name: Build binary (${{ matrix.os }})
134
+ runs-on: ${{ matrix.os }}
135
+ needs: validate-tag
136
+ strategy:
137
+ fail-fast: false
138
+ matrix:
139
+ include:
140
+ - os: ubuntu-latest
141
+ artifact_name: assgen
142
+ asset_suffix: linux-x64
143
+ - os: windows-latest
144
+ artifact_name: assgen.exe
145
+ asset_suffix: windows-x64
146
+ - os: macos-latest
147
+ artifact_name: assgen
148
+ asset_suffix: macos-x64
149
+
150
+ steps:
151
+ - uses: actions/checkout@v4
152
+ with:
153
+ fetch-depth: 0
154
+
155
+ - name: Set up Python 3.12
156
+ uses: actions/setup-python@v5
157
+ with:
158
+ python-version: "3.12"
159
+ cache: pip
160
+
161
+ - name: Install package + PyInstaller
162
+ run: pip install -e "." pyinstaller
163
+
164
+ - name: Build standalone binary
165
+ run: pyinstaller pyinstaller/assgen-client.spec
166
+
167
+ - name: Rename artifact with platform suffix
168
+ shell: bash
169
+ run: |
170
+ VERSION="${{ github.ref_name }}"
171
+ mv dist/${{ matrix.artifact_name }} \
172
+ dist/assgen-${VERSION}-${{ matrix.asset_suffix }}${{ matrix.os == 'windows-latest' && '.exe' || '' }}
173
+
174
+ - name: Upload binary to GitHub Release
175
+ uses: softprops/action-gh-release@v2
176
+ with:
177
+ files: dist/assgen-${{ github.ref_name }}-${{ matrix.asset_suffix }}${{ matrix.os == 'windows-latest' && '.exe' || '' }}
178
+
179
+ # ---------------------------------------------------------------------------
180
+ # Build & push Docker images with full semver tags
181
+ # ---------------------------------------------------------------------------
182
+ docker:
183
+ name: Build & Push Docker Images
184
+ runs-on: ubuntu-latest
185
+ needs: release
186
+
187
+ steps:
188
+ - uses: actions/checkout@v4
189
+ with:
190
+ fetch-depth: 0
191
+
192
+ - name: Set up Docker Buildx
193
+ uses: docker/setup-buildx-action@v3
194
+
195
+ - name: Log in to GitHub Container Registry
196
+ uses: docker/login-action@v3
197
+ with:
198
+ registry: ghcr.io
199
+ username: ${{ github.actor }}
200
+ password: ${{ secrets.GITHUB_TOKEN }}
201
+
202
+ - name: Extract version (strip leading v)
203
+ id: ver
204
+ run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
205
+
206
+ # docker/metadata-action generates all semver tag variants automatically:
207
+ # v1.2.3 → :1.2.3, :1.2, :1, :latest (stable)
208
+ # v1.2.3-rc.1 → :1.2.3-rc.1 (pre-release, no :latest)
209
+ - name: Generate Docker metadata — server
210
+ id: meta-server
211
+ uses: docker/metadata-action@v5
212
+ with:
213
+ images: ghcr.io/${{ github.repository_owner }}/assgen-server
214
+ tags: |
215
+ type=semver,pattern={{version}}
216
+ type=semver,pattern={{major}}.{{minor}}
217
+ type=semver,pattern={{major}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.') }}
218
+ type=raw,value=latest,enable=${{ !contains(github.ref_name, '-') }}
219
+
220
+ - name: Generate Docker metadata — client
221
+ id: meta-client
222
+ uses: docker/metadata-action@v5
223
+ with:
224
+ images: ghcr.io/${{ github.repository_owner }}/assgen-client
225
+ tags: |
226
+ type=semver,pattern={{version}}
227
+ type=semver,pattern={{major}}.{{minor}}
228
+ type=semver,pattern={{major}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.') }}
229
+ type=raw,value=latest,enable=${{ !contains(github.ref_name, '-') }}
230
+
231
+ - name: Build and push server image (CPU)
232
+ uses: docker/build-push-action@v6
233
+ with:
234
+ context: .
235
+ file: docker/Dockerfile.server
236
+ push: true
237
+ build-args: VERSION=${{ steps.ver.outputs.version }}
238
+ tags: ${{ steps.meta-server.outputs.tags }}
239
+ labels: ${{ steps.meta-server.outputs.labels }}
240
+ cache-from: type=gha
241
+ cache-to: type=gha,mode=max
242
+
243
+ - name: Build and push client image
244
+ uses: docker/build-push-action@v6
245
+ with:
246
+ context: .
247
+ file: docker/Dockerfile.client
248
+ push: true
249
+ build-args: VERSION=${{ steps.ver.outputs.version }}
250
+ tags: ${{ steps.meta-client.outputs.tags }}
251
+ labels: ${{ steps.meta-client.outputs.labels }}
252
+ cache-from: type=gha
253
+ cache-to: type=gha,mode=max
254
+
255
+ # ---------------------------------------------------------------------------
256
+ # Update Homebrew tap formula with new release binaries
257
+ # ---------------------------------------------------------------------------
258
+ homebrew:
259
+ name: Update Homebrew Tap
260
+ runs-on: ubuntu-latest
261
+ needs: binaries
262
+ if: ${{ !contains(github.ref_name, '-') }} # skip pre-releases
263
+
264
+ steps:
265
+ - name: Extract version (strip leading v)
266
+ id: ver
267
+ run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
268
+
269
+ - name: Download release binaries and compute SHA256
270
+ id: sha
271
+ env:
272
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
273
+ run: |
274
+ VERSION="${{ github.ref_name }}"
275
+
276
+ gh release download "$VERSION" \
277
+ --repo "${{ github.repository }}" \
278
+ --pattern "assgen-${VERSION}-macos-x64" \
279
+ --pattern "assgen-${VERSION}-linux-x64" \
280
+ --dir .
281
+
282
+ echo "macos_x64=$(sha256sum "assgen-${VERSION}-macos-x64" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
283
+ echo "linux_x64=$(sha256sum "assgen-${VERSION}-linux-x64" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
284
+
285
+ - name: Checkout homebrew-tap
286
+ uses: actions/checkout@v4
287
+ with:
288
+ repository: aallbrig/homebrew-tap
289
+ token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
290
+ path: homebrew-tap
291
+
292
+ - name: Write formula
293
+ run: |
294
+ VERSION="${{ steps.ver.outputs.version }}"
295
+ TAG="${{ github.ref_name }}"
296
+
297
+ cat > homebrew-tap/Formula/assgen.rb <<'RUBY'
298
+ class Assgen < Formula
299
+ desc "AI-driven game asset generation CLI"
300
+ homepage "https://github.com/aallbrig/assgen"
301
+ version "VERSION_PLACEHOLDER"
302
+ license "MIT"
303
+
304
+ on_macos do
305
+ on_intel do
306
+ url "https://github.com/aallbrig/assgen/releases/download/TAG_PLACEHOLDER/assgen-TAG_PLACEHOLDER-macos-x64"
307
+ sha256 "MACOS_X64_SHA_PLACEHOLDER"
308
+ end
309
+ end
310
+
311
+ on_linux do
312
+ on_intel do
313
+ url "https://github.com/aallbrig/assgen/releases/download/TAG_PLACEHOLDER/assgen-TAG_PLACEHOLDER-linux-x64"
314
+ sha256 "LINUX_X64_SHA_PLACEHOLDER"
315
+ end
316
+ end
317
+
318
+ def install
319
+ binary = Dir["assgen-*"].first || "assgen"
320
+ bin.install binary => "assgen"
321
+ end
322
+
323
+ test do
324
+ assert_match version.to_s, shell_output("#{bin}/assgen --version")
325
+ end
326
+ end
327
+ RUBY
328
+
329
+ # Strip leading whitespace from heredoc (GitHub Actions indentation)
330
+ sed -i 's/^ //' homebrew-tap/Formula/assgen.rb
331
+
332
+ # Replace placeholders
333
+ sed -i "s|VERSION_PLACEHOLDER|${VERSION}|g" homebrew-tap/Formula/assgen.rb
334
+ sed -i "s|TAG_PLACEHOLDER|${TAG}|g" homebrew-tap/Formula/assgen.rb
335
+ sed -i "s|MACOS_X64_SHA_PLACEHOLDER|${{ steps.sha.outputs.macos_x64 }}|g" homebrew-tap/Formula/assgen.rb
336
+ sed -i "s|LINUX_X64_SHA_PLACEHOLDER|${{ steps.sha.outputs.linux_x64 }}|g" homebrew-tap/Formula/assgen.rb
337
+
338
+ - name: Commit and push formula
339
+ working-directory: homebrew-tap
340
+ run: |
341
+ git config user.name "github-actions[bot]"
342
+ git config user.email "github-actions[bot]@users.noreply.github.com"
343
+ git add Formula/assgen.rb
344
+ git commit -m "assgen ${{ github.ref_name }}"
345
+ git push
346
+
347
+ # ---------------------------------------------------------------------------
348
+ # Publish Chocolatey package for Windows
349
+ # ---------------------------------------------------------------------------
350
+ chocolatey:
351
+ name: Publish Chocolatey Package
352
+ runs-on: windows-latest
353
+ needs: binaries
354
+ if: ${{ !contains(github.ref_name, '-') }} # skip pre-releases
355
+
356
+ steps:
357
+ - uses: actions/checkout@v4
358
+ with:
359
+ sparse-checkout: choco
360
+
361
+ - name: Extract version (strip leading v)
362
+ id: ver
363
+ shell: bash
364
+ run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
365
+
366
+ - name: Download Windows binary and compute checksum
367
+ id: sha
368
+ shell: bash
369
+ env:
370
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
371
+ run: |
372
+ VERSION="${{ github.ref_name }}"
373
+ gh release download "$VERSION" \
374
+ --repo "${{ github.repository }}" \
375
+ --pattern "assgen-${VERSION}-windows-x64.exe" \
376
+ --dir .
377
+ echo "win_x64=$(sha256sum "assgen-${VERSION}-windows-x64.exe" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
378
+
379
+ - name: Stamp nuspec and install script
380
+ shell: bash
381
+ run: |
382
+ VERSION="${{ steps.ver.outputs.version }}"
383
+ TAG="${{ github.ref_name }}"
384
+ SHA="${{ steps.sha.outputs.win_x64 }}"
385
+
386
+ sed -i "s|{{VERSION}}|${VERSION}|g" choco/assgen.nuspec
387
+ sed -i "s|{{TAG}}|${TAG}|g" choco/tools/chocolateyinstall.ps1
388
+ sed -i "s|{{CHECKSUM}}|${SHA}|g" choco/tools/chocolateyinstall.ps1
389
+
390
+ - name: Pack and push
391
+ shell: powershell
392
+ run: |
393
+ choco pack choco/assgen.nuspec --output-directory .
394
+ choco push assgen.${{ steps.ver.outputs.version }}.nupkg `
395
+ --source https://push.chocolatey.org/ `
396
+ --api-key ${{ secrets.CHOCOLATEY_API_KEY }}
397
+
398
+
399
+
400
+ # ---------------------------------------------------------------------------
401
+ # Sync HuggingFace Spaces on stable releases (not pre-releases)
402
+ # ---------------------------------------------------------------------------
403
+ spaces-sync:
404
+ name: Sync HuggingFace Spaces
405
+ runs-on: ubuntu-latest
406
+ needs: release # wait for PyPI publish to complete first
407
+ if: ${{ !contains(github.ref_name, '-') }} # skip pre-releases
408
+
409
+ steps:
410
+ - uses: actions/checkout@v4
411
+
412
+ - name: Set up Python 3.12
413
+ uses: actions/setup-python@v5
414
+ with:
415
+ python-version: "3.12"
416
+ cache: pip
417
+
418
+ - name: Install HF CLI
419
+ run: pip install "huggingface_hub[cli]>=0.23"
420
+
421
+ - name: Authenticate HF CLI
422
+ env:
423
+ HF_TOKEN: ${{ secrets.HF_TOKEN }}
424
+ run: hf login --token "$HF_TOKEN"
425
+
426
+ - name: Sync all Spaces
427
+ env:
428
+ VERSION: ${{ github.ref_name }}
429
+ run: python scripts/sync_spaces.py --version "$VERSION"
@@ -0,0 +1,57 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.pyo
5
+ *.pyd
6
+ *.so
7
+ *.egg
8
+ *.egg-info/
9
+ dist/
10
+ build/
11
+ .eggs/
12
+
13
+ # Virtual environments
14
+ .venv/
15
+ venv/
16
+ env/
17
+
18
+ # hatch / build
19
+ .hatch/
20
+ *.dist-info/
21
+
22
+ # Version file — generated by hatch-vcs at build/install time
23
+ src/assgen/_version.py
24
+
25
+ # IDE
26
+ .vscode/
27
+ # Ignore all of .idea except run configurations, which are checked in for developer convenience
28
+ .idea/*
29
+ !.idea/runConfigurations/
30
+ .idea/runConfigurations/*
31
+ !.idea/runConfigurations/*.xml
32
+ *.swp
33
+ *.swo
34
+
35
+ # OS
36
+ .DS_Store
37
+ Thumbs.db
38
+
39
+ # Testing
40
+ .pytest_cache/
41
+ .coverage
42
+ htmlcov/
43
+ .tox/
44
+
45
+ # Ruff
46
+ .ruff_cache/
47
+
48
+ # Local dev overrides
49
+ *.local.yaml
50
+ *.local.toml
51
+
52
+ # VHS demo segments (intermediate recordings)
53
+ demos/segments/
54
+
55
+ # MkDocs built site
56
+ site/
57
+ heightmap*.png