const fs = require('fs');
const https = require('https');
const TARGET_DIR = process.argv[2] ?? 'stable';
const BASE_SRC = `../${TARGET_DIR}/template.ipynb`;
async function fetchModel() {
return new Promise((resolve, reject)=>{
const url = 'https://raw.githubusercontent.com/ninjaneural/webui/master/misc/checkpoints_sd15.json';
https.get(url, (response) => {
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
resolve(data);
});
}).on('error', (error) => {
reject(error);
});
})
}
let checkpoints = [];
async function copy_files() {
let templateCode = fs.readFileSync(BASE_SRC, { encoding: 'utf8' });
let readme = [];
readme.push(`| Colab | Model | VAE | Memo |`);
readme.push(`| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---- | ----------------------- |`);
const list = checkpoints.filter(x=>!x.auth).sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 0);
list.forEach((item) => {
console.log(`${item.ipynb} 복사`);
let code = templateCode;
code = code.replaceAll('#template_checkpoint_default#', item.checkpoint);
code = code.replaceAll('#template_checkpoint_default_name#', item.checkpoint_file);
code = code.replaceAll('#template_notebook#', TARGET_DIR);
fs.writeFileSync(`../${TARGET_DIR}/${item.ipynb}.ipynb`, code);
readme.push(`| [](https://colab.research.google.com/github/ninjaneural/webui/blob/master/${TARGET_DIR}/${item.ipynb}.ipynb) | [${item.name}](${item.model}) | ${item.bakedVAE ? '' : '선택'} | ${item.type} |`)
});
readmeText = readme.join('\n');
fs.writeFileSync(`../${TARGET_DIR}/README.md`, readmeText);
return true;
}
async function make_readme() {
let readme = [];
readme.push(`| 구버전(stable) | 설치버전(install) | 일반(nightly) | Deforum전용 | Model | VAE | Memo |`);
readme.push(`| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---- | ----------------------- |`);
const list = checkpoints.filter(x=>!x.auth).sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 0);
list.forEach((item) => {
readme.push(`| [](https://colab.research.google.com/github/ninjaneural/webui/blob/master/stable/${item.ipynb}.ipynb) | [](https://colab.research.google.com/github/ninjaneural/webui/blob/master/install/${item.ipynb}.ipynb) | [](https://colab.research.google.com/github/ninjaneural/webui/blob/master/nightly/${item.ipynb}.ipynb) | [](https://colab.research.google.com/github/ninjaneural/webui/blob/master/deforum/${item.ipynb}.ipynb) | [${item.name}](${item.model}) | ${item.bakedVAE ? '' : '선택'} | ${item.type} |`)
});
readmeText = readme.join('\n');
fs.writeFileSync(`../COLAB.md`, readmeText);
return true;
}
(async function () {
try {
const model = await fetchModel();
checkpoints = JSON.parse(model);
copy_files();
make_readme();
} catch (e) {
console.error(e);
}
})();