# 1. Fork and clone
git clone https://github.com/your-fork/EfficientManim.git
cd EfficientManim
# 2. Create virtual environment
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
# 3. Install dependencies
pip install -r requirements.txt
# 4. Install dev extras (optional)
pip install pytest black isort pyflakes
# 5. Launch
python main.py- Black with default settings (line length 88).
- isort for import ordering.
black app/ ui/ graph/ rendering/ core/ utils/
isort app/ ui/ graph/ rendering/ core/ utils/- Classes:
UpperCamelCase - Functions and methods:
snake_case - Constants:
UPPER_SNAKE_CASE - Private methods:
_single_leading_underscore
- Never call blocking I/O on the main thread. Use
QThreador background tasks. - Use
Signal+connectfor cross-thread communication. - Prefer
deleteLater()for Qt object cleanup.
- Wrap all file I/O in
try/except. - Render workers must emit
errorand never raise across threads. - Log via
LOGGERusing the correct level.
| Module / File | Owner Area | Notes |
|---|---|---|
app/ |
App startup | Bootstrapping and window creation |
ui/ |
UI layer | Main window, panels, dialogs, menus, toolbars |
graph/ |
Graph system | Nodes, edges, layout, scene/view |
rendering/ |
Rendering | Preview/video workers and helpers |
core/ |
Core services | Config, project helpers, history, assets |
utils/ |
Utilities | Tooltips, logging, shortcuts, parsing |
- Add the enum in
graph/node.py. - Update validation rules in
graph/graph_editor.py. - Update code generation in
ui/main_window.py. - Update UI in
ui/panels/node_panel.py. - Document in
docs/node_reference.md.
- Create a
QWidgetinui/panels/. - Instantiate it in
ui/main_window.py. - Add it to the top tab widget.
- Connect to
scene.graph_changed_signalif needed.
- Branch from
main:git checkout -b feature/my-feature. - One PR per feature; keep diffs focused.
- Run basic checks before pushing.
- Update
docs/andREADME.mdif behavior changes.
feat: Add timeline scrubbing to video panel
fix: Correct graph load error handling
docs: Expand node reference
refactor: Extract render helpers
There is currently no automated test suite. Testing is manual:
- Launch the app and verify the feature end-to-end.
- Test edge cases: empty scene, missing assets, invalid project file.
- Render at least one MP4 with changes applied.
If you add tests, place them in tests/ and use pytest.
Open an issue with:
- EfficientManim version (shown in title bar)
- Python version (
python --version) - OS and version
- Steps to reproduce
- Expected vs actual behavior
- Relevant lines from
~/.efficientmanim/app.log