Livecoding Mode for Python
@catilac がすでに取り組んでいます。
2026年1月24日 から。
評価
この issue はまだ評価されていません。
説明
Leverage bevy_ecs to watch the currently running sketch for changes and hotswap on successfully compiling edits
Edit: I'm currently working on this, but there are some architectural questions I have.
Current Approach
I've created a new bevy Asset called Sketch and spawn that object at Startup.
When I make a change to sketch.py bevy will notice. yay
The question now is how does the actual reloading mechanism work for Python? And there is a larger question of how does this mechanism work for other language frontends (Processing4/java, lua, ocaml, scheme, ruby, etc...)
For Python (w/ pyo3)
- Make a change to
sketch.py - Bevy will observe and [emit an event]
processing_pyo3crate will check if a reload is necessary- Using something like importlib.reload(), pyo3 can reload the module, and skip creating a new graphics context if it doesn't have to, and grab the new draw and setup functions.
+--------+ +------+
| Python |------->| Bevy |
+--------+ +------+
^ |
| |
+-- onChange ----+
What about other language front-ends?
I suppose some custom plugin loading could work. The Sketch Asset could be something that Python introduces, so that would allow for us to only use any of that design only for our pyo3 implementation
The other front-ends would have to build their own systems, and we could expose hot-reloading related FFI methods?
I think at the moment, I really like the idea of just having a Python related Livecoding bevy plugin. I'm still learning about bevy's ECS system, but is it possible for us to represent our "scene graph" as an intermediary that can easily map to the existing entities in bevy?
ie:
def draw():
background(220)
fill(255, 0, 100)
stroke(0)
stroke_weight(2)
rect(100, 100, 200, 150)
when I change stroke_weight, could bevy know to update, or refresh that particular entity?
or is it easier to just drop all the entities and re-run the sketch? I might be over thinking it.
For now I'm going to work towards getting python to hotreload.
- 主要言語
- Rust
- スター
- 69
- フォーク
- 14
- 平均マージ
- 15日 22時間
- マージ済み PR(30日)
- 3
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
processing/libprocessing のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
processing/libprocessing#233 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
processing/libprocessing#229 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
processing/libprocessing#201 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
processing/libprocessing#194 ·
-
documentation
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
processing/libprocessing#146 · コメント 1 件 ·
processing/libprocessing の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
Eynzof/Hermes-CN-Desktop#616 ·
-
bug rules
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
-
app bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
IronCoreLabs/ironcore-alloy#346 ·
-
good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100