Skip to main content

physim

physim demo

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.4.tar.gz (65.4 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.4-py3-none-any.whl (89.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: physim-0.1.4.tar.gz
  • Upload date:
  • Size: 65.4 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.4.tar.gz
Algorithm Hash digest
SHA256 ec6fa4fabfcc788fce226e39d51003225cb28fbd32e766a1dc57ce185fb35c14
MD5 a4af2de67caf040be7a5295f2fcf1d48
BLAKE2b-256 49c83638806234338d50f01a6445263a81e5f0ad7920aae331c76cc2a7286cda

See more details on using hashes here.

Provenance

The following attestation bundles were made for physim-0.1.4.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.4-py3-none-any.whl.

File metadata

  • Download URL: physim-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 89.8 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 58498376ed4d53115b3fb273be0814942d613b23b6b97b32510290473c81aeb1
MD5 99e0abd2c52a3bb577f06df89d918bfe
BLAKE2b-256 fbc13a3bde296099cc5554eb99d75b55c69c118a78fd7f0b5877d2ff394da4cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for physim-0.1.4-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