|
import { app } from "../../scripts/app.js"; |
|
import { api } from "../../scripts/api.js"; |
|
import { $el } from "../../scripts/ui.js"; |
|
|
|
app.registerExtension({ |
|
name: "Comfy.SaveAsScript", |
|
init() { |
|
$el("style", { |
|
parent: document.head, |
|
}); |
|
}, |
|
async setup() { |
|
const menu = document.querySelector(".comfy-menu"); |
|
const separator = document.createElement("hr"); |
|
|
|
separator.style.margin = "20px 0"; |
|
separator.style.width = "100%"; |
|
menu.append(separator); |
|
|
|
const saveButton = document.createElement("button"); |
|
saveButton.textContent = "Save as Script"; |
|
saveButton.onclick = () => { |
|
var filename = prompt("Save script as:"); |
|
if(filename === undefined || filename === null || filename === "") { |
|
return |
|
} |
|
|
|
app.graphToPrompt().then(async (p) => { |
|
const json = JSON.stringify({name: filename + ".json", workflow: JSON.stringify(p.output, null, 2)}, null, 2); |
|
var response = await api.fetchApi(`/saveasscript`, { method: "POST", body: json }); |
|
if(response.status == 200) { |
|
const blob = new Blob([await response.text()], {type: "text/python;charset=utf-8"}); |
|
const url = URL.createObjectURL(blob); |
|
if(!filename.endsWith(".py")) { |
|
filename += ".py"; |
|
} |
|
|
|
const a = $el("a", { |
|
href: url, |
|
download: filename, |
|
style: {display: "none"}, |
|
parent: document.body, |
|
}); |
|
a.click(); |
|
setTimeout(function () { |
|
a.remove(); |
|
window.URL.revokeObjectURL(url); |
|
}, 0); |
|
} |
|
}); |
|
} |
|
menu.append(saveButton); |
|
|
|
console.log("SaveAsScript loaded"); |
|
} |
|
}); |
|
|