0% found this document useful (0 votes)
166 views9 pages

Sketchfab Model Downloader Script

code1

Uploaded by

taoditcondimemay
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
166 views9 pages

Sketchfab Model Downloader Script

code1

Uploaded by

taoditcondimemay
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

// ==UserScript==

// @name caiconcac
// @version 0.9.2
// @description Download Sketchfab models
// @author hoosnick
// @include /^https?://(www\.)?sketchfab\.com/.*
// @require [Link]
// @require [Link]
[Link]
// @require
[Link]
// @run-at document-start
// @grant unsafeWindow
// @grant GM_download
// @namespace [Link]
// @downloadURL [Link]
%[Link]
// @updateURL [Link]
%[Link]
// ==/UserScript==

var zip = new JSZip();


let folder = [Link]('collection');

var button_dw = true;

var func_drawGeometry = /(this\._stateCache\.drawGeometry\


(this\._graphicContext,t\))/g;
var fund_drawArrays = /t\.drawArrays\(t\.TRIANGLES,0,6\)/g;
var func_renderInto1 = /A\.renderInto\(n,E,R/g;
var func_renderInto2 = /g\.renderInto=function\(e,i,r/g;
var func_getResourceImage = /getResourceImage:function\(e,t\){/g;
var func_test = /apply:function\(e\){var t=e instanceof r\.Geometry;/g

var addbtnfunc;

(function () {
'use strict';
var window = unsafeWindow;
[Link]("[UserScript] init", window);

[Link] = [];
var saveimagecache2 = {};
var objects = {};

var save_image_to_list = function (url, file_name) {


if (!saveimagecache2[url]) {
var mdl = {
name: file_name
}

saveimagecache2[url] = mdl;
}
}

addbtnfunc = function () {
var p = [Link]("//div[@class='titlebar']", document, null, 9,
null).singleNodeValue;
if (p && !button_dw) {
[Link]("[UserScript] add btn download");
var btn = [Link]("a");
[Link]("class", "control");
[Link] = "<pre style='color: red; background-color: #e74c3c;
border: none; color: white; padding: 10px 20px; text-align: center; text-
decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor:
pointer; border-radius: 8px;'>DOWNLOAD</pre>";
[Link]("click", dodownload, false);
[Link](btn);
button_dw = true;
} else {
[Link]("[UserScript] try add btn later");
setTimeout(addbtnfunc, 3000);
}
}

var dodownload = function () {


[Link]("[UserScript] download");
var idx = 0;

[Link](function (obj) {
var mdl = {
name: "model_" + idx,
obj: parseobj(obj)
}
[Link](mdl);
dosavefile(mdl);
idx++;

})
PackAll();
}

var PackAll = function () {


for (var obj in objects) {
[Link]("[UserScript] save file", obj);
[Link](obj, objects[obj], {
binary: true
});
}

var file_name = [Link]('model-name__label')


[0].textContent;
[Link]({
type: "blob"
}).then(content => saveAs(content, file_name + ".zip"));
}

var parseobj = function (obj) {


[Link]("[UserScript]: obj", obj);
var list = [];
obj._primitives.forEach(function (p) {
if (p && [Link]) {
[Link]({
'mode': [Link],
'indices': [Link]._elements
});
}
})

var attr = obj._attributes;


return {
vertex: [Link]._elements,
normal: [Link] ? [Link]._elements : [],
uv: attr.TexCoord0 ? attr.TexCoord0._elements :
attr.TexCoord1 ? attr.TexCoord1._elements :
attr.TexCoord2 ? attr.TexCoord2._elements :
attr.TexCoord2 ? attr.TexCoord2._elements :
attr.TexCoord3 ? attr.TexCoord3._elements :
attr.TexCoord4 ? attr.TexCoord4._elements :
attr.TexCoord5 ? attr.TexCoord5._elements :
attr.TexCoord6 ? attr.TexCoord6._elements :
attr.TexCoord7 ?
attr.TexCoord7._elements :
attr.TexCoord8 ?
attr.TexCoord8._elements : [],
primitives: list,
};
}

var dosavefile = function (mdl) {


var obj = [Link];

var str = '';


str += 'mtllib ' + [Link] + '.mtl\n';
str += 'o ' + [Link] + '\n';
for (var i = 0; i < [Link]; i += 3) {
str += 'v ';
for (var j = 0; j < 3; ++j) {
str += [Link][i + j] + ' ';
}
str += '\n';
}
for (i = 0; i < [Link]; i += 3) {
str += 'vn ';
for (j = 0; j < 3; ++j) {
str += [Link][i + j] + ' ';
}
str += '\n';
}

for (i = 0; i < [Link]; i += 2) {


str += 'vt ';
for (j = 0; j < 2; ++j) {
str += [Link][i + j] + ' ';
}
str += '\n';
}
str += 's on \n';

var vn = [Link] != 0;
var vt = [Link] != 0;

for (i = 0; i < [Link]; ++i) {


var primitive = [Link][i];
if ([Link] == 4 || [Link] == 5) {
var strip = ([Link] == 5);
for (j = 0; j + 2 < [Link]; !strip ? j += 3 : j+
+) {
str += 'f ';
var order = [0, 1, 2];
if (strip && (j % 2 == 1)) {
order = [0, 2, 1];
}
for (var k = 0; k < 3; ++k) {
var faceNum = [Link][j + order[k]] + 1;
str += faceNum;
if (vn || vt) {
str += '/';
if (vt) {
str += faceNum;
}
if (vn) {
str += '/' + faceNum;
}
}
str += ' ';
}
str += '\n';
}
} else {
[Link]("[UserScript] dosavefile: unknown primitive mode",
primitive);
}
}

str += '\n';

var objblob = new Blob([str], {


type: 'text/plain'
});

objects[[Link] + ".obj"] = objblob;


}

[Link] = function (obj) {


if (obj._faked != true && (([Link] && [Link]._name) ||
obj._name || (obj._parents && obj._parents[0]._name))) {
obj._faked = true;
if (obj._name == "composer layer" || obj._name == "Ground - Geometry")
return;
[Link](obj)
[Link](obj);
}
}

window.hook_test = function (e, idx) {


[Link]("hooked index: " + idx);
[Link](e);
}

[Link] = function (e, imagemodel) {


if (([Link] == 128 && [Link] == 128) || ([Link] == 32 && [Link] ==
32) || ([Link] == 64 && [Link] == 64)) {
return e;
}
if (imagemodel) {
var alpha = [Link];
var filename_image = [Link];
var uid = [Link];
var url_image = [Link];
var max_size = 0;
var obr = e;

[Link](function (img) {
var alpha_is_check = alpha == "A" ? [Link] == alpha :
true;

var d = [Link];
while (d % 2 == 0) {
d = d / 2;
}

if ([Link] > max_size && alpha_is_check && d == 1) {


max_size = [Link];
url_image = [Link];
uid = [Link];
obr = img;
}
});

if (!saveimagecache2[url_image]) {
[Link](e);
save_image_to_list(url_image, filename_image);
} else {
[Link](e);
}

return obr;
}
return e;
}

[Link] = function (gl, t) {


[Link]([Link](t));
var url = t[5].currentSrc;
var width = t[5].width;
var height = t[5].height;

if (!saveimagecache2[url]) {
return;
} else {
[Link]("saved texture:" + url);
}

var data = new Uint8Array(width * height * 4);


[Link](0, 0, width, height, [Link], gl.UNSIGNED_BYTE, data);

var halfHeight = height / 2 | 0; // the | 0 keeps the result an int


var bytesPerRow = width * 4;

// make a temp buffer to hold one row


var temp = new Uint8Array(width * 4);
for (var y = 0; y < halfHeight; ++y) {
var topOffset = y * bytesPerRow;
var bottomOffset = (height - y - 1) * bytesPerRow;

// make copy of a row on the top half


[Link]([Link](topOffset, topOffset + bytesPerRow));

// copy a row from the bottom half to the top


[Link](topOffset, bottomOffset, bottomOffset + bytesPerRow);

// copy the copy of the top half row to the bottom half
[Link](temp, bottomOffset);
}

// Create a 2D canvas to store the result


var canvas = [Link]('canvas');
[Link] = width;
[Link] = height;
var context = [Link]('2d');

// Copy the pixels to a 2D canvas


var imageData = [Link](width, height);
[Link](data);
[Link](imageData, 0, 0);

var re = /(?:\.([^.]+))?$/;
var ext = [Link](saveimagecache2[url].name)[1];
var name = saveimagecache2[url].name + ".png";

if (ext == "png" || ext == "jpg" || ext == "jpeg") {


var ret = saveimagecache2[url].[Link]('.' + ext, '');
name = ret + ".png";
}
[Link]("saved texture to blob " + name);
[Link](function (blob) {
objects[name] = blob;
}, "image/png");
}

})();

(() => {
"use strict";
const Event = class {
constructor(script, target) {
[Link] = script;
[Link] = target;

this._cancel = false;
this._replace = null;
this._stop = false;
}

preventDefault() {
this._cancel = true;
}
stopPropagation() {
this._stop = true;
}
replacePayload(payload) {
this._replace = payload;
}
};

let callbacks = [];


[Link] = (f) => {
if (typeof f !== "function") {
throw new Error("Event handler must be a function.");
}
[Link](f);
};
[Link] = (f) => {
let i = [Link];
while (i--) {
if (callbacks[i] === f) {
[Link](i, 1);
}
}
};

const dispatch = (script, target) => {


if ([Link] !== "SCRIPT") {
return;
}

const e = new Event(script, target);

if (typeof [Link] === "function") {


try {
[Link](e);
} catch (err) {
[Link](err);
}
}

for (const func of callbacks) {


if (e._stop) {
break;
}
try {
func(e);
} catch (err) {
[Link](err);
}
}

if (e._cancel) {
[Link] = "";
[Link]();
} else if (typeof e._replace === "string") {
[Link] = e._replace;
}
};
const observer = new MutationObserver((mutations) => {
for (const m of mutations) {
for (const n of [Link]) {
dispatch(n, [Link]);
}
}
});
[Link](document, {
childList: true,
subtree: true,
});
})();

(() => {
"use strict";

[Link] = (e) => {


var links_as_arr = [Link]([Link]);

links_as_arr.forEach(function (srimgc) {
if (srimgc instanceof HTMLScriptElement) {
if ([Link]("web/dist/") >= 0 ||
[Link]("standaloneViewer") >= 0) {
[Link]();
[Link]();

var req = new XMLHttpRequest();

[Link]('GET', [Link], false);


[Link]('');

var jstext = [Link];


var ret = func_renderInto1.exec(jstext);

if (ret) {
var index = [Link] + ret[0].length;
var head = [Link](0, index);
var tail = [Link](index);
jstext = head + ",i" + tail;

[Link]("[UserScript] Injection: patch_0 injected


successful " + [Link]);
}

ret = func_renderInto2.exec(jstext);

if (ret) {
var index = [Link] + ret[0].length;
var head = [Link](0, index);
var tail = [Link](index);

jstext = head + ",image_data" + tail;

[Link]("[UserScript] Injection: patch_1 injected


successful " + [Link]);

if (!func_renderInto1.exec(jstext))
[Link]("[UserScript] But patch_0 failed " +
[Link]);
}

ret = fund_drawArrays.exec(jstext);

if (ret) {
var index = [Link] + ret[0].length;
var head = [Link](0, index);
var tail = [Link](index);

jstext = head + ",[Link](t,image_data)" + tail;

[Link]("[UserScript] Injection: patch_2 injected


successful " + [Link]);
}

ret = func_getResourceImage.exec(jstext);

if (ret) {
var index = [Link] + ret[0].length;
var head = [Link](0, index);
var tail = [Link](index);

jstext = head + "e =


[Link](e,this._imageModel);" + tail;

[Link]("[UserScript] Injection: patch_3 injected


successful " + [Link]);
}

ret = func_drawGeometry.exec(jstext);

if (ret) {
var index1 = [Link] + ret[1].length;
var head1 = [Link](0, index1);
var tail1 = [Link](index1);
jstext = head1 + ";[Link](t);" + tail1;

[Link]("[UserScript] Injection: patch_4 injected


successful " + [Link]);

setTimeout(addbtnfunc, 3000);
}

var obj = [Link]('script');


[Link] = "text/javascript";
[Link] = jstext;

[Link]('head')[0].appendChild(obj);
}
}
});
};
})();

You might also like