Python library for the bouncing and growing object animations you see on social media.
Every frame is rendered offline, so the exported video never stutters or drops frames.
What it does
- Balls, polygons, stars and rects bouncing inside rings and arenas
- Rings with spinning gaps that objects escape through, plus stacked concentric rings
- Objects that grow, speed up, change color, clone themselves or vanish on any event
- Trails, glow, motion blur and gradient or image backgrounds
- Styled text with fonts, weights, italics, underline, strikethrough, gradients and backgrounds
- Shapes defined by math expressions, parametric and implicit
- Sound: synthesized tones, sample files and melodies that play the next note on every bounce
- MP4 and MKV export at any resolution and framerate, plus a live preview window
- Debug overlay with fps, frametime, object count, collisions and timings, all readable from code
- Third party addons through the
physim.pluginsentry point
Install
pip install physim[all]
Core stays lean if you would rather opt in:
| Install | Pulls in | Gives you |
|---|---|---|
physim |
numpy, skia-python, av, coloraide, alive-progress, yaspin | rendering and MP4/MKV export |
physim[cli] |
typer, rich | the physim command |
physim[preview] |
opencv-python, sounddevice | live preview window with audio |
physim[audio] |
mido | melodies from MIDI files |
physim[expr] |
sympy | shapes defined by math expressions |
physim[presets] |
physim-presets | color palettes and physics presets |
physim[examples] |
physim-examples | runnable example scenes |
physim[gpu] |
glfw | GPU rasterization via an offscreen GL context |
physim[all] |
everything above |
Run it
# scene.py
from physim import Circle, HollowCircle, RGBCycle, Scene
from physim.actions import Grow, SpeedUp
from physim.effects import Glow, Trail
from physim.events import Bounce
class Bouncy(Scene):
"""A ball that grows and speeds up on every bounce."""
def construct(self):
self.add(HollowCircle(radius=420, stroke="#ffffff"))
ball = Circle(radius=16, fill=RGBCycle(), velocity=(280, 60))
ball.add_effect(Trail(length=28), Glow(strength=0.6))
ball.on(Bounce, Grow(3, max_size=380))
ball.on(Bounce, SpeedUp(1.02, max_speed=2200))
self.add(ball)
self.run(seconds=15)
physim render scene.py Bouncy --debug
Or skip the CLI entirely:
python -c "from scene import Bouncy; Bouncy().render()"
Examples
pip install physim[examples]
python -m physim_examples # list them all
python -m physim_examples.bouncing_ball
python -m physim_examples.escape_ring --debug
python -m physim_examples.ring_stack --seconds 5 -o out.mp4
CLI
physim render scene.py [Scene] # render to video
physim list scene.py # show the scenes in a file
physim preview scene.py # live window
physim info # version, installed features, presets
| Flag | Does |
|---|---|
-o, --output |
output file path |
-f, --format |
mp4 or mkv |
-r, --resolution |
square, vertical, landscape, hd, fhd, 4k or 1080x1920 |
--fps |
frames per second |
-s, --seconds |
override the scene length |
-p, --physics |
physics preset name |
--seed |
random seed, for reproducible renders |
--motion-blur N |
sub-frame samples per frame |
-b, --backend |
auto, cpu or gpu |
--hardware-encode |
use a hardware video encoder when available |
-d, --debug |
overlay fps, frametime, objects, collisions and timings |
--audio-file |
also write the audio to a separate file |
--audio-only |
write only the audio track |
--no-audio |
skip audio entirely |
-q, --quiet |
hide the progress bar |
Development
poetry install --all-extras
poetry run pytest
poetry run ruff check .
poetry run ruff format .
This repo also holds packages/physim-presets and packages/physim-examples.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file physim-0.1.1.tar.gz.
File metadata
- Download URL: physim-0.1.1.tar.gz
- Upload date:
- Size: 61.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b7554b717d2631bc520132bbcb0191d15b514a8e42f8cd9f991c2c18695dc9a
|
|
| MD5 |
512ee598497e58882456539b396bc843
|
|
| BLAKE2b-256 |
7c55e1c5dcf5d92b15309c186651ae6d2d1294f2c01d32cfe83c7799a13fcf06
|
Provenance
The following attestation bundles were made for physim-0.1.1.tar.gz:
Publisher:
release.yml on TRC-Loop/physim
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
physim-0.1.1.tar.gz -
Subject digest:
6b7554b717d2631bc520132bbcb0191d15b514a8e42f8cd9f991c2c18695dc9a - Sigstore transparency entry: 2335468764
- Sigstore integration time:
-
Permalink:
TRC-Loop/physim@24baec71d92bc08dd78a6498120cbb04e9a25319 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/TRC-Loop
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@24baec71d92bc08dd78a6498120cbb04e9a25319 -
Trigger Event:
release
-
Statement type:
File details
Details for the file physim-0.1.1-py3-none-any.whl.
File metadata
- Download URL: physim-0.1.1-py3-none-any.whl
- Upload date:
- Size: 86.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21e3348a89cbcc0644ee9f41467528190d70b85c324f37bf29189a79e3c84f1f
|
|
| MD5 |
d12cbcc74f3d0d62221070be9b710d36
|
|
| BLAKE2b-256 |
eb62e766dad04e7203acbefbbbea087afd1e8473b960f2fc26af8c25bcaf33db
|
Provenance
The following attestation bundles were made for physim-0.1.1-py3-none-any.whl:
Publisher:
release.yml on TRC-Loop/physim
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
physim-0.1.1-py3-none-any.whl -
Subject digest:
21e3348a89cbcc0644ee9f41467528190d70b85c324f37bf29189a79e3c84f1f - Sigstore transparency entry: 2335468802
- Sigstore integration time:
-
Permalink:
TRC-Loop/physim@24baec71d92bc08dd78a6498120cbb04e9a25319 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/TRC-Loop
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@24baec71d92bc08dd78a6498120cbb04e9a25319 -
Trigger Event:
release
-
Statement type: