diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..47ab45d --- /dev/null +++ b/docs/404.html @@ -0,0 +1,38 @@ + + +
+ + + + + + + + + + + + + + +There are a few ways to diagnose issues with the node pack. +On launch the console should already provide enough information regarding potential issues, but there are a few other options:
There is now a setting in Comfy setting page to enable or disable debugging of the node pack:
+ +
+This will effectively enable both backend and frontend debug logs + +If you go to /mtb/status
(for instance http://localhost:3000/mtb/status
), you will be presented with a page showing the node that successfuly loaded and the ones that failed
+ +
+All the examples use the RevAnimated model 1.22 as well as gsdf/EasyNegative textual inversions (v1 and v2), you should install them if you want to reproduce the exact output from the samples (most examples use fixed seed for this reason), but you are free to use any models
preview | workflow file | description |
---|---|---|
01-faceswap.json | DEPRECATED (see details) | |
02-film_interpolation.json | DEPRECATED (see details) | |
03-animation_builder-condition-lerp.json | Using the 0-1 output of the animation builder to linearly interpolate between two prompts: blue car -> yellow car | |
04-animation_builder-deforum.json | advanced use case of the animation builder featuring a lot of the logic behind mtb nodes, this specific example will run 2 times for 30 frames stepping the seed for the second loop | |
05-seamless_texture.json | Seamless diffusion and deepbump showcase | |
06-seamless_equilateral.json | Generate seamless environment maps, requires IPAdapter Plus and the Redmond 360 LoRa for SDXL or the Latent Labs 360 for 1.5 |
+ +
+ + +Welcome to this wiki, do not hesitate to make suggestions by filing a feature request if you need a guide on a specific node/workflow.
Theses descriptions are extracted from the source code comments and provide short insights on each node's goal.
name | description |
---|---|
Animation Builder (mtb) | Convenient way to manage basic animation maths at the core of many of my workflows |
Any To String (mtb) | Tries to take any input and convert it to a string |
Bbox (mtb) | The bounding box (BBOX) custom type used by other nodes |
Bbox From Mask (mtb) | From a mask extract the bounding box |
Blur (mtb) | Blur an image using a Gaussian filter. |
Color Correct (mtb) | Various color correction methods |
Colored Image (mtb) | Constant color image of given size |
Concat Images (mtb) | Add images to batch |
Crop (mtb) | Crops an image and an optional mask to a given bounding box\n\n The bounding box can be given as a tuple of (x, y, width, height) or as a BBOX type\n The BBOX input takes precedence over the tuple input\n |
Debug (mtb) | Experimental node to debug any Comfy values, support for more types and widgets is planned |
Deep Bump (mtb) | Normal & height maps generation from single pictures |
Export With Ffmpeg (mtb) | Export with FFmpeg (Experimental) |
Face Swap (mtb) | Face swap using deepinsight/insightface models |
Film Interpolation (mtb) | Google Research FILM frame interpolation for large motion |
Fit Number (mtb) | Fit the input float using a source and target range |
Float To Number (mtb) | Node addon for the WAS Suite. Converts a comfy FLOAT to a NUMBER. |
Get Batch From History (mtb) | Very experimental node to load images from the history of the server.\n\n Queue items without output are ignored in the count. |
Image Compare (mtb) | Compare two images and return a difference image |
Image Distort With Uv (mtb) | Distorts an image based on a UV map. |
Image Premultiply (mtb) | Premultiply image with mask |
Image Remove Background Rembg (mtb) | Removes the background from the input using Rembg. |
Image Resize Factor (mtb) | Extracted mostly from WAS Node Suite, with a few edits (most notably multiple image support) and less features. |
Image To Uv (mtb) | Turn an image back into a UV map. (Shallow converter) |
Int To Bool (mtb) | Basic int to bool conversion |
Int To Number (mtb) | Node addon for the WAS Suite. Converts a comfy INT to a NUMBER. |
Latent Lerp (mtb) | Linear interpolation (blend) between two latent vectors |
Load Face Analysis Model (mtb) | Loads a face analysis model |
Load Face Enhance Model (mtb) | Loads a GFPGan or RestoreFormer model for face enhancement. (https://civitai.com/models/24690/comfyui-facerestore-node look like a better alternative) |
Load Face Swap Model (mtb) | Loads a faceswap model |
Load Film Model (mtb) | Loads a FILM model |
Load Image From Url (mtb) | Load an image from the given URL |
Load Image Sequence (mtb) | Load an image sequence from a folder. The current frame is used to determine which image to load.\n\n Usually used in conjunction with the Primitive node set to increment to load a sequence of images from a folder.\n Use -1 to load all matching frames as a batch.\n |
Mask To Image (mtb) | Converts a mask (alpha) to an RGB image with a color and background |
Qr Code (mtb) | Basic QR Code generator |
Restore Face (mtb) | Uses GFPGan to restore faces |
Save Gif (mtb) | Save the images from the batch as a GIF |
Save Image Grid (mtb) | Save all the images in the input batch as a grid of images. |
Save Image Sequence (mtb) | Save an image sequence to a folder. The current frame is used to determine which image to save.\n\n This is merely a wrapper around the save_images function with formatting for the output folder and filename.\n |
Save Tensors (mtb) | Save torch tensors (image, mask or latent) to disk, useful to debug things outside comfy |
Smart Step (mtb) | Utils to control the steps start/stop of the KAdvancedSampler in percentage |
String Replace (mtb) | Basic string replacement |
Styles Loader (mtb) | Load csv files and populate a dropdown from the rows (\u00e0 la A111) |
Text To Image (mtb) | Utils to convert text to image using a font\n\n\n The tool looks for any .ttf file in the Comfy folder hierarchy.\n |
Transform Image (mtb) | Save torch tensors (image, mask or latent) to disk, useful to debug things outside comfy\n\n\n it return a tensor representing the transformed images with the same shape as the input tensor\n |
Uncrop (mtb) | Uncrops an image to a given bounding box\n\n The bounding box can be given as a tuple of (x, y, width, height) or as a BBOX type\n The BBOX input takes precedence over the tuple input |
Unsplash Image (mtb) | Unsplash Image given a keyword and a size |
Uv Distort (mtb) | Applies a polar coordinates or wave distortion to the UV map |
Uv Map (mtb) | Generates a UV Map tensor given a widht and height |
Uv Remove Seams (mtb) | Blends values near the UV borders to mitigate visible seams. |
Uv Tile (mtb) | Tiles the UV map based on the specified number of tiles. |
Uv To Image (mtb) | Converts the UV map to an image. (Shallow converter) |
Transform Image
, Fit Number
, Get Batch from History
(both use case, last frame feedback and batch gathering), Save Gif
, Export to ProRes
and of course Animation Builder
to mimic a Deforum like effect:+ +
0&&g(X())}w||Ee(n,E,s,t,e,u),v!==null&&(p===0?_?P(_):_=Q(()=>v(s)):_!==null&&re(_,()=>{_=null})),o&&k(!0),a()}),w&&(s=H)}function Ee(i,e,a,u,t,v){var V,Y,q,B;var s=(t&de)!==0,E=(t&(O|b))!==0,h=i.length,c=e.items,_=e.first,f=_,d,n=null,p,o=[],T=[],I,A,r,l;if(s)for(l=0;l{var U;if(p!==void 0)for(r of p)(U=r.a)==null||U.apply()}),z.first=e.first&&e.first.e,z.last=n&&n.e}function pe(i,e,a,u){u&O&&F(i.v,e),u&b?F(i.i,a):i.i=a}function m(i,e,a,u,t,v,s,E,h){try{var c=(h&O)!==0,_=(h&ce)===0,f=c?_?_e(t):G(t):t,d=h&b?G(s):s,n={i:d,v:f,k:v,a:null,e:null,prev:a,next:u};return n.e=Q(()=>E(i,f,d),w),n.e.prev=a&&a.e,n.e.next=u&&u.e,a===null?e.first=n:(a.next=n,a.e.next=n.e),u!==null&&(u.prev=n,u.e.prev=n.e),n}finally{}}function J(i,e,a){for(var u=i.next?i.next.e.nodes_start:a,t=e?e.e.nodes_start:a,v=i.e.nodes_start;v!==u;){var s=oe(v);t.before(v),v=s}}function C(i,e,a){e===null?i.first=a:(e.next=a,e.e.next=a&&a.e),a!==null&&(a.prev=e,a.e.prev=e&&e.e)}export{Ie as e,Te as i};
diff --git a/docs/_app/immutable/chunks/each.6-zUuL0x.js.br b/docs/_app/immutable/chunks/each.6-zUuL0x.js.br
new file mode 100644
index 0000000..11f9425
Binary files /dev/null and b/docs/_app/immutable/chunks/each.6-zUuL0x.js.br differ
diff --git a/docs/_app/immutable/chunks/each.6-zUuL0x.js.gz b/docs/_app/immutable/chunks/each.6-zUuL0x.js.gz
new file mode 100644
index 0000000..2b72aa8
Binary files /dev/null and b/docs/_app/immutable/chunks/each.6-zUuL0x.js.gz differ
diff --git a/docs/_app/immutable/chunks/entry.DFosKZrm.js b/docs/_app/immutable/chunks/entry.DFosKZrm.js
new file mode 100644
index 0000000..c4d60b5
--- /dev/null
+++ b/docs/_app/immutable/chunks/entry.DFosKZrm.js
@@ -0,0 +1,3 @@
+import{aI as ft,a8 as le,$ as ut,a4 as dt}from"./utils.C1SWMJ6M.js";new URL("sveltekit-internal://");function ht(e,n){return e==="/"||n==="ignore"?e:n==="never"?e.endsWith("/")?e.slice(0,-1):e:n==="always"&&!e.endsWith("/")?e+"/":e}function pt(e){return e.split("%25").map(decodeURI).join("%25")}function gt(e){for(const n in e)e[n]=decodeURIComponent(e[n]);return e}function fe({href:e}){return e.split("#")[0]}const mt=["href","pathname","search","toString","toJSON"];function yt(e,n,t){const r=new URL(e);Object.defineProperty(r,"searchParams",{value:new Proxy(r.searchParams,{get(a,o){if(o==="get"||o==="getAll"||o==="has")return s=>(t(s),a[o](s));n();const i=Reflect.get(a,o);return typeof i=="function"?i.bind(a):i}}),enumerable:!0,configurable:!0});for(const a of mt)Object.defineProperty(r,a,{get(){return n(),e[a]},enumerable:!0,configurable:!0});return r}const _t="/__data.json",wt=".html__data.json";function bt(e){return e.endsWith(".html")?e.replace(/\.html$/,wt):e.replace(/\/$/,"")+_t}function vt(...e){let n=5381;for(const t of e)if(typeof t=="string"){let r=t.length;for(;r;)n=n*33^t.charCodeAt(--r)}else if(ArrayBuffer.isView(t)){const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);let a=r.length;for(;a;)n=n*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(n>>>0).toString(36)}function At(e){const n=atob(e),t=new Uint8Array(n.length);for(let r=0;r{P(n)}}function Dt(t){return q(yt,t,!1)}function Sr(t,n){var r=i,e={effect:null,ran:!1};r.l.r1.push(e),e.effect=ut(()=>{t(),!e.ran&&(e.ran=!0,st(r.l.r2,!0),ft(n))})}function gr(){var t=i;ut(()=>{if(it(t.l.r2)){for(var n of t.l.r1){var r=n.effect;r.f&p&&E(r,D),F(r)&&U(r),n.ran=!1}t.l.r2.v=!1}})}function ut(t){return q(Y,t,!0)}function kr(t){return yn(t)}function yn(t,n=0){return q(Y|rt|n,t,!0)}function Nr(t,n=!0){return q(Y|T,t,!0,n)}function qt(t){var n=t.teardown;if(n!==null){const r=lt,e=o;dt(!0),$(null);try{n.call(null)}finally{dt(r),$(e)}}}function Pt(t){var n=t.deriveds;if(n!==null){t.deriveds=null;for(var r=0;r
'),Ve=j('