NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
TensorArt Downloader adds a download button to generations on Tensor.Art when the interface flags the content as restricted/blocked and disables the native download.
Based on the original userscript by Angry Toenail (v0.2), with robustness improvements: CORS bypass, multiple URL sources, actual file download, and automatic diagnostics when the site changes and the script breaks.
__TADL.help()https://tensor.art/GM_xmlhttpRequest and access to api.tensor.art (accept when prompted by the manager)Important: disable other old copies of the same script. Two active versions on the same site may conflict.
In the browser console (F12 → Console), upon loading the page you should see something like:
[TA-DL] v0.3.7 ready | token=yes | GM_xhr=yes | ...
token=yes — session cookie found (logged in)GM_xhr=yes — userscript network permission OKIntercepts API responses containing /query (tasks list).
Locates items with the blocking class (.group.cursor-not-allowed) in the DOM.
Associates each card with the API item (e.g., imageId).
Gathers URL candidates using this general logic:
URLs already seen in API responses (in-memory index)
Fields from the task item JSON
<img> / <video> tags in the card
Page network resources containing the ID
Endpoint POST /works/v1/generation/image/download (fallback)
Downloads the best candidate via GM_xmlhttpRequest (avoids CORS blocking from the page's fetch).
When Tensor.Art changes its layout or API and the script fails in a "structural" way, it can automatically generate a report:
[TA-DL] UPDATE DIAGNOSTICta-dl-diag-<timestamp>.jsonlocalStorage (latest reports)On successful downloads, the script remains nearly silent. Identical reports are limited (debounce ~90s) to avoid spamming.
The report JSON includes error codes, what probably changed, what to edit in the script, DOM selector probes, a sample of the item JSON, and API attempts.
| Code | Meaning / where to look |
|---|---|
PAYLOAD_NO_TASKS |
/query response without data.tasks[] |
DOM_TASK_NOT_FOUND |
Task card not found (CSS/layout changed) |
ITEM_MISSING_ID |
Item without imageId (or equivalent fields) |
ITEM_NO_URLS |
Item JSON without media URL |
DOWNLOAD_API_FAIL |
Download / auth / body endpoint failed |
NO_CANDIDATES |
No usable URL found |
ALL_CANDIDATES_FAILED |
URLs existed, but all failed or were placeholders |
TOKEN_MISSING |
Not logged in / session cookie missing |
GM_XHR_MISSING |
@grant GM_xmlhttpRequest not applied |
With the Tensor.Art page open:
__TADL.help() // quick guide
__TADL.diag.last() // last crash report
__TADL.diag.history() // saved history
__TADL.diag.export() // download the last .json again
__TADL.diag.clear() // clear history
__TADL.dump() // internal indexes + last diag
__TADL.contract // selectors/paths expected by the script
__TADL.version // script version
Button does not appear
Confirm that you are logged in and that the task list has reloaded
Check if the console shows token=yes and GM_xhr=yes
Disable other copies of the script
The site layout may have changed → wait for a report or use __TADL.dump()
Fail when clicking
If you downloaded ta-dl-diag-*.json, open it and read codes and whatToFix
Sometimes the API returns only a "forbidden" image/moderation placeholder; the script tries other sources in the JSON/DOM
token=NO — log in again and reload the page
GM_xhr=NO — reinstall the script and accept the manager's permissions
tensor.art (as per @match).localStorage).__TADL.help()If the script stops working after a Tensor.Art update:
ta-dl-diag-*.json file (if generated) in the feedback/issue__TADL.diag.last() and __TADL.help()This points out exactly which part changed (DOM, payload, or API) and speeds up the fix.
Rating: 0