|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var fullFiles = false; |
|
|
|
var path = require('path'), |
|
fs = require('fs'); |
|
|
|
function fromDir(startPath, filter, arr) { |
|
arr=arr||[]; |
|
|
|
if (!fs.existsSync(startPath)) { |
|
console.log("no dir ", startPath); |
|
return; |
|
} |
|
|
|
var files = fs.readdirSync(startPath); |
|
for (var i = 0; i < files.length; i++) { |
|
var filename = path.join(startPath, files[i]); |
|
var stat = fs.lstatSync(filename); |
|
if (stat.isDirectory()) { |
|
fromDir(filename, filter,arr); |
|
} else if (filename.endsWith(filter)) { |
|
arr.push(filename); |
|
|
|
}; |
|
}; |
|
return arr; |
|
}; |
|
|
|
var addons=[]; var errors=[]; errors2=[]; |
|
var push=function(file){ |
|
try{ |
|
var addon=JSON.parse(fs.readFileSync(file)); |
|
} catch(err) { |
|
console.error(file + " is probably an LFS pointer. Will be added to delfiles and replacefiles scripts!"); |
|
errors.push(file); |
|
return; |
|
} |
|
if(Object.keys(addon).length==0) { |
|
console.error(file + " is an empty file! Will be added to delfiles script! Assuming it's not a mistake, it will *not* be replaced!"); |
|
errors2.push(file); |
|
return; |
|
} |
|
addon.mirror_path=file; |
|
|
|
|
|
if(fullFiles == true) { |
|
addons.push(addon); |
|
return; |
|
} |
|
delete addon.model.poi; |
|
'createdAt,updatedAt,earlyAccessTimeFrame,downloadUrl,description'.split(',').forEach(key=>{delete addon[key]}); |
|
for(file=addon.files.length-1;file>=0;file--) { |
|
if(addon.files[file].type == 'Training Data' || addon.files[file].type == 'Config') { |
|
addon.files.splice(file,1); |
|
} else { |
|
'sizeKB,format,pickleScanResult,pickleScanMessage,virusScanResult,scannedAt,hashes,primary,downloadUrl'.split(',').forEach(key=>{ |
|
delete addon.files[file][key]; |
|
}); |
|
} |
|
}; |
|
var imgs=addon.images; |
|
addon.images=[]; |
|
imgs.forEach(img=>{addon.images.push(img.url.replace('https://imagecache.civitai.com/',''))}); |
|
addons.push(addon); |
|
}; |
|
|
|
var files1=fromDir('models', '.civitai.info'); |
|
var files2=fromDir('embeddings', '.civitai.info'); |
|
var files=[...files1,...files2]; |
|
files.forEach(file=>{push(file)}); |
|
|
|
var errs=[...errors,...errors2].sort(); |
|
fs.writeFileSync('civitai.info.json',JSON.stringify(addons)) |
|
fs.writeFileSync('errors.json',JSON.stringify(errs)) |
|
|
|
fs.writeFileSync('delfiles.bat','@echo off\n\n'+errs.map(e=>{return "del \""+ e + "\""}).join('\n')) |
|
fs.writeFileSync('delfiles.sh',errs.map(e=>{return "rm \""+ e + "\""}).join('\n').split('\\').join('/')) |
|
fs.writeFileSync('replacefiles.sh',errors.map(e=>{return "wget \"https://huggingface.co/anonderpling/civitai_mirror/resolve/main/"+(e.split(" ").join("%23")+"\" -O \""+e+"\"")}).join('\n').split('\\').join('\/')) |
|
|