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