Instructions to use bbbboiwow/cocccck with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use bbbboiwow/cocccck with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("bbbboiwow/cocccck", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
| // ComfyUI.mxToolkit.Stop v.0.9.7 - Max Smirnov 2024 | |
| import { app } from "../../scripts/app.js"; | |
| class MXStop | |
| { | |
| constructor(node) | |
| { | |
| this.node = node; | |
| this.node.properties = this.node.properties || {}; | |
| this.node.onGraphConfigured = function () | |
| { | |
| this.configured = true; | |
| } | |
| this.node.onConnectionsChange = function (type, index, connected, link_info) | |
| { | |
| if (link_info) | |
| { | |
| if (connected) | |
| { | |
| if (type === LiteGraph.INPUT) | |
| { | |
| const cnode = app.graph.getNodeById(link_info.origin_id); | |
| const ctype = cnode.outputs[link_info.origin_slot].type; | |
| const color = LGraphCanvas.link_type_colors[ctype]; | |
| this.outputs[0].type = ctype; | |
| this.outputs[0].name = ctype; | |
| this.inputs[0].type = ctype; | |
| if (link_info.id) { app.graph.links[link_info.id].color = color; } | |
| if (this.outputs[0].links !== null) | |
| for (let i = this.outputs[0].links.length; i > 0; i--) | |
| { | |
| const tlinkId = this.outputs[0].links[i-1]; | |
| const tlink = app.graph.links[tlinkId]; | |
| if (this.configured) if ( ctype !== tlink.type ) app.graph.getNodeById(tlink.target_id).disconnectInput(tlink.target_slot); | |
| } | |
| } | |
| if (type === LiteGraph.OUTPUT && this.inputs[0].link === null) | |
| { | |
| this.inputs[0].type = link_info.type; | |
| this.outputs[0].type = link_info.type; | |
| this.outputs[0].name = link_info.type; | |
| } | |
| } | |
| else if ((( type === LiteGraph.INPUT ) && ( this.outputs[0].links === null || this.outputs[0].links.length === 0 )) || (( type === LiteGraph.OUTPUT) && ( this.inputs[0].link === null ))) this.onAdded(); | |
| } | |
| this.computeSize(); | |
| }; | |
| this.node.onAdded = function () | |
| { | |
| this.inputs[0].type = "*"; | |
| this.outputs[0].name = ""; | |
| this.outputs[0].type = "*"; | |
| }; | |
| this.node.onMouseDown = function(e, pos, canvas) | |
| { | |
| let cWidth = this._collapsed_width || LiteGraph.NODE_COLLAPSED_WIDTH; | |
| if ( e.canvasY-this.pos[1] > 0 ) return false; | |
| if (this.flags.collapsed && (e.canvasX-this.pos[0] < LiteGraph.NODE_TITLE_HEIGHT)) return false; | |
| if (!this.flags.collapsed && ((e.canvasX-this.pos[0]) < (this.size[0]-cWidth+LiteGraph.NODE_TITLE_HEIGHT))) return false; | |
| this.updateThisNodeGraph?.(); | |
| this.onTmpMouseUp(e, pos, canvas); | |
| return true; | |
| } | |
| this.node.onTmpMouseUp = function(e, pos, canvas) | |
| { | |
| app.queuePrompt(0); | |
| } | |
| this.node.onDrawForeground = function(ctx) | |
| { | |
| this.configured = true; | |
| if (this.size[1] > LiteGraph.NODE_SLOT_HEIGHT*1.3) this.size[1] = LiteGraph.NODE_SLOT_HEIGHT*1.3; | |
| let titleHeight = LiteGraph.NODE_TITLE_HEIGHT; | |
| let cWidth = this._collapsed_width || LiteGraph.NODE_COLLAPSED_WIDTH; | |
| let buttonWidth = cWidth-titleHeight-6; | |
| let cx = (this.flags.collapsed?cWidth:this.size[0])-buttonWidth-6; | |
| ctx.fillStyle = this.color || LiteGraph.NODE_DEFAULT_COLOR; | |
| ctx.beginPath(); | |
| ctx.rect(cx, 2-titleHeight, buttonWidth, titleHeight-4); | |
| ctx.fill(); | |
| cx += buttonWidth/2; | |
| ctx.lineWidth = 1; | |
| if (this.mouseOver) | |
| { | |
| ctx.fillStyle = LiteGraph.NODE_SELECTED_TITLE_COLOR | |
| ctx.beginPath(); ctx.moveTo(cx-8,-titleHeight/2-8); ctx.lineTo(cx+0,-titleHeight/2); ctx.lineTo(cx-8,-titleHeight/2+8); ctx.fill(); | |
| ctx.beginPath(); ctx.moveTo(cx+1,-titleHeight/2-8); ctx.lineTo(cx+9,-titleHeight/2); ctx.lineTo(cx+1,-titleHeight/2+8); ctx.fill(); | |
| } | |
| else | |
| { | |
| ctx.fillStyle = (this.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR); | |
| ctx.beginPath(); ctx.rect(cx-10,-titleHeight/2-8, 4, 16); ctx.fill(); | |
| ctx.beginPath(); ctx.rect(cx-2,-titleHeight/2-8, 4, 16); ctx.fill(); | |
| } | |
| } | |
| this.node.computeSize = function() | |
| { | |
| return [ (this.properties.showOutputText && this.outputs && this.outputs.length) ? LiteGraph.NODE_TEXT_SIZE * (this.outputs[0].name.length+5) * 0.6 + 140 : 140, LiteGraph.NODE_SLOT_HEIGHT*1.3 ]; | |
| } | |
| } | |
| } | |
| app.registerExtension( | |
| { | |
| name: "mxStop", | |
| async beforeRegisterNodeDef(nodeType, nodeData, _app) | |
| { | |
| if (nodeData.name === "mxStop") | |
| { | |
| const onNodeCreated = nodeType.prototype.onNodeCreated; | |
| nodeType.prototype.onNodeCreated = function () { | |
| if (onNodeCreated) onNodeCreated.apply(this, []); | |
| this.mxStop = new MXStop(this); | |
| } | |
| } | |
| } | |
| }); | |