| | 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"); |
| | } |
| | }); |
| |
|