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

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.1.tar.gz (61.8 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.1-py3-none-any.whl (86.3 kB view details)

Uploaded Python 3

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

Hashes for physim-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6b7554b717d2631bc520132bbcb0191d15b514a8e42f8cd9f991c2c18695dc9a
MD5 512ee598497e58882456539b396bc843
BLAKE2b-256 7c55e1c5dcf5d92b15309c186651ae6d2d1294f2c01d32cfe83c7799a13fcf06

See more details on using hashes here.

Provenance

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

Hashes for physim-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 21e3348a89cbcc0644ee9f41467528190d70b85c324f37bf29189a79e3c84f1f
MD5 d12cbcc74f3d0d62221070be9b710d36
BLAKE2b-256 eb62e766dad04e7203acbefbbbea087afd1e8473b960f2fc26af8c25bcaf33db

See more details on using hashes here.

Provenance

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