Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Extraltodeus/DistanceSampler: Heuristic modification of the Heun sampler using normalized distances. · GitHub
Skip to content

Repository files navigation

DistanceSampler

A custom experimental sampler based on relative distances. The first few steps are slower and then the sampler accelerates (the end is made with Heun).

The idea is to get a more precise start since this is when most of the work is being done.

A more technical explaination

Pros:

  • Less body horror / merged fused people.
  • Little steps required (4-10, recommanded general use: 7 with beta or AYS)
  • Can sample simple subjects without unconditional prediction (meaning with a CFG scale at 1) with a good quality.

Cons:

  • Slow, which is also a plus. Relax, the image is generating ⛱ (but really since it requires little amounts of steps while giving a lesser percentage of horrors I personally prefer it)

Variations:

  • The variation having a "n" in the name stands for "negative" and makes use of the unconditional prediction so to determin the best output. The results may vary depending on your negative prompt. In general it seems to make less mistakes. This is what I sample with in general.

  • The "p" variation uses a comparison with each previous step so to enhance the result. In general things become smoother / less messy.

New:

Thanks to Blepping there is now an ancestral version!

More infos here


Potential compatibility issue:

If any error was to relate to tensors shape, uncomment these two lines in the file "presets_to_add.py":

extra_samplers["Distance_fast"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False)
extra_samplers["Distance_fast_n"] = distance_wrap(resample=3,resample_end=1,cfgpp=False,sharpen=False,use_negative=True)

These are basically the same except they don't use a spherical interpolation at the end. The interpolation was made with latent spaces such as those used in Stable Diffusion in mind. These two alternatives use a weighted average instead (the difference is barely noticeable from my testing).


Comparisons

Examples below are using the beta scheduler. The amount of steps has been adjusted to match the duration has this sampler is quite slow, yet requires little amounts of steps.

left: Distance, 7 steps

right: dpmpp2m, 20 steps

combined_side_by_side

Distance, 10 steps:

distance_10_steps

Distance n, 10 steps:

distance_n_10_steps

DPM++SDE (gpu), 14 steps:

dpmppsder_14steps

Disabled Guidance (CFG=1)

CFG scale at 1 on a normal SDXL model (works for simple subjects):

ComfyUI_00645_

ComfyUI_00640_

ComfyUI_00632_

Distance p with a CFG at 1 and 6 steps:

ComfyUI_00695_

ComfyUI_00692_

About

Heuristic modification of the Heun sampler using normalized distances.

Topics

Resources

Stars

44 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages