{"id":13680066,"url":"https://github.com/pygfx/pygfx","last_synced_at":"2025-04-29T19:32:44.557Z","repository":{"id":37918241,"uuid":"184745675","full_name":"pygfx/pygfx","owner":"pygfx","description":"Powerful and versatile visualization for Python.","archived":false,"fork":false,"pushed_at":"2025-04-18T22:25:44.000Z","size":44402,"stargazers_count":665,"open_issues_count":132,"forks_count":49,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-04-28T00:42:07.721Z","etag":null,"topics":["3d","3d-engine","3d-graphics","dx12","graphics","metal","python","science","vizualisation","vulkan","wgpu"],"latest_commit_sha":null,"homepage":"https://pygfx.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pygfx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"custom":"https://pygfx.org/sponsor.html","github":"pygfx","open_collective":"pygfx"}},"created_at":"2019-05-03T11:40:58.000Z","updated_at":"2025-04-24T17:32:59.000Z","dependencies_parsed_at":"2023-09-27T12:44:07.105Z","dependency_job_id":"faf8035d-77e0-4fd7-9198-1b8a39665c3e","html_url":"https://github.com/pygfx/pygfx","commit_stats":{"total_commits":541,"total_committers":25,"mean_commits":21.64,"dds":0.5175600739371534,"last_synced_commit":"217e463dbf66d130b8a95e41ddc6ed03d71511f8"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pygfx%2Fpygfx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pygfx%2Fpygfx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pygfx%2Fpygfx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pygfx%2Fpygfx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pygfx","download_url":"https://codeload.github.com/pygfx/pygfx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251569604,"owners_count":21610588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","3d-engine","3d-graphics","dx12","graphics","metal","python","science","vizualisation","vulkan","wgpu"],"created_at":"2024-08-02T13:01:12.703Z","updated_at":"2025-04-29T19:32:39.548Z","avatar_url":"https://github.com/pygfx.png","language":"Python","readme":"\u003ch1 align=\"center\"\u003e\u003cimg src=\"docs/_static/pygfx.svg\" height=\"80\"\u003e\u003cbr\u003ePygfx\u003c/h1\u003e\n\n[![CI ](https://github.com/pygfx/pygfx/workflows/CI/badge.svg)\n](https://github.com/pygfx/pygfx/actions)\n[![Documentation Status\n](https://readthedocs.org/projects/pygfx/badge/?version=stable)\n](https://docs.pygfx.org)\n[![PyPI version ](https://badge.fury.io/py/pygfx.svg)\n](https://badge.fury.io/py/pygfx)\n\nThe purpose of Pygfx is to bring powerful and reliable visualization to the Python world. 🚀\n\nPygfx (py-graphics) is built on [wgpu](https://github.com/pygfx/wgpu-py/), enabling superior performance and reliability compared to OpenGL-based solutions. It is designed for simplicity and versatility: with its modular architecture, you can effortlessly assemble graphical scenes for diverse applications, from scientific visualization to video game rendering.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./docs/_static/readme_sponza.png\" alt=\"drawing\" width=\"200\"/\u003e\n\u003cimg src=\"./docs/_static/readme_pbr_example.webp\" alt=\"drawing\" width=\"200\"/\u003e\n\u003cimg src=\"./docs/_static/readme_torus_knot_wire.png\" alt=\"drawing\" width=\"200\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n[\u003ca href=\"https://docs.pygfx.org/stable/guide.html\"\u003eUser Guide\u003c/a\u003e]\n[\u003ca href=\"https://docs.pygfx.org/stable/_gallery/index.html\"\u003eExample Gallery\u003c/a\u003e]\n[\u003ca href=\"https://docs.pygfx.org/stable/reference.html\"\u003eAPI Reference\u003c/a\u003e]\n\u003c/p\u003e\n\nNeed help? We offer [professional support](https://pygfx.org/sponsor.html).\n\n## Installation\n\n```bash\npip install -U pygfx glfw\n```\n\nTo work correctly, Pygfx needs _some_ window to render to. Glfw is one\nlightweight option, but there are others, too. If you use a different\nwgpu-compatible window manager or only render offscreen you may choose to omit\nglfw. Examples of alternatives include: `jupyter_rfb` (rendering in Jupyter),\n`PyQt`, `PySide`, or `wx`.\n\nIn addition there are some platform\nrequirements, see the [wgpu docs](https://wgpu-py.readthedocs.io/en/stable/start.html). In\nessence, you need modern (enough) graphics drivers, and `pip\u003e=20.3`.\n\n## Status\n\nWe're currently working towards version `1.0`, which means that the API\ncan change with each version. We expect to reach `1.0` near the end of\n2024, at which point we start caring about backwards compatibility.\n\nThis means that until then, you should probably pin the Pygfx version\nthat you're using, and check the [release notes](https://github.com/pygfx/pygfx/releases)\nwhen you update.\n\n## Usage Example\n\n\u003e **Note**\n\u003e The example below is designed against the `main` branch,\n\u003e and may not work on the latest release from pypi, while we're in beta.\n\n\u003e **Note**\n\u003e A walkthrough of this example can be found in [the\n\u003e guide](https://docs.pygfx.org/stable/guide.html#how-to-use-pygfx).\n\n```python\nimport pygfx as gfx\nimport pylinalg as la\n\ncube = gfx.Mesh(\n    gfx.box_geometry(200, 200, 200),\n    gfx.MeshPhongMaterial(color=\"#336699\"),\n)\n\nrot = la.quat_from_euler((0, 0.01), order=\"XY\")\n\ndef animate():\n    cube.local.rotation = la.quat_mul(rot, cube.local.rotation)\n\nif __name__ == \"__main__\":\n    gfx.show(cube, before_render=animate)\n\n```\n\u003cimg src=\"./docs/_static/guide_rotating_cube.gif\" alt=\"drawing\" width=\"400\"/\u003e\n\n\n## Feature Highlights\nSome of Pygfx's key features are:\n\n- SDF based text rendering ([example](\n  https://docs.pygfx.org/stable/_gallery/feature_demo/text_contrast.html))\n- order-independent transparency (OIT) ([example](\n  https://docs.pygfx.org/stable/_gallery/feature_demo/transparency2.html))\n- lights, shadows, and physically based rendering (PBR) ([example](\n  https://docs.pygfx.org/stable/_gallery/feature_demo/pbr.html))\n- event system with built-in picking ([example](\n  https://docs.pygfx.org/stable/_gallery/feature_demo/picking_points.html))\n- texture and color mapping supporting 1D, 2D and 3D data ([example](\n  https://docs.pygfx.org/stable/_gallery/feature_demo/colormap_channels.html))\n\n\nAnd many more! Check out our [feature demos](\nhttps://docs.pygfx.org/stable/_gallery/index.html) in the docs.\n\n## License\n\nPygfx is licensed under the [BSD 2-Clause \"Simplified\" License](LICENSE). This means:\n\n- :white_check_mark: It is free (and open source) forever. :cupid:\n- :white_check_mark: You _can_ use it commercially.\n- :white_check_mark: You _can_ distribute it and freely make changes.\n- :x: You _can not_ hold us accountable for the results of using Pygfx.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n### Development Install\nTo get a working dev install of Pygfx you can use the following steps:\n\n```bash\n# Click the Fork button on GitHub and navigate to your fork\ngit clone \u003caddress_of_your_fork\u003e\ncd pygfx\n# if you use a venv, create and activate it\npip install -e \".[dev,docs,examples]\"\npytest tests\n```\n\n### Testing\n\nThe test suite is divided into three parts; unit tests for the core, unit\ntests for the examples, and screenshot tests for the validation examples.\n\n* `pytest -v tests` runs the core unit tests.\n* `pytest -v examples` tests the examples.\n\nThe screenshot tests are difficult to guarantee across all development\nplatforms and are best run on our CI where more predictable outcomes can be\nachieved. They can run on a local linux machine by selecting the software\nrendering adapter and the tests with the command\n\n* `PYGFX_WGPU_ADAPTER_NAME=llvmpipe pytest examples -k test_examples_compare`\n\nNote that our `pytest.ini` file contains the environment variable\n`PYGFX_DISABLE_SYSTEM_FONTS=1` to help ensure consistency across system\ninstallations.\n\n\n### Code of Conduct\n\nOur code of conduct can be found here: [Code of Conduct](./CODE_OF_CONDUCT.md)\n\n\n## Spelling and pronunciation\n\nLowercase \"pygfx\" is used in code. You can refer to the project in written text using \"Pygfx\".\nPygfx is pronounced as *pie-graphics*.\n","funding_links":["https://pygfx.org/sponsor.html","https://github.com/sponsors/pygfx","https://opencollective.com/pygfx"],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpygfx%2Fpygfx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpygfx%2Fpygfx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpygfx%2Fpygfx/lists"}