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.
Files changed (136) hide show
  1. asset_gatekeeper-0.1.0a1/Allow_Folder.bat +33 -0
  2. asset_gatekeeper-0.1.0a1/CONTRIBUTING.md +66 -0
  3. asset_gatekeeper-0.1.0a1/Install_Extras.bat +40 -0
  4. asset_gatekeeper-0.1.0a1/LICENSE +21 -0
  5. asset_gatekeeper-0.1.0a1/MANIFEST.in +26 -0
  6. asset_gatekeeper-0.1.0a1/MANUAL.md +1203 -0
  7. asset_gatekeeper-0.1.0a1/PKG-INFO +168 -0
  8. asset_gatekeeper-0.1.0a1/QUICKSTART.md +493 -0
  9. asset_gatekeeper-0.1.0a1/README.md +115 -0
  10. asset_gatekeeper-0.1.0a1/RELEASE_NOTES.md +817 -0
  11. asset_gatekeeper-0.1.0a1/Rules.bat +5 -0
  12. asset_gatekeeper-0.1.0a1/SECURITY.md +26 -0
  13. asset_gatekeeper-0.1.0a1/Start AssetGatekeeper.bat +66 -0
  14. asset_gatekeeper-0.1.0a1/Stop.bat +37 -0
  15. asset_gatekeeper-0.1.0a1/THIRD_PARTY_NOTICES.md +17 -0
  16. asset_gatekeeper-0.1.0a1/agk_suite/__init__.py +10 -0
  17. asset_gatekeeper-0.1.0a1/agk_vendor/__init__.py +9 -0
  18. asset_gatekeeper-0.1.0a1/agk_vendor/tomli/LICENSE +21 -0
  19. asset_gatekeeper-0.1.0a1/agk_vendor/tomli/__init__.py +11 -0
  20. asset_gatekeeper-0.1.0a1/agk_vendor/tomli/_parser.py +691 -0
  21. asset_gatekeeper-0.1.0a1/agk_vendor/tomli/_re.py +107 -0
  22. asset_gatekeeper-0.1.0a1/agk_vendor/tomli/_types.py +10 -0
  23. asset_gatekeeper-0.1.0a1/agk_vendor/tomli/py.typed +1 -0
  24. asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/PKG-INFO +168 -0
  25. asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/SOURCES.txt +134 -0
  26. asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/dependency_links.txt +1 -0
  27. asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/entry_points.txt +7 -0
  28. asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/requires.txt +37 -0
  29. asset_gatekeeper-0.1.0a1/asset_gatekeeper.egg-info/top_level.txt +5 -0
  30. asset_gatekeeper-0.1.0a1/asset_gatekeeper.example.toml +153 -0
  31. asset_gatekeeper-0.1.0a1/asset_gatekeeper.py +6591 -0
  32. asset_gatekeeper-0.1.0a1/docs/01-WHAT-IT-IS.md +143 -0
  33. asset_gatekeeper-0.1.0a1/docs/02-INSTALLATION.md +209 -0
  34. asset_gatekeeper-0.1.0a1/docs/03-SOLO-DEVELOPER.md +170 -0
  35. asset_gatekeeper-0.1.0a1/docs/04-STUDIO-ROLLOUT.md +231 -0
  36. asset_gatekeeper-0.1.0a1/docs/05-RULES-REFERENCE.md +371 -0
  37. asset_gatekeeper-0.1.0a1/docs/06-CLI-REFERENCE.md +243 -0
  38. asset_gatekeeper-0.1.0a1/docs/07-ART-WORKSTATION.md +549 -0
  39. asset_gatekeeper-0.1.0a1/docs/08-ASSETHEALTH.md +224 -0
  40. asset_gatekeeper-0.1.0a1/docs/09-DCC-PLUGINS.md +421 -0
  41. asset_gatekeeper-0.1.0a1/docs/10-CI-AND-VERSION-CONTROL.md +288 -0
  42. asset_gatekeeper-0.1.0a1/docs/11-TROUBLESHOOTING.md +84 -0
  43. asset_gatekeeper-0.1.0a1/docs/12-UPGRADING-TO-1.1.md +130 -0
  44. asset_gatekeeper-0.1.0a1/docs/ENTERPRISE.md +473 -0
  45. asset_gatekeeper-0.1.0a1/docs/README.md +68 -0
  46. asset_gatekeeper-0.1.0a1/docs/REFERENCE.md +1346 -0
  47. asset_gatekeeper-0.1.0a1/docs/design/asset-diff-engine-spec.md +248 -0
  48. asset_gatekeeper-0.1.0a1/engine/__init__.py +1 -0
  49. asset_gatekeeper-0.1.0a1/engine/fbx_preview.py +640 -0
  50. asset_gatekeeper-0.1.0a1/engine/light_preview.py +112 -0
  51. asset_gatekeeper-0.1.0a1/engine/lod_manager.py +759 -0
  52. asset_gatekeeper-0.1.0a1/engine/lod_shippable.py +478 -0
  53. asset_gatekeeper-0.1.0a1/engine/polypaint.py +1408 -0
  54. asset_gatekeeper-0.1.0a1/enterprise/__init__.py +21 -0
  55. asset_gatekeeper-0.1.0a1/enterprise/analytics.py +394 -0
  56. asset_gatekeeper-0.1.0a1/enterprise/audit.py +540 -0
  57. asset_gatekeeper-0.1.0a1/enterprise/auth.py +573 -0
  58. asset_gatekeeper-0.1.0a1/enterprise/cli.py +386 -0
  59. asset_gatekeeper-0.1.0a1/enterprise/config.py +515 -0
  60. asset_gatekeeper-0.1.0a1/enterprise/migrations.py +588 -0
  61. asset_gatekeeper-0.1.0a1/enterprise/rbac.py +274 -0
  62. asset_gatekeeper-0.1.0a1/enterprise/remote.py +445 -0
  63. asset_gatekeeper-0.1.0a1/enterprise/resilience.py +311 -0
  64. asset_gatekeeper-0.1.0a1/enterprise/store.py +889 -0
  65. asset_gatekeeper-0.1.0a1/enterprise/vcs.py +377 -0
  66. asset_gatekeeper-0.1.0a1/healer.py +1149 -0
  67. asset_gatekeeper-0.1.0a1/notifier.py +236 -0
  68. asset_gatekeeper-0.1.0a1/plugins/README.md +148 -0
  69. asset_gatekeeper-0.1.0a1/plugins/__init__.py +9 -0
  70. asset_gatekeeper-0.1.0a1/plugins/blender/addon.py +361 -0
  71. asset_gatekeeper-0.1.0a1/plugins/blender/preflight_blender.py +123 -0
  72. asset_gatekeeper-0.1.0a1/plugins/blender/preflight_panel.py +236 -0
  73. asset_gatekeeper-0.1.0a1/plugins/houdini/preflight_houdini.py +96 -0
  74. asset_gatekeeper-0.1.0a1/plugins/houdini/sop_gatekeeper.py +317 -0
  75. asset_gatekeeper-0.1.0a1/plugins/max/install_max_button.py +21 -0
  76. asset_gatekeeper-0.1.0a1/plugins/max/max_preflight.py +161 -0
  77. asset_gatekeeper-0.1.0a1/plugins/maya/gatekeeper_maya.py +303 -0
  78. asset_gatekeeper-0.1.0a1/plugins/maya/maya_preflight.py +124 -0
  79. asset_gatekeeper-0.1.0a1/plugins/maya/userSetup.py +119 -0
  80. asset_gatekeeper-0.1.0a1/plugins/preflight_core.py +315 -0
  81. asset_gatekeeper-0.1.0a1/plugins/unreal/agk_validator.py +291 -0
  82. asset_gatekeeper-0.1.0a1/plugins/unreal/import_gatekeeper.py +185 -0
  83. asset_gatekeeper-0.1.0a1/plugins/unreal/init_unreal.py +447 -0
  84. asset_gatekeeper-0.1.0a1/plugins/unreal/preflight_unreal.py +112 -0
  85. asset_gatekeeper-0.1.0a1/plugins/unreal/unreal_preflight.py +92 -0
  86. asset_gatekeeper-0.1.0a1/pyproject.toml +120 -0
  87. asset_gatekeeper-0.1.0a1/server/__init__.py +10 -0
  88. asset_gatekeeper-0.1.0a1/server/art_workstation_server.py +3833 -0
  89. asset_gatekeeper-0.1.0a1/server/asset_health_server.py +5164 -0
  90. asset_gatekeeper-0.1.0a1/server/netguard.py +110 -0
  91. asset_gatekeeper-0.1.0a1/server/static/admin.css +97 -0
  92. asset_gatekeeper-0.1.0a1/server/static/admin.html +200 -0
  93. asset_gatekeeper-0.1.0a1/server/static/admin.js +557 -0
  94. asset_gatekeeper-0.1.0a1/server/static/app.css +345 -0
  95. asset_gatekeeper-0.1.0a1/server/static/dashboard.js +87 -0
  96. asset_gatekeeper-0.1.0a1/server/static/vendor/LICENSE +21 -0
  97. asset_gatekeeper-0.1.0a1/server/static/vendor/controls/OrbitControls.js +1417 -0
  98. asset_gatekeeper-0.1.0a1/server/static/vendor/geometries/ConvexGeometry.js +53 -0
  99. asset_gatekeeper-0.1.0a1/server/static/vendor/loaders/GLTFLoader.js +4663 -0
  100. asset_gatekeeper-0.1.0a1/server/static/vendor/loaders/MTLLoader.js +567 -0
  101. asset_gatekeeper-0.1.0a1/server/static/vendor/loaders/OBJLoader.js +905 -0
  102. asset_gatekeeper-0.1.0a1/server/static/vendor/math/ConvexHull.js +1271 -0
  103. asset_gatekeeper-0.1.0a1/server/static/vendor/three.module.js +53044 -0
  104. asset_gatekeeper-0.1.0a1/server/static/vendor/utils/BufferGeometryUtils.js +1375 -0
  105. asset_gatekeeper-0.1.0a1/server/static/viewer.html +311 -0
  106. asset_gatekeeper-0.1.0a1/server/static/viewer.js +2595 -0
  107. asset_gatekeeper-0.1.0a1/setup.cfg +4 -0
  108. asset_gatekeeper-0.1.0a1/setup.py +11 -0
  109. asset_gatekeeper-0.1.0a1/templates/rules.toml +119 -0
  110. asset_gatekeeper-0.1.0a1/tests/_pgsim.py +172 -0
  111. asset_gatekeeper-0.1.0a1/tests/fixtures/fbx/make_fixtures.py +84 -0
  112. asset_gatekeeper-0.1.0a1/tests/fresh_install.py +189 -0
  113. asset_gatekeeper-0.1.0a1/tests/gen_test_assets.py +234 -0
  114. asset_gatekeeper-0.1.0a1/tests/run_headless_integration.py +596 -0
  115. asset_gatekeeper-0.1.0a1/tests/test_admin.py +855 -0
  116. asset_gatekeeper-0.1.0a1/tests/test_analytics.py +478 -0
  117. asset_gatekeeper-0.1.0a1/tests/test_dcc_integration.py +541 -0
  118. asset_gatekeeper-0.1.0a1/tests/test_enterprise.py +1069 -0
  119. asset_gatekeeper-0.1.0a1/tests/test_formats.py +951 -0
  120. asset_gatekeeper-0.1.0a1/tests/test_gatekeeper.py +3564 -0
  121. asset_gatekeeper-0.1.0a1/tests/test_realworld.py +914 -0
  122. asset_gatekeeper-0.1.0a1/tests/test_server.py +1120 -0
  123. asset_gatekeeper-0.1.0a1/tests/test_viewer_browser.py +1027 -0
  124. asset_gatekeeper-0.1.0a1/tests/test_workstation.py +2187 -0
  125. asset_gatekeeper-0.1.0a1/tests/unreal/validate_in_editor.py +111 -0
  126. asset_gatekeeper-0.1.0a1/tools/__init__.py +5 -0
  127. asset_gatekeeper-0.1.0a1/tools/agk_serve.py +757 -0
  128. asset_gatekeeper-0.1.0a1/tools/browser_smoke.py +360 -0
  129. asset_gatekeeper-0.1.0a1/tools/build_release.py +361 -0
  130. asset_gatekeeper-0.1.0a1/tools/cdp.py +178 -0
  131. asset_gatekeeper-0.1.0a1/tools/certify.py +220 -0
  132. asset_gatekeeper-0.1.0a1/tools/corpus_check.py +211 -0
  133. asset_gatekeeper-0.1.0a1/tools/houdini_export_hook.py +216 -0
  134. asset_gatekeeper-0.1.0a1/tools/install_extras.py +223 -0
  135. asset_gatekeeper-0.1.0a1/tools/open_url_after.py +41 -0
  136. 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