vuer 0.0.50__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vuer might be problematic. Click here for more details.
- vuer-0.0.50/LICENSE +21 -0
- vuer-0.0.50/MANIFEST.in +2 -0
- vuer-0.0.50/PKG-INFO +163 -0
- vuer-0.0.50/README +135 -0
- vuer-0.0.50/README.md +112 -0
- vuer-0.0.50/VERSION +1 -0
- vuer-0.0.50/pyproject.toml +114 -0
- vuer-0.0.50/setup.cfg +4 -0
- vuer-0.0.50/setup.py +27 -0
- vuer-0.0.50/vuer/__init__.py +15 -0
- vuer-0.0.50/vuer/__pycache__/__init__.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/__init__.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/__init__.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/base.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/base.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/base.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/events.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/events.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/events.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/serdes.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/serdes.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/serdes.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/server.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/server.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/server.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/types.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/types.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/__pycache__/types.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/addons/__init__.py +0 -0
- vuer-0.0.50/vuer/addons/camera_rtc.py +171 -0
- vuer-0.0.50/vuer/base.py +144 -0
- vuer-0.0.50/vuer/client_build/404.html +15 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-18G0VHqw.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-18G0VHqw.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-Bkj5sU0H.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-Bkj5sU0H.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-Bm8teWZD.js +7734 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-Bm8teWZD.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-CZzxeY6d.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-CZzxeY6d.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-Cg0OFbR3.js +16 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-Cg0OFbR3.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-CmZvw6P9.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-CmZvw6P9.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-D7HrI6pR.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-D7HrI6pR.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-DEEIqcqV.js +102 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-DEEIqcqV.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-DXO4-vDe.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-DXO4-vDe.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-F9PTxH3Y.js +3 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-F9PTxH3Y.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-N_iRFAvl.js +8555 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-N_iRFAvl.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-WT4fnZC5.js +53 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-WT4fnZC5.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-p1qjqNL8.js +283 -0
- vuer-0.0.50/vuer/client_build/assets/chunks/chunk-p1qjqNL8.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/entries/entry-client-routing.PaStComK.js +5 -0
- vuer-0.0.50/vuer/client_build/assets/entries/entry-client-routing.PaStComK.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_editor.CNudNU59.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_editor.CNudNU59.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_error.BNv2Fuig.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_error.BNv2Fuig.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_index.BCFjFkWa.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_index.BCFjFkWa.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_simple.Bea-CbV9.js +2 -0
- vuer-0.0.50/vuer/client_build/assets/entries/pages_simple.Bea-CbV9.js.map +1 -0
- vuer-0.0.50/vuer/client_build/assets/static/editor.B6qEVXNb.css +1 -0
- vuer-0.0.50/vuer/client_build/assets/static/index.BbAhTARb.css +1 -0
- vuer-0.0.50/vuer/client_build/assets/static/logo.2_7Lo9tV.svg +36 -0
- vuer-0.0.50/vuer/client_build/assets/static/onRenderClient.C5hpRi0h.css +1 -0
- vuer-0.0.50/vuer/client_build/editor/index.html +18 -0
- vuer-0.0.50/vuer/client_build/editor/index.pageContext.json +1 -0
- vuer-0.0.50/vuer/client_build/index.html +18 -0
- vuer-0.0.50/vuer/client_build/index.pageContext.json +1 -0
- vuer-0.0.50/vuer/client_build/pages/_error/+Page.d.ts +2 -0
- vuer-0.0.50/vuer/client_build/pages/editor/+Page.d.ts +25 -0
- vuer-0.0.50/vuer/client_build/pages/index/+Page.d.ts +22 -0
- vuer-0.0.50/vuer/client_build/pages/simple/+Page.d.ts +1 -0
- vuer-0.0.50/vuer/client_build/renderer/+config.d.ts +45 -0
- vuer-0.0.50/vuer/client_build/renderer/+onHydrationEnd.d.ts +3 -0
- vuer-0.0.50/vuer/client_build/renderer/+onPageTransitionEnd.d.ts +3 -0
- vuer-0.0.50/vuer/client_build/renderer/+onPageTransitionStart.d.ts +3 -0
- vuer-0.0.50/vuer/client_build/renderer/+onRenderClient.d.ts +2 -0
- vuer-0.0.50/vuer/client_build/renderer/+onRenderHtml.d.ts +2 -0
- vuer-0.0.50/vuer/client_build/renderer/Layout.d.ts +6 -0
- vuer-0.0.50/vuer/client_build/renderer/Link.d.ts +7 -0
- vuer-0.0.50/vuer/client_build/renderer/PageContext.d.ts +19 -0
- vuer-0.0.50/vuer/client_build/renderer/getPageTitle.d.ts +3 -0
- vuer-0.0.50/vuer/client_build/renderer/useData.d.ts +2 -0
- vuer-0.0.50/vuer/client_build/renderer/usePageContext.d.ts +9 -0
- vuer-0.0.50/vuer/client_build/simple/index.html +16 -0
- vuer-0.0.50/vuer/client_build/simple/index.pageContext.json +1 -0
- vuer-0.0.50/vuer/events.py +317 -0
- vuer-0.0.50/vuer/frame/__init__.py +2 -0
- vuer-0.0.50/vuer/frame/__pycache__/__init__.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/frame/__pycache__/convert.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/frame/__pycache__/to_mat.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/frame/convert.py +44 -0
- vuer-0.0.50/vuer/frame/to_mat.py +50 -0
- vuer-0.0.50/vuer/schemas/__init__.py +5 -0
- vuer-0.0.50/vuer/schemas/__pycache__/__init__.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/__init__.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/__init__.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/drei_components.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/drei_components.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/drei_components.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/html_components.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/html_components.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/html_components.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/physics_components.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/physics_components.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/physics_components.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/scene_components.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/scene_components.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/scene_components.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/vuer_components.cpython-311.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/vuer_components.cpython-38.pyc +0 -0
- vuer-0.0.50/vuer/schemas/__pycache__/vuer_components.cpython-39.pyc +0 -0
- vuer-0.0.50/vuer/schemas/drei_components.py +171 -0
- vuer-0.0.50/vuer/schemas/html_components.py +270 -0
- vuer-0.0.50/vuer/schemas/physics_components.py +68 -0
- vuer-0.0.50/vuer/schemas/scene_components.py +1113 -0
- vuer-0.0.50/vuer/schemas/timeline_components.py +0 -0
- vuer-0.0.50/vuer/schemas/vuer_components.py +47 -0
- vuer-0.0.50/vuer/serdes.py +99 -0
- vuer-0.0.50/vuer/server.py +806 -0
- vuer-0.0.50/vuer/types.py +55 -0
- vuer-0.0.50/vuer.egg-info/PKG-INFO +163 -0
- vuer-0.0.50/vuer.egg-info/SOURCES.txt +133 -0
- vuer-0.0.50/vuer.egg-info/dependency_links.txt +1 -0
- vuer-0.0.50/vuer.egg-info/entry_points.txt +2 -0
- vuer-0.0.50/vuer.egg-info/requires.txt +37 -0
- vuer-0.0.50/vuer.egg-info/top_level.txt +1 -0
vuer-0.0.50/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 Ge Yang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
vuer-0.0.50/MANIFEST.in
ADDED
vuer-0.0.50/PKG-INFO
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vuer
|
|
3
|
+
Version: 0.0.50
|
|
4
|
+
Home-page: https://github.com/vuer-ai/vuer
|
|
5
|
+
Author: Ge Yang<ge.ike.yang@gmail.com>
|
|
6
|
+
Author-email: ge.ike.yang@gmail.com
|
|
7
|
+
License: MIT
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: Programming Language :: Python
|
|
10
|
+
Requires-Python: >=3.7
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: params-proto>=2.13.0
|
|
14
|
+
Requires-Dist: pillow
|
|
15
|
+
Requires-Dist: msgpack
|
|
16
|
+
Requires-Dist: numpy>=1.21
|
|
17
|
+
Requires-Dist: websockets
|
|
18
|
+
Provides-Extra: all
|
|
19
|
+
Requires-Dist: aiohttp==3.10.5; extra == "all"
|
|
20
|
+
Requires-Dist: aiohttp-cors; extra == "all"
|
|
21
|
+
Requires-Dist: killport; extra == "all"
|
|
22
|
+
Provides-Extra: example
|
|
23
|
+
Requires-Dist: aiohttp==3.10.5; extra == "example"
|
|
24
|
+
Requires-Dist: aiohttp-cors; extra == "example"
|
|
25
|
+
Requires-Dist: killport; extra == "example"
|
|
26
|
+
Requires-Dist: open3d<0.16.0,>=0.15.0; extra == "example"
|
|
27
|
+
Requires-Dist: trimesh; extra == "example"
|
|
28
|
+
Requires-Dist: cmx; extra == "example"
|
|
29
|
+
Requires-Dist: functional_notations; extra == "example"
|
|
30
|
+
Requires-Dist: ml_logger; extra == "example"
|
|
31
|
+
Requires-Dist: opencv-python; extra == "example"
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: cmx; extra == "dev"
|
|
34
|
+
Requires-Dist: aiohttp==3.10.5; extra == "dev"
|
|
35
|
+
Requires-Dist: aiohttp-cors; extra == "dev"
|
|
36
|
+
Requires-Dist: killport; extra == "dev"
|
|
37
|
+
Requires-Dist: pylint==2.13.4; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest==7.1.2; extra == "dev"
|
|
39
|
+
Requires-Dist: sphinx==7.1.2; extra == "dev"
|
|
40
|
+
Requires-Dist: furo; extra == "dev"
|
|
41
|
+
Requires-Dist: sphinx-autobuild; extra == "dev"
|
|
42
|
+
Requires-Dist: sphinx_copybutton; extra == "dev"
|
|
43
|
+
Requires-Dist: sphinxcontrib-video; extra == "dev"
|
|
44
|
+
Requires-Dist: myst_parser; extra == "dev"
|
|
45
|
+
Requires-Dist: trimesh; extra == "dev"
|
|
46
|
+
Requires-Dist: tqdm; extra == "dev"
|
|
47
|
+
Dynamic: author
|
|
48
|
+
Dynamic: author-email
|
|
49
|
+
Dynamic: home-page
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
<h2>Vuer: Modern High-Performance Visualization for AI & Robotics in VR
|
|
53
|
+
<br/>
|
|
54
|
+
<img src="https://api.netlify.com/api/v1/badges/2df7f3ba-1a26-4047-b76a-d7401f907bb5/deploy-status" alt="Production">
|
|
55
|
+
<a href="https://pypi.org/project/vuer/">
|
|
56
|
+
<img src="https://img.shields.io/pypi/v/vuer.svg" alt="pypi">
|
|
57
|
+
</a>
|
|
58
|
+
<a href="https://docs.vuer.ai">
|
|
59
|
+
<img src="https://readthedocs.org/projects/vuer-py/badge/?version=latest">
|
|
60
|
+
</a>
|
|
61
|
+
</h2>
|
|
62
|
+
<p>
|
|
63
|
+
<strong><code>pip install vuer</code></strong>
|
|
64
|
+
⬝
|
|
65
|
+
visit  <a href="https://docs.vuer.ai">https://docs.vuer.ai</a>  for documentation
|
|
66
|
+
</p>
|
|
67
|
+
|
|
68
|
+
Vuer is a light-weight visualization toolkit for interacting with dynamic 3D and robotics data. It is
|
|
69
|
+
VR and AR ready, and can be run on mobile devices.
|
|
70
|
+
|
|
71
|
+
Our features include:
|
|
72
|
+
|
|
73
|
+
- light-weight and performant
|
|
74
|
+
- VR and AR ready
|
|
75
|
+
- Hackable and extensible
|
|
76
|
+
- Open source, licensed under MIT
|
|
77
|
+
|
|
78
|
+
## Installation
|
|
79
|
+
|
|
80
|
+
You can install `vuer` with `pip`:
|
|
81
|
+
|
|
82
|
+
```shell
|
|
83
|
+
pip install -U 'vuer[all]'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Here is an example that loads a URDF file and displays it in the browser. For a more comprehensive list of examples, please refer to
|
|
87
|
+
the [examples](https://docs.vuer.ai/en/latest/examples/01_trimesh.html) page.
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
from vuer import Vuer, VuerSession
|
|
91
|
+
from vuer.schemas import DefaultScene, Urdf
|
|
92
|
+
|
|
93
|
+
app = Vuer()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@app.spawn(start=True)
|
|
97
|
+
async def main(session: VuerSession):
|
|
98
|
+
app.set @ DefaultScene(
|
|
99
|
+
Urdf("assets/urdf/robotiq.urdf"),
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
while True:
|
|
103
|
+
await session.sleep(0.1)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
[](https://vuer.ai?collapseMenu=True&background=131416,fff&initCamPos=2.8,2.2,2.5&ws=ws%3A%2F%2Flocalhost%3A8012&scene=3gAJqGNoaWxkcmVukd4ABKhjaGlsZHJlbpHeAAaoY2hpbGRyZW6Qo3RhZ6RVcmRmo2tleaExo3NyY9lSaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hc2EtanBsL20yMDIwLXVyZGYtbW9kZWxzL21haW4vcm92ZXIvbTIwMjAudXJkZqtqb2ludFZhbHVlc94AAKhyb3RhdGlvbpPLQAkeuGAAAAAAAKN0YWenTW92YWJsZaNrZXmhMqhwb3NpdGlvbpMAAMs%2FwzMzQAAAAKN0YWelU2NlbmWja2V5oTOidXCTAAABpGdyaWTDqHNob3dMZXZhwqtyYXdDaGlsZHJlbpLeAASoY2hpbGRyZW6Qo3RhZ6xBbWJpZW50TGlnaHSja2V5tWRlZmF1bHRfYW1iaWVudF9saWdodKlpbnRlbnNpdHkB3gAFqGNoaWxkcmVukKN0YWewRGlyZWN0aW9uYWxMaWdodKNrZXm5ZGVmYXVsdF9kaXJlY3Rpb25hbF9saWdodKlpbnRlbnNpdHkBpmhlbHBlcsOsaHRtbENoaWxkcmVukLJiYWNrZ3JvdW5kQ2hpbGRyZW6Q")
|
|
107
|
+
|
|
108
|
+
To get a quick overview of what you can do with `vuer`, check out the following:
|
|
109
|
+
|
|
110
|
+
- take a look at the example gallery [here](https://docs.vuer.ai/en/latest/examples/01_trimesh.html)
|
|
111
|
+
- or try to take a look at this demo with a Unitree Go1 robot in front of a flight of stairs [here](https://docs.vuer.ai/en/latest/tutorials/robotics/urdf_go1_stairs.html)
|
|
112
|
+
|
|
113
|
+
For a comprehensive list of visualization components, please refer to
|
|
114
|
+
the [API documentation on Components](https://docs.vuer.ai/en/latest/api/vuer.html).
|
|
115
|
+
|
|
116
|
+
For a comprehensive list of data types, please refer to the [API documentation on Data Types](https://docs.vuer.ai/en/latest/api/types.html).
|
|
117
|
+
|
|
118
|
+
Now, to run the examples, first download the example datasets.
|
|
119
|
+
|
|
120
|
+
Each subdirectory in the `assets` directory contains a `Makefile`. Run the `make` command in each subdirectory to download the datasets. For
|
|
121
|
+
example:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
cd assets/static_3d
|
|
125
|
+
make
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Then run the examples
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
cd vuer/examples/vuer
|
|
132
|
+
python 01_trimesh.py
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Contributing to Documentation and Features
|
|
136
|
+
|
|
137
|
+
Documentation is a crucial part of the `vuer` ecosystem. To contribute to documentation and usage examples, simply:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
pip install -e '.[all]'
|
|
141
|
+
make docs
|
|
142
|
+
```
|
|
143
|
+
This should fire up an http server at the port `8888`, and you can view the documentation at `http://localhost:8888`.
|
|
144
|
+
|
|
145
|
+
## To Cite
|
|
146
|
+
|
|
147
|
+
```bibtex
|
|
148
|
+
@software{vuer,
|
|
149
|
+
author = {Ge Yang},
|
|
150
|
+
title = {{VUER}: A 3D Visualization and Data Collection Environment for Robot Learning},
|
|
151
|
+
version = {},
|
|
152
|
+
publisher = {GitHub},
|
|
153
|
+
url = {https://github.com/vuer-ai/vuer},
|
|
154
|
+
year = {2024}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## About Us
|
|
159
|
+
|
|
160
|
+
Vuer is built by researchers at MIT and UCSD in fields including robotics, computer vision, and computer graphics.
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
vuer-0.0.50/README
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
.. raw:: html
|
|
2
|
+
|
|
3
|
+
<h2>
|
|
4
|
+
|
|
5
|
+
Vuer: Modern High-Performance Visualization for AI & Robotics in VR
|
|
6
|
+
|
|
7
|
+
.. raw:: html
|
|
8
|
+
|
|
9
|
+
</h2>
|
|
10
|
+
|
|
11
|
+
.. raw:: html
|
|
12
|
+
|
|
13
|
+
<p>
|
|
14
|
+
|
|
15
|
+
pip install vuer ⬝ visit https://docs.vuer.ai for documentation
|
|
16
|
+
|
|
17
|
+
.. raw:: html
|
|
18
|
+
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
Vuer is a light-weight visualization toolkit for interacting with
|
|
22
|
+
dynamic 3D and robotics data. It is VR and AR ready, and can be run on
|
|
23
|
+
mobile devices.
|
|
24
|
+
|
|
25
|
+
Our features include:
|
|
26
|
+
|
|
27
|
+
- light-weight and performant
|
|
28
|
+
- VR and AR ready
|
|
29
|
+
- Hackable and extensible
|
|
30
|
+
- Open source, licensed under MIT
|
|
31
|
+
|
|
32
|
+
Installation
|
|
33
|
+
============
|
|
34
|
+
|
|
35
|
+
You can install ``vuer`` with ``pip``:
|
|
36
|
+
|
|
37
|
+
.. code-block:: shell
|
|
38
|
+
|
|
39
|
+
pip install -U 'vuer[all]'
|
|
40
|
+
|
|
41
|
+
Here is an example that loads a URDF file and displays it in the
|
|
42
|
+
browser. For a more comprehensive list of examples, please refer to the
|
|
43
|
+
`examples <https://docs.vuer.ai/en/latest/examples/01_trimesh.html>`__
|
|
44
|
+
page.
|
|
45
|
+
|
|
46
|
+
.. code-block:: python
|
|
47
|
+
|
|
48
|
+
from vuer import Vuer, VuerSession
|
|
49
|
+
from vuer.schemas import DefaultScene, Urdf
|
|
50
|
+
|
|
51
|
+
app = Vuer()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@app.spawn(start=True)
|
|
55
|
+
async def main(session: VuerSession):
|
|
56
|
+
app.set @ DefaultScene(
|
|
57
|
+
Urdf("assets/urdf/robotiq.urdf"),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
while True:
|
|
61
|
+
await session.sleep(0.1)
|
|
62
|
+
|
|
63
|
+
|Click for Live Demo|
|
|
64
|
+
|
|
65
|
+
To get a quick overview of what you can do with ``vuer``, check out the
|
|
66
|
+
following:
|
|
67
|
+
|
|
68
|
+
- take a look at the example gallery
|
|
69
|
+
`here <https://docs.vuer.ai/en/latest/examples/01_trimesh.html>`__
|
|
70
|
+
- or try to take a look at this demo with a Unitree Go1 robot in front
|
|
71
|
+
of a flight of stairs
|
|
72
|
+
`here <https://docs.vuer.ai/en/latest/tutorials/robotics/urdf_go1_stairs.html>`__
|
|
73
|
+
|
|
74
|
+
For a comprehensive list of visualization components, please refer to
|
|
75
|
+
the `API documentation on
|
|
76
|
+
Components <https://docs.vuer.ai/en/latest/api/vuer.html>`__.
|
|
77
|
+
|
|
78
|
+
For a comprehensive list of data types, please refer to the `API
|
|
79
|
+
documentation on Data
|
|
80
|
+
Types <https://docs.vuer.ai/en/latest/api/types.html>`__.
|
|
81
|
+
|
|
82
|
+
Now, to run the examples, first download the example datasets.
|
|
83
|
+
|
|
84
|
+
Each subdirectory in the ``assets`` directory contains a ``Makefile``.
|
|
85
|
+
Run the ``make`` command in each subdirectory to download the datasets.
|
|
86
|
+
For example:
|
|
87
|
+
|
|
88
|
+
.. code-block:: bash
|
|
89
|
+
|
|
90
|
+
cd assets/static_3d
|
|
91
|
+
make
|
|
92
|
+
|
|
93
|
+
Then run the examples
|
|
94
|
+
|
|
95
|
+
.. code-block:: bash
|
|
96
|
+
|
|
97
|
+
cd vuer/examples/vuer
|
|
98
|
+
python 01_trimesh.py
|
|
99
|
+
|
|
100
|
+
Contributing to Documentation and Features
|
|
101
|
+
==========================================
|
|
102
|
+
|
|
103
|
+
Documentation is a crucial part of the ``vuer`` ecosystem. To contribute
|
|
104
|
+
to documentation and usage examples, simply:
|
|
105
|
+
|
|
106
|
+
.. code-block:: bash
|
|
107
|
+
|
|
108
|
+
pip install -e '.[all]'
|
|
109
|
+
make docs
|
|
110
|
+
|
|
111
|
+
This should fire up an http server at the port ``8888``, and you can
|
|
112
|
+
view the documentation at ``http://localhost:8888``.
|
|
113
|
+
|
|
114
|
+
To Cite
|
|
115
|
+
=======
|
|
116
|
+
|
|
117
|
+
.. code-block:: bibtex
|
|
118
|
+
|
|
119
|
+
@software{vuer,
|
|
120
|
+
author = {Ge Yang},
|
|
121
|
+
title = {{VUER}: A 3D Visualization and Data Collection Environment for Robot Learning},
|
|
122
|
+
version = {},
|
|
123
|
+
publisher = {GitHub},
|
|
124
|
+
url = {https://github.com/vuer-ai/vuer},
|
|
125
|
+
year = {2024}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
About Us
|
|
129
|
+
========
|
|
130
|
+
|
|
131
|
+
Vuer is built by researchers at MIT and UCSD in fields including
|
|
132
|
+
robotics, computer vision, and computer graphics.
|
|
133
|
+
|
|
134
|
+
.. |Click for Live Demo| image:: https://github.com/geyang/vuer/blob/master/assets/curiosity.png?raw=true
|
|
135
|
+
:target: https://vuer.ai?collapseMenu=True&background=131416,fff&initCamPos=2.8,2.2,2.5&ws=ws%3A%2F%2Flocalhost%3A8012&scene=3gAJqGNoaWxkcmVukd4ABKhjaGlsZHJlbpHeAAaoY2hpbGRyZW6Qo3RhZ6RVcmRmo2tleaExo3NyY9lSaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hc2EtanBsL20yMDIwLXVyZGYtbW9kZWxzL21haW4vcm92ZXIvbTIwMjAudXJkZqtqb2ludFZhbHVlc94AAKhyb3RhdGlvbpPLQAkeuGAAAAAAAKN0YWenTW92YWJsZaNrZXmhMqhwb3NpdGlvbpMAAMs%2FwzMzQAAAAKN0YWelU2NlbmWja2V5oTOidXCTAAABpGdyaWTDqHNob3dMZXZhwqtyYXdDaGlsZHJlbpLeAASoY2hpbGRyZW6Qo3RhZ6xBbWJpZW50TGlnaHSja2V5tWRlZmF1bHRfYW1iaWVudF9saWdodKlpbnRlbnNpdHkB3gAFqGNoaWxkcmVukKN0YWewRGlyZWN0aW9uYWxMaWdodKNrZXm5ZGVmYXVsdF9kaXJlY3Rpb25hbF9saWdodKlpbnRlbnNpdHkBpmhlbHBlcsOsaHRtbENoaWxkcmVukLJiYWNrZ3JvdW5kQ2hpbGRyZW6Q%22
|
vuer-0.0.50/README.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<h2>Vuer: Modern High-Performance Visualization for AI & Robotics in VR
|
|
2
|
+
<br/>
|
|
3
|
+
<img src="https://api.netlify.com/api/v1/badges/2df7f3ba-1a26-4047-b76a-d7401f907bb5/deploy-status" alt="Production">
|
|
4
|
+
<a href="https://pypi.org/project/vuer/">
|
|
5
|
+
<img src="https://img.shields.io/pypi/v/vuer.svg" alt="pypi">
|
|
6
|
+
</a>
|
|
7
|
+
<a href="https://docs.vuer.ai">
|
|
8
|
+
<img src="https://readthedocs.org/projects/vuer-py/badge/?version=latest">
|
|
9
|
+
</a>
|
|
10
|
+
</h2>
|
|
11
|
+
<p>
|
|
12
|
+
<strong><code>pip install vuer</code></strong>
|
|
13
|
+
⬝
|
|
14
|
+
visit  <a href="https://docs.vuer.ai">https://docs.vuer.ai</a>  for documentation
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
Vuer is a light-weight visualization toolkit for interacting with dynamic 3D and robotics data. It is
|
|
18
|
+
VR and AR ready, and can be run on mobile devices.
|
|
19
|
+
|
|
20
|
+
Our features include:
|
|
21
|
+
|
|
22
|
+
- light-weight and performant
|
|
23
|
+
- VR and AR ready
|
|
24
|
+
- Hackable and extensible
|
|
25
|
+
- Open source, licensed under MIT
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
You can install `vuer` with `pip`:
|
|
30
|
+
|
|
31
|
+
```shell
|
|
32
|
+
pip install -U 'vuer[all]'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Here is an example that loads a URDF file and displays it in the browser. For a more comprehensive list of examples, please refer to
|
|
36
|
+
the [examples](https://docs.vuer.ai/en/latest/examples/01_trimesh.html) page.
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from vuer import Vuer, VuerSession
|
|
40
|
+
from vuer.schemas import DefaultScene, Urdf
|
|
41
|
+
|
|
42
|
+
app = Vuer()
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@app.spawn(start=True)
|
|
46
|
+
async def main(session: VuerSession):
|
|
47
|
+
app.set @ DefaultScene(
|
|
48
|
+
Urdf("assets/urdf/robotiq.urdf"),
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
while True:
|
|
52
|
+
await session.sleep(0.1)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
[](https://vuer.ai?collapseMenu=True&background=131416,fff&initCamPos=2.8,2.2,2.5&ws=ws%3A%2F%2Flocalhost%3A8012&scene=3gAJqGNoaWxkcmVukd4ABKhjaGlsZHJlbpHeAAaoY2hpbGRyZW6Qo3RhZ6RVcmRmo2tleaExo3NyY9lSaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hc2EtanBsL20yMDIwLXVyZGYtbW9kZWxzL21haW4vcm92ZXIvbTIwMjAudXJkZqtqb2ludFZhbHVlc94AAKhyb3RhdGlvbpPLQAkeuGAAAAAAAKN0YWenTW92YWJsZaNrZXmhMqhwb3NpdGlvbpMAAMs%2FwzMzQAAAAKN0YWelU2NlbmWja2V5oTOidXCTAAABpGdyaWTDqHNob3dMZXZhwqtyYXdDaGlsZHJlbpLeAASoY2hpbGRyZW6Qo3RhZ6xBbWJpZW50TGlnaHSja2V5tWRlZmF1bHRfYW1iaWVudF9saWdodKlpbnRlbnNpdHkB3gAFqGNoaWxkcmVukKN0YWewRGlyZWN0aW9uYWxMaWdodKNrZXm5ZGVmYXVsdF9kaXJlY3Rpb25hbF9saWdodKlpbnRlbnNpdHkBpmhlbHBlcsOsaHRtbENoaWxkcmVukLJiYWNrZ3JvdW5kQ2hpbGRyZW6Q")
|
|
56
|
+
|
|
57
|
+
To get a quick overview of what you can do with `vuer`, check out the following:
|
|
58
|
+
|
|
59
|
+
- take a look at the example gallery [here](https://docs.vuer.ai/en/latest/examples/01_trimesh.html)
|
|
60
|
+
- or try to take a look at this demo with a Unitree Go1 robot in front of a flight of stairs [here](https://docs.vuer.ai/en/latest/tutorials/robotics/urdf_go1_stairs.html)
|
|
61
|
+
|
|
62
|
+
For a comprehensive list of visualization components, please refer to
|
|
63
|
+
the [API documentation on Components](https://docs.vuer.ai/en/latest/api/vuer.html).
|
|
64
|
+
|
|
65
|
+
For a comprehensive list of data types, please refer to the [API documentation on Data Types](https://docs.vuer.ai/en/latest/api/types.html).
|
|
66
|
+
|
|
67
|
+
Now, to run the examples, first download the example datasets.
|
|
68
|
+
|
|
69
|
+
Each subdirectory in the `assets` directory contains a `Makefile`. Run the `make` command in each subdirectory to download the datasets. For
|
|
70
|
+
example:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
cd assets/static_3d
|
|
74
|
+
make
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Then run the examples
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cd vuer/examples/vuer
|
|
81
|
+
python 01_trimesh.py
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Contributing to Documentation and Features
|
|
85
|
+
|
|
86
|
+
Documentation is a crucial part of the `vuer` ecosystem. To contribute to documentation and usage examples, simply:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
pip install -e '.[all]'
|
|
90
|
+
make docs
|
|
91
|
+
```
|
|
92
|
+
This should fire up an http server at the port `8888`, and you can view the documentation at `http://localhost:8888`.
|
|
93
|
+
|
|
94
|
+
## To Cite
|
|
95
|
+
|
|
96
|
+
```bibtex
|
|
97
|
+
@software{vuer,
|
|
98
|
+
author = {Ge Yang},
|
|
99
|
+
title = {{VUER}: A 3D Visualization and Data Collection Environment for Robot Learning},
|
|
100
|
+
version = {},
|
|
101
|
+
publisher = {GitHub},
|
|
102
|
+
url = {https://github.com/vuer-ai/vuer},
|
|
103
|
+
year = {2024}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## About Us
|
|
108
|
+
|
|
109
|
+
Vuer is built by researchers at MIT and UCSD in fields including robotics, computer vision, and computer graphics.
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
vuer-0.0.50/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0.50
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "vuer"
|
|
7
|
+
version = "0.0.50"
|
|
8
|
+
description = ""
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "MIT" }
|
|
11
|
+
requires-python = ">=3.7"
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 3 - Alpha",
|
|
14
|
+
"Programming Language :: Python",
|
|
15
|
+
]
|
|
16
|
+
dependencies = [
|
|
17
|
+
"params-proto>=2.13.0",
|
|
18
|
+
"pillow",
|
|
19
|
+
"msgpack",
|
|
20
|
+
"numpy>=1.21", # because we require numpy.typing.NDArray
|
|
21
|
+
"websockets",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
[project.optional-dependencies]
|
|
25
|
+
# add the cors package, not needed in pyScript
|
|
26
|
+
all = [
|
|
27
|
+
"aiohttp==3.10.5",
|
|
28
|
+
"aiohttp-cors",
|
|
29
|
+
"killport",
|
|
30
|
+
]
|
|
31
|
+
example = [
|
|
32
|
+
"aiohttp==3.10.5",
|
|
33
|
+
"aiohttp-cors",
|
|
34
|
+
"killport",
|
|
35
|
+
"open3d>=0.15.0,<0.16.0",
|
|
36
|
+
"trimesh",
|
|
37
|
+
"cmx",
|
|
38
|
+
"functional_notations",
|
|
39
|
+
"ml_logger",
|
|
40
|
+
"opencv-python"
|
|
41
|
+
]
|
|
42
|
+
dev = [
|
|
43
|
+
"cmx",
|
|
44
|
+
"aiohttp==3.10.5",
|
|
45
|
+
"aiohttp-cors",
|
|
46
|
+
"killport",
|
|
47
|
+
"pylint==2.13.4",
|
|
48
|
+
"pytest==7.1.2",
|
|
49
|
+
"sphinx==7.1.2",
|
|
50
|
+
"furo",
|
|
51
|
+
"sphinx-autobuild",
|
|
52
|
+
"sphinx_copybutton",
|
|
53
|
+
"sphinxcontrib-video",
|
|
54
|
+
"myst_parser",
|
|
55
|
+
# these are very optional but needed for the doc site
|
|
56
|
+
"trimesh",
|
|
57
|
+
"tqdm",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[project.scripts]
|
|
61
|
+
# Note, add the entrypoint name to scripts/completions/install.py to include CLI percentage
|
|
62
|
+
vuer = "vuer:entrypoint"
|
|
63
|
+
|
|
64
|
+
[tool.setuptools.packages.find]
|
|
65
|
+
include = ["vuer*"]
|
|
66
|
+
|
|
67
|
+
[tool.setuptools.package-data]
|
|
68
|
+
"*" = ["*.json"]
|
|
69
|
+
|
|
70
|
+
# black
|
|
71
|
+
[tool.black]
|
|
72
|
+
line-length = 120
|
|
73
|
+
|
|
74
|
+
# pylint
|
|
75
|
+
[tool.pylint.messages_control]
|
|
76
|
+
max-line-length = 120
|
|
77
|
+
generated-members = []
|
|
78
|
+
good-names-rgxs = "^[_a-zA-Z][_a-z0-9]?$"
|
|
79
|
+
ignore-paths = []
|
|
80
|
+
jobs = 0
|
|
81
|
+
ignored-classes = ["TensorDataclass"]
|
|
82
|
+
|
|
83
|
+
disable = [
|
|
84
|
+
"duplicate-code",
|
|
85
|
+
"fixme",
|
|
86
|
+
"logging-fstring-interpolation",
|
|
87
|
+
"too-many-arguments",
|
|
88
|
+
"too-many-branches",
|
|
89
|
+
"too-many-instance-attributes",
|
|
90
|
+
"too-many-locals",
|
|
91
|
+
"unnecessary-ellipsis",
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
#pytest
|
|
95
|
+
#[tool.pytest.ini_options]
|
|
96
|
+
#addopts = "-n=4 --typeguard-packages=vuer --disable-warnings"
|
|
97
|
+
#testpaths = [
|
|
98
|
+
# "tests",
|
|
99
|
+
#]
|
|
100
|
+
|
|
101
|
+
# pyright
|
|
102
|
+
[tool.pyright]
|
|
103
|
+
include = ["vuer"]
|
|
104
|
+
exclude = ["**/node_modules", "**/__pycache__", ]
|
|
105
|
+
#ignore = ["nerf_vuer"]
|
|
106
|
+
defineConstant = { DEBUG = true }
|
|
107
|
+
|
|
108
|
+
reportMissingImports = true
|
|
109
|
+
reportMissingTypeStubs = false
|
|
110
|
+
reportPrivateImportUsage = false
|
|
111
|
+
reportUndefinedVariable = false
|
|
112
|
+
|
|
113
|
+
#pythonVersion = "3.8"
|
|
114
|
+
#pythonPlatform = "Linux"
|
vuer-0.0.50/setup.cfg
ADDED
vuer-0.0.50/setup.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from os import path
|
|
2
|
+
from setuptools import setup, find_packages
|
|
3
|
+
|
|
4
|
+
with open(path.join(path.abspath(path.dirname(__file__)), 'VERSION'), encoding='utf-8') as f:
|
|
5
|
+
version = f.read()
|
|
6
|
+
|
|
7
|
+
with open(path.join(path.abspath(path.dirname(__file__)), 'README'), encoding='utf-8') as f:
|
|
8
|
+
long_description = f.read()
|
|
9
|
+
|
|
10
|
+
setup(name='vuer',
|
|
11
|
+
packages=find_packages(),
|
|
12
|
+
install_requires=[
|
|
13
|
+
"killport",
|
|
14
|
+
"msgpack",
|
|
15
|
+
"params-proto",
|
|
16
|
+
"numpy",
|
|
17
|
+
"websockets",
|
|
18
|
+
"aiohttp-cors",
|
|
19
|
+
"pillow",
|
|
20
|
+
],
|
|
21
|
+
description=long_description.split('\n')[0],
|
|
22
|
+
long_description=long_description,
|
|
23
|
+
author='Ge Yang<ge.ike.yang@gmail.com>',
|
|
24
|
+
url='https://github.com/vuer-ai/vuer',
|
|
25
|
+
author_email='ge.ike.yang@gmail.com',
|
|
26
|
+
package_data={'vuer': ['vuer', 'vuer/*.*']},
|
|
27
|
+
version=version)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Conditional import for the pyScript.
|
|
2
|
+
try:
|
|
3
|
+
from vuer.server import Vuer, VuerSession
|
|
4
|
+
except ImportError:
|
|
5
|
+
print("""
|
|
6
|
+
By default, vuer does not include the aiohttp and aiohttp-cors packages
|
|
7
|
+
to enable installation in PyScript environments. For most usecase, you
|
|
8
|
+
should install with the [all] option to include all dependencies.
|
|
9
|
+
|
|
10
|
+
pip install 'vuer[all]'
|
|
11
|
+
|
|
12
|
+
Use `'` if using zsh since `[` is a special character.
|
|
13
|
+
|
|
14
|
+
Also, we require numpy>=1.21 for numpy.typing.NDArray.
|
|
15
|
+
""")
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|