Skip to main content

physim

PyPI Python License CI Code style

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.plugins entry 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

For AI agents

ai-tutorial.md is a complete reference written for coding agents: the API surface, the coordinate system, the common mistakes, and a worked example.

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

physim-0.1.3.tar.gz (65.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

physim-0.1.3-py3-none-any.whl (89.7 kB view details)

Uploaded Python 3

File details

Details for the file physim-0.1.3.tar.gz.

File metadata

  • Download URL: physim-0.1.3.tar.gz
  • Upload date:
  • Size: 65.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for physim-0.1.3.tar.gz
Algorithm Hash digest
SHA256 7c66ec67e59b8f7874a8583ffaf24884681a9a75f784db9af1bd54ee15412593
MD5 4fd8a9b96c7b73d71a7a62c9cfe9cebe
BLAKE2b-256 74ec94ba87044536c89073bbafb56d6ff57c7a9d1ccc99c8ce6ab42db57528f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for physim-0.1.3.tar.gz:

Publisher: release.yml on TRC-Loop/physim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file physim-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: physim-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 89.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for physim-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 56da22cad5ef557b48daa6a5b5e42fe8fc47b9db58cdde66fa40ddd752bb3a04
MD5 3a2cc69e7d050604bfcdbe65a3bd2e86
BLAKE2b-256 2299298c599e23bcf16a6850a1d26c2d85d3e7854d57ab9c995357204ba9d1ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for physim-0.1.3-py3-none-any.whl:

Publisher: release.yml on TRC-Loop/physim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page