asset-gatekeeper 0.1.0a1__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.
- asset_gatekeeper-0.1.0a1/Allow_Folder.bat +33 -0
- asset_gatekeeper-0.1.0a1/CONTRIBUTING.md +66 -0
- asset_gatekeeper-0.1.0a1/Install_Extras.bat +40 -0
- asset_gatekeeper-0.1.0a1/LICENSE +21 -0
- asset_gatekeeper-0.1.0a1/MANIFEST.in +26 -0
- asset_gatekeeper-0.1.0a1/MANUAL.md +1203 -0
- asset_gatekeeper-0.1.0a1/PKG-INFO +168 -0
- asset_gatekeeper-0.1.0a1/QUICKSTART.md +493 -0
- asset_gatekeeper-0.1.0a1/README.md +115 -0
- asset_gatekeeper-0.1.0a1/RELEASE_NOTES.md +817 -0
- asset_gatekeeper-0.1.0a1/Rules.bat +5 -0
- asset_gatekeeper-0.1.0a1/SECURITY.md +26 -0
- asset_gatekeeper-0.1.0a1/Start AssetGatekeeper.bat +66 -0
- asset_gatekeeper-0.1.0a1/Stop.bat +37 -0
- asset_gatekeeper-0.1.0a1/THIRD_PARTY_NOTICES.md +17 -0
- asset_gatekeeper-0.1.0a1/agk_suite/__init__.py +10 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/__init__.py +9 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/tomli/LICENSE +21 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/tomli/__init__.py +11 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/tomli/_parser.py +691 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/tomli/_re.py +107 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/tomli/_types.py +10 -0
- asset_gatekeeper-0.1.0a1/agk_vendor/tomli/py.typed +1 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/PKG-INFO +168 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/SOURCES.txt +134 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/dependency_links.txt +1 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/entry_points.txt +7 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/requires.txt +37 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/top_level.txt +5 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.example.toml +153 -0
- asset_gatekeeper-0.1.0a1/asset_gatekeeper.py +6591 -0
- asset_gatekeeper-0.1.0a1/docs/01-WHAT-IT-IS.md +143 -0
- asset_gatekeeper-0.1.0a1/docs/02-INSTALLATION.md +209 -0
- asset_gatekeeper-0.1.0a1/docs/03-SOLO-DEVELOPER.md +170 -0
- asset_gatekeeper-0.1.0a1/docs/04-STUDIO-ROLLOUT.md +231 -0
- asset_gatekeeper-0.1.0a1/docs/05-RULES-REFERENCE.md +371 -0
- asset_gatekeeper-0.1.0a1/docs/06-CLI-REFERENCE.md +243 -0
- asset_gatekeeper-0.1.0a1/docs/07-ART-WORKSTATION.md +549 -0
- asset_gatekeeper-0.1.0a1/docs/08-ASSETHEALTH.md +224 -0
- asset_gatekeeper-0.1.0a1/docs/09-DCC-PLUGINS.md +421 -0
- asset_gatekeeper-0.1.0a1/docs/10-CI-AND-VERSION-CONTROL.md +288 -0
- asset_gatekeeper-0.1.0a1/docs/11-TROUBLESHOOTING.md +84 -0
- asset_gatekeeper-0.1.0a1/docs/12-UPGRADING-TO-1.1.md +130 -0
- asset_gatekeeper-0.1.0a1/docs/ENTERPRISE.md +473 -0
- asset_gatekeeper-0.1.0a1/docs/README.md +68 -0
- asset_gatekeeper-0.1.0a1/docs/REFERENCE.md +1346 -0
- asset_gatekeeper-0.1.0a1/docs/design/asset-diff-engine-spec.md +248 -0
- asset_gatekeeper-0.1.0a1/engine/__init__.py +1 -0
- asset_gatekeeper-0.1.0a1/engine/fbx_preview.py +640 -0
- asset_gatekeeper-0.1.0a1/engine/light_preview.py +112 -0
- asset_gatekeeper-0.1.0a1/engine/lod_manager.py +759 -0
- asset_gatekeeper-0.1.0a1/engine/lod_shippable.py +478 -0
- asset_gatekeeper-0.1.0a1/engine/polypaint.py +1408 -0
- asset_gatekeeper-0.1.0a1/enterprise/__init__.py +21 -0
- asset_gatekeeper-0.1.0a1/enterprise/analytics.py +394 -0
- asset_gatekeeper-0.1.0a1/enterprise/audit.py +540 -0
- asset_gatekeeper-0.1.0a1/enterprise/auth.py +573 -0
- asset_gatekeeper-0.1.0a1/enterprise/cli.py +386 -0
- asset_gatekeeper-0.1.0a1/enterprise/config.py +515 -0
- asset_gatekeeper-0.1.0a1/enterprise/migrations.py +588 -0
- asset_gatekeeper-0.1.0a1/enterprise/rbac.py +274 -0
- asset_gatekeeper-0.1.0a1/enterprise/remote.py +445 -0
- asset_gatekeeper-0.1.0a1/enterprise/resilience.py +311 -0
- asset_gatekeeper-0.1.0a1/enterprise/store.py +889 -0
- asset_gatekeeper-0.1.0a1/enterprise/vcs.py +377 -0
- asset_gatekeeper-0.1.0a1/healer.py +1149 -0
- asset_gatekeeper-0.1.0a1/notifier.py +236 -0
- asset_gatekeeper-0.1.0a1/plugins/README.md +148 -0
- asset_gatekeeper-0.1.0a1/plugins/__init__.py +9 -0
- asset_gatekeeper-0.1.0a1/plugins/blender/addon.py +361 -0
- asset_gatekeeper-0.1.0a1/plugins/blender/preflight_blender.py +123 -0
- asset_gatekeeper-0.1.0a1/plugins/blender/preflight_panel.py +236 -0
- asset_gatekeeper-0.1.0a1/plugins/houdini/preflight_houdini.py +96 -0
- asset_gatekeeper-0.1.0a1/plugins/houdini/sop_gatekeeper.py +317 -0
- asset_gatekeeper-0.1.0a1/plugins/max/install_max_button.py +21 -0
- asset_gatekeeper-0.1.0a1/plugins/max/max_preflight.py +161 -0
- asset_gatekeeper-0.1.0a1/plugins/maya/gatekeeper_maya.py +303 -0
- asset_gatekeeper-0.1.0a1/plugins/maya/maya_preflight.py +124 -0
- asset_gatekeeper-0.1.0a1/plugins/maya/userSetup.py +119 -0
- asset_gatekeeper-0.1.0a1/plugins/preflight_core.py +315 -0
- asset_gatekeeper-0.1.0a1/plugins/unreal/agk_validator.py +291 -0
- asset_gatekeeper-0.1.0a1/plugins/unreal/import_gatekeeper.py +185 -0
- asset_gatekeeper-0.1.0a1/plugins/unreal/init_unreal.py +447 -0
- asset_gatekeeper-0.1.0a1/plugins/unreal/preflight_unreal.py +112 -0
- asset_gatekeeper-0.1.0a1/plugins/unreal/unreal_preflight.py +92 -0
- asset_gatekeeper-0.1.0a1/pyproject.toml +120 -0
- asset_gatekeeper-0.1.0a1/server/__init__.py +10 -0
- asset_gatekeeper-0.1.0a1/server/art_workstation_server.py +3833 -0
- asset_gatekeeper-0.1.0a1/server/asset_health_server.py +5164 -0
- asset_gatekeeper-0.1.0a1/server/netguard.py +110 -0
- asset_gatekeeper-0.1.0a1/server/static/admin.css +97 -0
- asset_gatekeeper-0.1.0a1/server/static/admin.html +200 -0
- asset_gatekeeper-0.1.0a1/server/static/admin.js +557 -0
- asset_gatekeeper-0.1.0a1/server/static/app.css +345 -0
- asset_gatekeeper-0.1.0a1/server/static/dashboard.js +87 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/LICENSE +21 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/controls/OrbitControls.js +1417 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/geometries/ConvexGeometry.js +53 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/loaders/GLTFLoader.js +4663 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/loaders/MTLLoader.js +567 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/loaders/OBJLoader.js +905 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/math/ConvexHull.js +1271 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/three.module.js +53044 -0
- asset_gatekeeper-0.1.0a1/server/static/vendor/utils/BufferGeometryUtils.js +1375 -0
- asset_gatekeeper-0.1.0a1/server/static/viewer.html +311 -0
- asset_gatekeeper-0.1.0a1/server/static/viewer.js +2595 -0
- asset_gatekeeper-0.1.0a1/setup.cfg +4 -0
- asset_gatekeeper-0.1.0a1/setup.py +11 -0
- asset_gatekeeper-0.1.0a1/templates/rules.toml +119 -0
- asset_gatekeeper-0.1.0a1/tests/_pgsim.py +172 -0
- asset_gatekeeper-0.1.0a1/tests/fixtures/fbx/make_fixtures.py +84 -0
- asset_gatekeeper-0.1.0a1/tests/fresh_install.py +189 -0
- asset_gatekeeper-0.1.0a1/tests/gen_test_assets.py +234 -0
- asset_gatekeeper-0.1.0a1/tests/run_headless_integration.py +596 -0
- asset_gatekeeper-0.1.0a1/tests/test_admin.py +855 -0
- asset_gatekeeper-0.1.0a1/tests/test_analytics.py +478 -0
- asset_gatekeeper-0.1.0a1/tests/test_dcc_integration.py +541 -0
- asset_gatekeeper-0.1.0a1/tests/test_enterprise.py +1069 -0
- asset_gatekeeper-0.1.0a1/tests/test_formats.py +951 -0
- asset_gatekeeper-0.1.0a1/tests/test_gatekeeper.py +3564 -0
- asset_gatekeeper-0.1.0a1/tests/test_realworld.py +914 -0
- asset_gatekeeper-0.1.0a1/tests/test_server.py +1120 -0
- asset_gatekeeper-0.1.0a1/tests/test_viewer_browser.py +1027 -0
- asset_gatekeeper-0.1.0a1/tests/test_workstation.py +2187 -0
- asset_gatekeeper-0.1.0a1/tests/unreal/validate_in_editor.py +111 -0
- asset_gatekeeper-0.1.0a1/tools/__init__.py +5 -0
- asset_gatekeeper-0.1.0a1/tools/agk_serve.py +757 -0
- asset_gatekeeper-0.1.0a1/tools/browser_smoke.py +360 -0
- asset_gatekeeper-0.1.0a1/tools/build_release.py +361 -0
- asset_gatekeeper-0.1.0a1/tools/cdp.py +178 -0
- asset_gatekeeper-0.1.0a1/tools/certify.py +220 -0
- asset_gatekeeper-0.1.0a1/tools/corpus_check.py +211 -0
- asset_gatekeeper-0.1.0a1/tools/houdini_export_hook.py +216 -0
- asset_gatekeeper-0.1.0a1/tools/install_extras.py +223 -0
- asset_gatekeeper-0.1.0a1/tools/open_url_after.py +41 -0
- asset_gatekeeper-0.1.0a1/tools/upload_assets.py +257 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
rem ===========================================================================
|
|
3
|
+
rem AssetGatekeeper - let the Rules & Presets page open another folder.
|
|
4
|
+
rem
|
|
5
|
+
rem Double-click it and choose a folder, or drag a folder onto this file.
|
|
6
|
+
rem The list is kept in .agk\allowed_folders.txt inside this copy, so deleting
|
|
7
|
+
rem this copy removes it too. If the page is running it restarts by itself.
|
|
8
|
+
rem
|
|
9
|
+
rem Show the list: Allow_Folder.bat --list
|
|
10
|
+
rem Take one off: Allow_Folder.bat --remove "D:\Projects\Old"
|
|
11
|
+
rem ===========================================================================
|
|
12
|
+
setlocal
|
|
13
|
+
cd /d "%~dp0"
|
|
14
|
+
set "PYEXE="
|
|
15
|
+
if exist "%~dp0.venv\Scripts\python.exe" set "PYEXE=%~dp0.venv\Scripts\python.exe"
|
|
16
|
+
if not defined PYEXE for /f "delims=" %%I in ('py -3 -c "import sys;print(sys.executable)" 2^>nul') do set "PYEXE=%%I"
|
|
17
|
+
if not defined PYEXE for %%I in (python.exe) do set "PYEXE=%%~$PATH:I"
|
|
18
|
+
if not defined PYEXE goto :nopython
|
|
19
|
+
|
|
20
|
+
"%PYEXE%" "%~dp0tools\agk_serve.py" allow %*
|
|
21
|
+
set "CODE=%ERRORLEVEL%"
|
|
22
|
+
cd /d "%USERPROFILE%"
|
|
23
|
+
echo.
|
|
24
|
+
pause
|
|
25
|
+
exit /b %CODE%
|
|
26
|
+
|
|
27
|
+
:nopython
|
|
28
|
+
echo.
|
|
29
|
+
echo Python was not found.
|
|
30
|
+
echo Install Python 3.9+ from python.org, then run this file again.
|
|
31
|
+
echo.
|
|
32
|
+
pause
|
|
33
|
+
exit /b 1
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Contributing to AssetGatekeeper
|
|
2
|
+
|
|
3
|
+
Thank you for your interest. Please read this before opening an issue or a pull
|
|
4
|
+
request. It explains how the project is run, so nobody puts in time expecting
|
|
5
|
+
something it can't give.
|
|
6
|
+
|
|
7
|
+
## How the project is run
|
|
8
|
+
|
|
9
|
+
AssetGatekeeper is a one-person project. I develop it in my spare time for my own
|
|
10
|
+
projects, and it is shared openly so that anyone can use it or learn from it.
|
|
11
|
+
That keeps it manageable, and it means:
|
|
12
|
+
|
|
13
|
+
- **Development is ongoing.** I fix the bugs I come across and add the features
|
|
14
|
+
my projects need. Every fix and feature reaches everyone who uses it.
|
|
15
|
+
- **I'm not taking feature requests.** It is not that ideas are unwelcome; I
|
|
16
|
+
simply can't build features I don't need myself and keep the project going.
|
|
17
|
+
- **Bug reports are read, but replies can be slow,** and not every report will
|
|
18
|
+
get one. A report is most likely to lead to a fix when it shows a problem I
|
|
19
|
+
can reproduce and that would affect anyone using the tool.
|
|
20
|
+
- **Pull requests probably won't be reviewed or merged.** Reviewing someone
|
|
21
|
+
else's change properly takes time the project doesn't have. If you have built
|
|
22
|
+
something useful, please keep it in your own fork; the MIT licence lets you
|
|
23
|
+
change, use and share it however you like.
|
|
24
|
+
|
|
25
|
+
Security problems are the exception: please report those privately, as
|
|
26
|
+
[SECURITY.md](SECURITY.md) describes.
|
|
27
|
+
|
|
28
|
+
## If you report a bug
|
|
29
|
+
|
|
30
|
+
Use the **Bug report** form and include:
|
|
31
|
+
|
|
32
|
+
- the exact line the tool printed (`FAILED: ...` or `ERROR: ...`), or the traceback;
|
|
33
|
+
- what you expected, and how you know (for example, the triangle count Unreal or
|
|
34
|
+
Blender shows for the same file);
|
|
35
|
+
- your operating system, Python version (`python --version`) and
|
|
36
|
+
`asset-gatekeeper --version`;
|
|
37
|
+
- the file itself, if you are allowed to share it. A file that shows the problem
|
|
38
|
+
is far easier to fix than a description of one.
|
|
39
|
+
|
|
40
|
+
## Working on your own copy
|
|
41
|
+
|
|
42
|
+
1. Fork the repository.
|
|
43
|
+
2. Install it in editable mode: `python -m pip install -e ".[full,dev]"`.
|
|
44
|
+
3. Make your change, and add a check that fails without it. Most rule changes
|
|
45
|
+
need a line in `tests/test_gatekeeper.py` or `tests/test_realworld.py`.
|
|
46
|
+
4. Run the main suites (or `python tools/certify.py` for all of them):
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
python tests/gen_test_assets.py
|
|
50
|
+
python tests/test_realworld.py
|
|
51
|
+
python tests/test_gatekeeper.py
|
|
52
|
+
python tests/test_formats.py
|
|
53
|
+
python -m pyflakes asset_gatekeeper.py healer.py
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Adding a new rule touches three places: the `Budget` field, the check in
|
|
57
|
+
`Gatekeeper`, and the rules reference in `docs/05-RULES-REFERENCE.md`. The DCC
|
|
58
|
+
panels share `plugins/preflight_core.py`, so a rule added there reaches Maya,
|
|
59
|
+
3ds Max and Blender together.
|
|
60
|
+
|
|
61
|
+
## Style the tool keeps to
|
|
62
|
+
|
|
63
|
+
- One line per asset, every problem on it, and the number that broke the rule.
|
|
64
|
+
- A message says what to do, not only what is wrong.
|
|
65
|
+
- No new runtime dependency without a very good reason: artists install this on
|
|
66
|
+
their own machines.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
rem ===========================================================================
|
|
3
|
+
rem AssetGatekeeper - install the libraries it uses. Double-click it.
|
|
4
|
+
rem
|
|
5
|
+
rem Installs anything missing into the same Python that Start AssetGatekeeper.bat uses:
|
|
6
|
+
rem - what the gate needs (trimesh, Pillow, ...), if the start file said so
|
|
7
|
+
rem - the Polypaint bake (fast-simplification, xatlas, scipy; Python 3.10+)
|
|
8
|
+
rem - watchdog (faster folder watching)
|
|
9
|
+
rem Nothing that already works is changed, so running it twice is harmless.
|
|
10
|
+
rem
|
|
11
|
+
rem Only check, change nothing: Install_Extras.bat --check
|
|
12
|
+
rem ===========================================================================
|
|
13
|
+
setlocal
|
|
14
|
+
cd /d "%~dp0"
|
|
15
|
+
|
|
16
|
+
set "PYEXE="
|
|
17
|
+
if exist "%~dp0.venv\Scripts\python.exe" set "PYEXE=%~dp0.venv\Scripts\python.exe"
|
|
18
|
+
if not defined PYEXE for /f "delims=" %%I in ('py -3 -c "import sys;print(sys.executable)" 2^>nul') do set "PYEXE=%%I"
|
|
19
|
+
if not defined PYEXE for %%I in (python.exe) do set "PYEXE=%%~$PATH:I"
|
|
20
|
+
if not defined PYEXE goto :nopython
|
|
21
|
+
|
|
22
|
+
"%PYEXE%" "%~dp0tools\install_extras.py" %*
|
|
23
|
+
set "CODE=%ERRORLEVEL%"
|
|
24
|
+
rem Leave this folder before pausing, so this window never stops it being deleted.
|
|
25
|
+
cd /d "%USERPROFILE%"
|
|
26
|
+
echo.
|
|
27
|
+
if "%CODE%"=="0" echo You can close this window. Double-click Start AssetGatekeeper.bat to begin.
|
|
28
|
+
if not "%CODE%"=="0" echo Something was not installed - the lines above say what and why.
|
|
29
|
+
echo.
|
|
30
|
+
pause
|
|
31
|
+
exit /b %CODE%
|
|
32
|
+
|
|
33
|
+
:nopython
|
|
34
|
+
echo.
|
|
35
|
+
echo Python was not found.
|
|
36
|
+
echo Install Python 3.12 from python.org (tick "Add python.exe to PATH"),
|
|
37
|
+
echo then run this file again.
|
|
38
|
+
echo.
|
|
39
|
+
pause
|
|
40
|
+
exit /b 1
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AssetGatekeeper contributors
|
|
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.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include CONTRIBUTING.md
|
|
3
|
+
include SECURITY.md
|
|
4
|
+
include MANUAL.md
|
|
5
|
+
include QUICKSTART.md
|
|
6
|
+
include RELEASE_NOTES.md
|
|
7
|
+
include LICENSE
|
|
8
|
+
include THIRD_PARTY_NOTICES.md
|
|
9
|
+
include pyproject.toml
|
|
10
|
+
include asset_gatekeeper.example.toml
|
|
11
|
+
include templates/rules.toml
|
|
12
|
+
include *.bat
|
|
13
|
+
recursive-include server/static *
|
|
14
|
+
recursive-include tests *.py
|
|
15
|
+
recursive-include engine *.py
|
|
16
|
+
recursive-include tools *.py
|
|
17
|
+
recursive-include enterprise *.py
|
|
18
|
+
recursive-include agk_vendor *.py LICENSE py.typed
|
|
19
|
+
recursive-include plugins *.py *.md
|
|
20
|
+
recursive-include docs *.md
|
|
21
|
+
prune .agk
|
|
22
|
+
prune build
|
|
23
|
+
prune dist
|
|
24
|
+
prune scratch
|
|
25
|
+
prune dropbox
|
|
26
|
+
global-exclude *.py[cod] __pycache__ *.db *.db-wal *.db-shm
|