Efreak commited on
Commit
2d1ec2f
1 Parent(s): 06c4eb2

update script

Browse files
Files changed (1) hide show
  1. civitai.info.js +49 -13
civitai.info.js CHANGED
@@ -1,10 +1,21 @@
1
- /* This script exists to merge all .info files into one array.
 
2
  * unfortunately, civitai is storing some of them as LFS objects
3
  * so the script outputs a list of errors along with scripts to fix them (delfiles.sh, replacefiles.sh)
4
  * others files are blank, so just ignore the errors the second time, they're files that aren't on civitai
5
  * now we get tot he important part: it parses all files, and dumps all of them into an array in civitai.info.json for further processing
6
  * Run once, run delfiles.bat or delfiles.sh to get rid of the bad ones, then run replacefiles.sh to fetch them from civitai.
 
 
 
 
7
  */
 
 
 
 
 
 
8
  var path = require('path'),
9
  fs = require('fs');
10
 
@@ -30,26 +41,51 @@ function fromDir(startPath, filter, arr) {
30
  return arr;
31
  };
32
 
33
- var addons=[];
34
- var errors=[];
35
  var push=function(file){
36
  try{
37
  var addon=JSON.parse(fs.readFileSync(file));
38
- addon.mirror_path=file; // Add the location we found the file.
39
- addons.push(addon)
40
  } catch(err) {
41
- console.log(file);
42
- console.error(err)
43
  errors.push(file);
 
 
 
 
 
 
44
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  };
46
 
47
  var files=fromDir('.', '.civitai.info');
48
- files.map(e=>{push(e);});
49
-
 
50
  fs.writeFileSync('civitai.info.json',JSON.stringify(addons))
51
- fs.writeFileSync('errors.json',JSON.stringify(errors))
52
  //console.error("Error with the following files:",errors);
53
- fs.writeFileSync('delfiles.bat','@echo off\n\n'+errors.map(e=>{return "del \""+ e + "\""}).join('\n'))
54
- fs.writeFileSync('delfiles.sh',errors.map(e=>{return "rm \""+ e + "\""}).join('\n').split('\\').join('/'))
55
- 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('\/'))
 
1
+ /*
2
+ * This script exists to merge all .info files into one array.
3
  * unfortunately, civitai is storing some of them as LFS objects
4
  * so the script outputs a list of errors along with scripts to fix them (delfiles.sh, replacefiles.sh)
5
  * others files are blank, so just ignore the errors the second time, they're files that aren't on civitai
6
  * now we get tot he important part: it parses all files, and dumps all of them into an array in civitai.info.json for further processing
7
  * Run once, run delfiles.bat or delfiles.sh to get rid of the bad ones, then run replacefiles.sh to fetch them from civitai.
8
+ *
9
+ * the reason I chose to output scripts (and use two of them) rather than doing it internally is two-fold:
10
+ * 1. I can inspect delfiles.sh being deleted before running it
11
+ * 2. I can rewrite the replacefiles.sh with a script to use a download manager (aria2c) when it's large. (this script is intended to be used in colab)
12
  */
13
+
14
+ // change this to true if you want the full contents of every .info file, otherwise we're deleting a bunch of stuff I don't care about
15
+ // keep in mind this changes the format of the file (I've replaced the image object with an array of urls that have no metadata)
16
+ // so any scripts I write won't work with it anymore. This reduced the size of the file by nearly 80%...The original data is still in the original files.
17
+ var fullFiles = false;
18
+
19
  var path = require('path'),
20
  fs = require('fs');
21
 
 
41
  return arr;
42
  };
43
 
44
+ var addons=[]; var errors=[]; errors2=[];
 
45
  var push=function(file){
46
  try{
47
  var addon=JSON.parse(fs.readFileSync(file));
 
 
48
  } catch(err) {
49
+ console.error(file + " is probably an LFS pointer. Will be added to delfiles and replacefiles scripts!");
 
50
  errors.push(file);
51
+ return;
52
+ }
53
+ if(Object.keys(addon).length==0) {
54
+ console.error(file + " is an empty file! Will be added to delfiles script! Assuming it's not a mistake, it will *not* be replaced!");
55
+ errors2.push(file);
56
+ return;
57
  }
58
+ addon.mirror_path=file; // Add the location we found the file.
59
+
60
+ // We're going to clean information idc about. Change `false` to `true` at the top if you want all data.
61
+ if(fullFiles == true) {
62
+ addons.push(addon);
63
+ return;
64
+ }
65
+ delete addon.model.poi;
66
+ 'createdAt,updatedAt,earlyAccessTimeFrame,downloadUrl,description'.split(',').forEach(key=>{delete addon[key]});
67
+ for(file=addon.files.length-1;file>=0;file--) {
68
+ if(addon.files[file].type == 'Training Data' || addon.files[file].type == 'Config') {
69
+ addon.files.splice(file,1);
70
+ } else {
71
+ 'sizeKB,format,pickleScanResult,pickleScanMessage,virusScanResult,scannedAt,hashes,primary,downloadUrl'.split(',').forEach(key=>{
72
+ delete addon.files[file][key];
73
+ });
74
+ }
75
+ };
76
+ var imgs=addon.images;
77
+ addon.images=[];
78
+ imgs.forEach(img=>{addon.images.push(img.url.replace('https://imagecache.civitai.com/',''))});
79
+ addons.push(addon);
80
  };
81
 
82
  var files=fromDir('.', '.civitai.info');
83
+ files.forEach(file=>{push(file)});
84
+ //push(files[0]);
85
+ var errs=[...errors,...errors2].sort();
86
  fs.writeFileSync('civitai.info.json',JSON.stringify(addons))
87
+ fs.writeFileSync('errors.json',JSON.stringify(errs))
88
  //console.error("Error with the following files:",errors);
89
+ fs.writeFileSync('delfiles.bat','@echo off\n\n'+errs.map(e=>{return "del \""+ e + "\""}).join('\n'))
90
+ fs.writeFileSync('delfiles.sh',errs.map(e=>{return "rm \""+ e + "\""}).join('\n').split('\\').join('/'))
91
+ 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('\/'))