Studio Refresher
The Studio License for Maya Groomer’s Tool assumes artists can access the internet from Maya and have read/write permission to the shared license.json in the xgtc folder you installed).
In stricter environments, that isn’t always the case. Artists may have limited internet access and studios may prefer centralized control of licensing. This guide outlines some alternatives to accommodate those policies and keep re-checks smooth.
This guide shows how to refresh a Studio Tiered license without launching Maya, using a XGT Refresher bundle. Py3.7, Py3.9, Py3.10, Py3.11 versions of the XGT_Refresher are available from your download page.
Using the XGT_Refresher, the refresher machine can run a different OS than the artists’ machines; it simply rewrites the central shared license.json
Let Artist Machine Validate On Re-Check Days:
If artist machines have internet access and the central
license.jsonis writable, no extra steps are needed. The first artist who opens the tool when a re-check is due will auto-validate and update the shared file. You can skip this page.Otherwise, if you’re keeping the central
license.jsonas read-only, and prefer to have Groomer's Tool on a centralized network folder, a dedicated box (a refresher machine) that can read/write, and has internet access will be required. No Maya launch is required for this refresher machine. Please follow along with documented below.
Setting up XGT Refresher
Know the Python version your refresher machine can run with. (This is a dedicated machine that has read/write to the xgtc/license.json file and internet access, not artists' machine)
Download the refresher bundle (with the same Python version and OS build that matches your refresher machine, Linux or Windows). The files are located under a folder called "XGT_Refresher" in your content/download page.
Unzip, you will see a
xgt_refresherfolderIf you put Groomer's Tool's
xgtcfolder:
vdisk/.../plugins/2023/xgtc/Create another folder and put the
xgt_refresherfolder in there.
vdisk/.../plugins/xgt_refresher/Inside vdisk/.../lugins/xgt_refresher/
--xgt_license_refresh.pyc
--xgt_license_core.pyc
--pyarmor_runtime_009008/Make sure your refresher machine has internet access and read/write access to
vdisk/.../plugins/2023/xgtc/license.json
Windows
First Activation - No Maya Required
You can use this code to activate the license.json file for the first time.
Make sure to change:
env path
path for the xgt_license_refresh.pyc
path for license.json
license key
email
# Point to actual refresher folder
$env:XGT_XGTC_SCRIPTS = "vdisk\...\plugins\xgt_refresher\"
py -3.10 vdisk\...\plugins\xgt_refresher\xgt_license_refresh.pyc `
--path "vdisk\...\plugins\2023\xgtc\license.json" `
--license "XGT-1234ABCD-1234ABCD" `
--email "email@company.com" `
--verboseRefresh with commands
# Point to actual refresher folder
$env:XGT_XGTC_SCRIPTS = "vdisk\...\plugins\xgt_refresher\"
# Point to actual refresher folder and the license.json in xgtc folder
py -3.10 vdisk\...\plugins\xgt_refresher\xgt_license_refresh.pyc `
--path "vdisk\...\plugins\2023\xgtc\license.json" `
--verboseExpected success output (real run):
[XGT] Loading license from: vdisk\...\plugins\2023\xgtc\license.json
[XGT] Calling Gumroad/Render verify…
[XGT] Snapshot state: ('ok', {}); last_check=YYYY-MM-DD; is_studio=True
[XGT] License refreshed and written.
# .json must be set to "writable" to the refresh machine.
# you can check the license.json time stamp to see if it updates.Linux
First Activation - No Maya Required
# Point to refresher folder
export XGT_XGTC_SCRIPTS=”vdisk/.../plugins/xgt_refresher/”
python3.10 vdisk/.../plugins/xgt_refresher/xgt_license_refresh.pyc \
--path "vdisk/.../plugins/2023/xgtc/license.json" \
--license "XGT-1234ABCD-1234ABCD" \
--email "email@company.com" \
--verbose Refresh with commands
# Point to refresher folder
export XGT_XGTC_SCRIPTS="vdisk/.../plugins/xgt_refresher/"
# Point to actual refresher folder and the license.json in xgtc folder
python3.10 vdisk/.../plugins/xgt_refresher/xgt_license_refresh.pyc \
--path "vdisk/.../plugins/2023/xgtc/license.json" \
--verboseExpected success output (real run):
[XGT] Loading license from: vdisk\GroomersTool_2023_win\xgtc\license.json
[XGT] Calling Gumroad/Render verify…
[XGT] Snapshot state: ('ok', {}); last_check=YYYY-MM-DD; is_studio=True
[XGT] License refreshed and written.
# .json must be set to "writable" to the refresh machine.
# you can check the license.json time stamp to see if it updates.Duplicating Jobs for Multiple Targets
Running Groomer's Tool on different projects (different OS/Maya)
Duplicate the task and change only the
--pathargument, e.g.:vdisk/.../plugins/2023/xgtc/license.jsonvdisk/.../plugins/2025/xgtc/license.jsonThen, create additional tasks pointing at other versions/builds.
You can use the same refresher to refresh different builds of Groomer's Tool license.
# Still using the same refresher path
export XGT_XGTC_SCRIPTS="vdisk/.../plugins/xgt_refresher/"
# As long as it match with refresher box Py version,
# multi-refresh can still use the same refresher script
# Refresh license.json (on a Maya 2023 project)
python3.10 vdisk/.../plugins/xgt_refresher/xgt_license_refresh.pyc \
--path "vdisk/.../plugins/2023/xgtc/license.json" \
--verbose
# Refresh license.json (on a Maya 2025 project)
python3.10 vdisk/.../plugins/xgt_refresher/xgt_license_refresh.pyc \
--path "vdisk/.../plugins/2025/xgtc/license.json" \
--verbose
Recommended Studio Refresher Schedule
To keep licenses up to date, while letting artists work offline, schedule the Studio refresher at these intervals:
Monthly plans: Twice per week
Quarterly / Bi-Annually / Yearly plans: Once per week
Troubleshooting
Symptom
Likely cause
Fix
ERROR: bad magic number in 'xgt_license_core'
Python version mismatch for .pyc
Refresher machine must have the same matching Python version as the XGT_Refresher bundle files
verify failed: ...
Network block, wrong product ID, or license key missing in JSON
Allow outbound HTTPS; pass --product-id; confirm JSON has license_key.
Permission denied writing JSON
Share not writable from scheduler box
Run on an IT/RW box; fix share conditions; avoid read-only mounts.
Written OK but artists don’t see change
Artists looking at a different xgtc file/path
Ensure everyone points to the intended target path.
Last updated