<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Deep Core Labs</title>
	<atom:link href="https://deepcorelabs.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://deepcorelabs.com</link>
	<description>Building Extraordinary Brands</description>
	<lastBuildDate>Mon, 30 Mar 2026 19:38:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://deepcorelabs.com/wp-content/uploads/2015/09/deep-core-labs-logo-small-50x50.png</url>
	<title>Deep Core Labs</title>
	<link>https://deepcorelabs.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Green Difference Studio — Free Online Green Screen &#038; Chroma Key Tool in Your Browser</title>
		<link>https://deepcorelabs.com/green-difference-studio-free-online-green-screen-chroma-key-tool-in-your-browser/</link>
					<comments>https://deepcorelabs.com/green-difference-studio-free-online-green-screen-chroma-key-tool-in-your-browser/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Mon, 16 Mar 2026 01:37:40 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[three.js]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=5239</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
		<div id="fws_69ccc3678ce55"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row top-level"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
	<div class="wpb_video_widget wpb_content_element vc_clearfix   vc_video-aspect-ratio-169 vc_video-el-width-100 vc_video-align-left" >
		<div class="wpb_wrapper">
			
			<div class="wpb_video_wrapper"><iframe title="Green Difference Studio — Free Open-Source Chroma Key Tool in the Browser" width="1080" height="608" src="https://www.youtube.com/embed/FnODFxK4WuE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
		</div>
	</div>

			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69ccc3678dc98"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				<a class="nectar-button jumbo regular extra-color-gradient-2"  style="color: #ffffff; background-color: #00d195;" target="_blank" href="https://deepcorelabs.com/tools/green-difference-studio/" data-color-override="#00d195" data-hover-color-override="false" data-hover-text-color-override="#fff"><span class="start loading">Open Green Difference Studio - Remove Green Screen Online</span><span class="hover">Open Green Difference Studio - Remove Green Screen Online</span></a>
			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69ccc3678e7f1"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p><a href="https://deepcorelabs.com/tools/green-difference-studio/"><strong>Open Demo Online</strong></a> | <a href="https://github.com/deepcorelabs/green-difference-studio"><strong>Source on GitHub</strong></a></p>
<hr />
<p>So a couple weeks ago Corridor Crew dropped their video about CorridorKey — an open-source, AI-powered chroma keyer that uses a transformer network to solve the green screen &#8220;unmixing problem.&#8221; The thing is genuinely impressive. It takes a raw green screen frame and a rough alpha hint, then predicts true foreground color and a clean linear alpha for every pixel, including all the nightmare stuff like motion blur, hair, and out-of-focus edges. They trained it on procedurally generated 3D renders with mathematically perfect alpha data. It outputs 16-bit and 32-bit EXR files for Nuke and DaVinci. Serious tool for serious work.</p>
<p>I actually installed a quanted version <a href="https://github.com/edenaion/EZ-CorridorKey">EZ-CorridorKey</a> on my 4080 Super workstation and it does work. The keying results are legitimately great — better than anything traditional can do on difficult footage. But the premask step is a pain. You need to feed it a decent black-and-white outline of your subject, and getting that right is its own little project. For clean studio footage it&#8217;s fine, but the workflow isn&#8217;t exactly &#8220;drop a file and go&#8221;. The included GVM AUTO / SAM2 / MatAnyone2/ VideoMaMa etc. produced very underwhelming results for me and the tool crashed quite a bit.</p>
<p>That got me thinking. What if you just want to pull a quick key on a talking-head video and export it with alpha? What if you don&#8217;t want to install anything at all? What if you&#8217;re on a laptop with no dedicated GPU?</p>
<p>That&#8217;s how Green Difference Studio happened.</p>
<h2 id="standing-on-shoulders">Standing on shoulders</h2>
<p>I should give credit where it&#8217;s due. The original chroma key shader that got this project started came from <a href="https://www.urbanpixellab.com/realtime-greenscreen-keyer/">Urban Pixel Lab&#8217;s Realtime Greenscreen Keyer</a> (<a href="https://github.com/urbanpixellab/greenscreen-shader">GitHub</a>). Their WebGL shader was the foundation — the hue-based keying approach, the basic spill suppression logic, the general structure of doing chroma math in a fragment shader. From there it got extended pretty heavily with sampled key colors, curve-based threshold falloff, despill depth, choke/feather morphology, and all the other controls, but it wouldn&#8217;t exist without that starting point.</p>
<h2 id="the-whole-thing-was-vibe-coded">The whole thing was vibe-coded</h2>
<p>I&#8217;m not going to pretend this was some carefully architected project with a Jira board and sprint planning. I opened Claude Code, described what I wanted, and started iterating. Every feature in the app was built through conversation — me describing what I needed, sometimes yelling at the screen when the mute button wouldn&#8217;t toggle (SVG <code>hidden</code> attribute, never again), and watching the code take shape in real time.</p>
<p>The shader pipeline, the tracker system, the background frame cache, the export pipeline — all of it came from back-and-forth with an AI pair programmer. Some sessions were smooth. Others involved me typing in all caps because the video was blasting audio during frame extraction for the third time. That&#8217;s vibe coding. You ride the wave and sometimes the wave rides you.</p>
<p>No Figma mockups. No PRD. No architecture diagram. Just &#8220;I want this thing to exist&#8221; and then making it exist, one conversation at a time.</p>
<h2 id="what-it-actually-does">What it actually does</h2>
<p>Green Difference Studio runs entirely in your browser. You drop a video in, and it keys out the green screen in real time using a WebGL fragment shader powered by Three.js. No server, no upload, no waiting for a cloud GPU. Everything stays on your machine.</p>
<p>The keying controls are what you&#8217;d expect from a decent compositor — hue range, saturation floor, light range, edge feather. There&#8217;s spill suppression with despill lift to recover natural skin tones. You can preview the alpha channel to check your matte quality, and use choke/feather to clean up edges.</p>
<p>But the part I&#8217;m most happy with is the tracker system. You can place tween trackers (static points you drag per frame) or mouse trackers (hold mouse on the subject while the video plays, release to stop tracking). Each tracker can be set to Keep or Discard mode with flood-fill-based alpha masking. There&#8217;s an &#8220;auto invert remaining&#8221; toggle that makes everything outside the tracked region transparent (or opaque, depending on mode). It&#8217;s not automatic motion tracking — that&#8217;s on the roadmap — but it&#8217;s surprisingly usable for isolating subjects in tricky shots.</p>
<p>Export gives you WebM with embedded alpha channel, a standalone grayscale matte, or PNG for single frames. The frame cache builds progressively in the background after upload, so you&#8217;re never staring at a loading bar. You see the first frame immediately and start working while thumbnails populate the timeline behind the scenes.</p>
<h2 id="why-browser-based-matters">Why browser-based matters</h2>
<p>CorridorKey requires a minimum 24GB VRAM GPU. That&#8217;s a $1,500+ graphics card. It outputs EXR sequences meant for professional compositing software that costs hundreds or thousands of dollars a year. Even with EZ-CorridorKey making the install easier, you&#8217;re still dealing with Python environments, model downloads, and the premask workflow.</p>
<p>Green Difference Studio requires Chrome. That&#8217;s it.</p>
<p>It won&#8217;t give you the same quality on difficult shots — ML-based unmixing is fundamentally more capable than traditional threshold-based keying for things like hair detail and translucent materials. But for the vast majority of green screen footage — talking heads, product shots, simple VFX work — a well-tuned traditional keyer running at GPU speed in a browser tab gets the job done. And it gets it done right now, on whatever laptop you happen to have.</p>
<h2 id="the-tech-under-the-hood">The tech under the hood</h2>
<p>The rendering pipeline is a Three.js fragment shader that does all the chroma math on the GPU. Spill suppression, edge feathering, alpha generation — it&#8217;s all happening in GLSL. The tracker flood fill runs on the CPU (Web Worker offloading is on the TODO list), and export uses the WebCodecs API for hardware-accelerated encoding with a MediaRecorder fallback for alpha-channel WebM.</p>
<p>Timeline thumbnails are built from a canvas-based frame cache that populates asynchronously using a separate hidden video element — this was one of the trickier problems to solve, because you can&#8217;t seek two different positions on the same video element simultaneously without the browser fighting you.</p>
<p>Other dependencies: GSAP for smooth tracker animations, iro.js for the color picker, noUiSlider for the range controls, and webm-muxer for standalone matte export.</p>
<h2 id="what-s-next">What&#8217;s next</h2>
<p>The README has a proper roadmap, but the highlights:</p>
<ul>
<li><strong>Mask tools</strong> — brush, shape, polygon, and lasso masks for garbage mattes</li>
<li><strong>Automatic motion tracking</strong> — Lucas-Kanade or correlation-based point tracking</li>
<li><strong>Image sequence export</strong> — PNG+Alpha and JPG matte sequences</li>
<li><strong>Better despill</strong> — edge-aware spill suppression for hair and translucent materials</li>
<li><strong>Undo/redo</strong> — full history stack</li>
<li><strong>Web Worker flood fill</strong> — the CPU-heavy tracker math should be off the main thread</li>
</ul>
<p>And the dream entry at the bottom of the list: CorridorKey in the browser. A transformer model running in WebGPU doing neural green screen removal with no install. Probably not happening tomorrow. But WebGPU is maturing fast, and ONNX runtime for web is getting better every month. One day, maybe.</p>
	</div>
</div>




	<div class="wpb_raw_code wpb_content_element wpb_raw_html" >
		<div class="wpb_wrapper">
			<div id="gds-demo">
  <style>
    #gds-demo {
      width: 100%;
      max-width: 900px;
      margin: 2em auto;
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    }
    #gds-demo .gds-video-wrap {
      position: relative;
      width: 100%;
      aspect-ratio: 1 / 1;
      overflow: hidden;
      border-radius: 8px;
      border: 1px solid #333;
    }
    #gds-demo .gds-video-wrap video {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: contain;
    }
    #gds-demo .gds-checker-dark {
      background-image:
        linear-gradient(45deg, #1a1a1a 25%, transparent 25%),
        linear-gradient(-45deg, #1a1a1a 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, #1a1a1a 75%),
        linear-gradient(-45deg, transparent 75%, #1a1a1a 75%);
      background-size: 20px 20px;
      background-position: 0 0, 0 10px, 10px -10px, -10px 0;
      background-color: #111;
    }
    #gds-demo .gds-checker-light {
      background-image:
        linear-gradient(45deg, #ccc 25%, transparent 25%),
        linear-gradient(-45deg, #ccc 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, #ccc 75%),
        linear-gradient(-45deg, transparent 75%, #ccc 75%);
      background-size: 20px 20px;
      background-position: 0 0, 0 10px, 10px -10px, -10px 0;
      background-color: #e8e8e8;
    }
    #gds-demo .gds-solid {
      background-image: none;
    }
    #gds-demo .gds-controls {
      display: flex;
      align-items: center;
      gap: 8px;
      margin-top: 10px;
      flex-wrap: wrap;
    }
    #gds-demo .gds-label {
      font-size: 13px;
      color: #555;
      margin-right: 2px;
      font-weight: 600;
    }
    #gds-demo .gds-swatch {
      width: 28px;
      height: 28px;
      border-radius: 5px;
      border: 2px solid #ddd;
      cursor: pointer;
      transition: border-color 0.15s, box-shadow 0.15s;
      flex-shrink: 0;
    }
    #gds-demo .gds-swatch:hover {
      border-color: #888;
    }
    #gds-demo .gds-swatch.gds-active {
      border-color: #333;
      box-shadow: 0 0 0 2px rgba(0,0,0,0.2);
    }
    #gds-demo .gds-swatch-checker-dark {
      background-image:
        linear-gradient(45deg, #1a1a1a 25%, transparent 25%),
        linear-gradient(-45deg, #1a1a1a 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, #1a1a1a 75%),
        linear-gradient(-45deg, transparent 75%, #1a1a1a 75%);
      background-size: 10px 10px;
      background-position: 0 0, 0 5px, 5px -5px, -5px 0;
      background-color: #111;
    }
    #gds-demo .gds-swatch-checker-light {
      background-image:
        linear-gradient(45deg, #ccc 25%, transparent 25%),
        linear-gradient(-45deg, #ccc 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, #ccc 75%),
        linear-gradient(-45deg, transparent 75%, #ccc 75%);
      background-size: 10px 10px;
      background-position: 0 0, 0 5px, 5px -5px, -5px 0;
      background-color: #e8e8e8;
    }
    #gds-demo .gds-tip {
      margin-top: 16px;
      font-size: 15px;
      line-height: 1.7;
      color: #333;
    }
    #gds-demo .gds-tip strong {
      color: #111;
    }
  </style>

  <div class="gds-video-wrap gds-checker-light" id="gds-video-bg">
    <video autoplay loop muted playsinline controls src="https://deepcorelabs.com/tools/green-difference-studio/grok-video-0c16267b-ecf0-4cb2-846b-ba012b2b2713.webm?v=0.1"></video>
  </div>

  <div class="gds-controls">
    <span class="gds-label">Background:</span>
    <div class="gds-swatch gds-swatch-checker-light gds-active" onclick="gdsBg(this,'checker-light')" title="Light checkerboard"></div>
    <div class="gds-swatch gds-swatch-checker-dark" onclick="gdsBg(this,'checker-dark')" title="Dark checkerboard"></div>
    <div class="gds-swatch gds-solid" style="background:#1a1a1a;" onclick="gdsBg(this,'#1a1a1a')" title="Dark gray"></div>
    <div class="gds-swatch gds-solid" style="background:#ccc;" onclick="gdsBg(this,'#ccc')" title="Light gray"></div>
    <div class="gds-swatch gds-solid" style="background:#3d2b2b;" onclick="gdsBg(this,'#3d2b2b')" title="Muted brown"></div>
    <div class="gds-swatch gds-solid" style="background:#2e2640;" onclick="gdsBg(this,'#2e2640')" title="Muted purple"></div>
  </div>

  <p class="gds-tip">
    This transparent WebM was generated with an AI text-to-video model prompted to render on a green screen, then keyed with <strong>Green Difference Studio</strong> — completely free, right in the browser. Works great with <strong>any text-to-video or image-to-video tool</strong> if you prompt it to shoot on a green screen. Free transparent videos, no need to wait for the big guys to support alpha channel. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />
  </p>

  <script>
    function gdsBg(el, val) {
      var wrap = document.getElementById('gds-video-bg');
      var swatches = document.querySelectorAll('#gds-demo .gds-swatch');

      for (var i = 0; i < swatches.length; i++) {
        swatches[i].classList.remove('gds-active');
      }

      el.classList.add('gds-active');

      if (val === 'checker-light') {
        wrap.className = 'gds-video-wrap gds-checker-light';
        wrap.style.backgroundColor = '';
      } else if (val === 'checker-dark') {
        wrap.className = 'gds-video-wrap gds-checker-dark';
        wrap.style.backgroundColor = '';
      } else {
        wrap.className = 'gds-video-wrap gds-solid';
        wrap.style.backgroundColor = val;
      }
    }
  </script>
</div>
		</div>
	</div>

<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>About the dream entry at the bottom of the list: CorridorKey in the browser. A transformer model running in WebGPU doing neural green screen removal with no install. Probably not happening tomorrow. But WebGPU is maturing fast, and ONNX runtime for web is getting better every month. One day, maybe.</p>
<p>And if Corridor Crew ever reads this — thanks for the inspiration. CorridorKey is genuinely amazing work and I hope it keeps pushing the industry forward. This little browser tool exists because you made me want to build something.</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/green-difference-studio-free-online-green-screen-chroma-key-tool-in-your-browser/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Open Wake Word on the Web</title>
		<link>https://deepcorelabs.com/open-wake-word-on-the-web/</link>
					<comments>https://deepcorelabs.com/open-wake-word-on-the-web/#comments</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Sat, 12 Jul 2025 03:47:47 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[audio]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4455</guid>

					<description><![CDATA[How I Ported a Python Wake Word System to the Browser When the LLMs Gave Up I started this project with a goal that seemed simple on paper: take openWakeWord,...]]></description>
										<content:encoded><![CDATA[<a class="nectar-button n-sc-button jumbo accent-color regular-button"  href="https://deepcorelabs.com/projects/openwakeword" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>OpenWakeWord - Web Demo</span></a>
<h2 id="how-i-ported-a-python-wake-word-system-to-the-browser-when-the-llms-gave-up">How I Ported a Python Wake Word System to the Browser When the LLMs Gave Up</h2>
<p>I started this project with a goal that seemed simple on paper: take <a href="https://github.com/dscripka/openWakeWord/" target="_blank" rel="noopener">openWakeWord</a>, a powerful open-source library for wake word detection, and make it run entirely in a web browser. And when I say &#8220;in the browser,&#8221; I mean it. No tricks. No websockets streaming audio to a Python server. I wanted the models, the audio processing, and the detection logic running completely on the client.<br />
My initial approach was to &#8220;vibe-code&#8221; it with the new generation of LLMs. I fed my high-level goal to <strong>Gemini 2.5 Pro, o4-mini-high, and Grok 4</strong>. They gave me a fantastic head start, building out the initial HTML, CSS, and JavaScript structure with impressive speed. But after dozens of messages just refining the vibe, we hit a hard wall. The models would run, but the output score was just a flat line at zero. No errors, no crashes, just… nothing.<br />
This is where the real story begins. The vibe was off. Vibe coding had failed. I had to pivot from being a creative director to a deep-dive detective. It&#8217;s a tale of how I used a novel cross-examination technique with these same LLMs to solve a problem that each one, individually, had given up on.</p>
<h3 id="tl-dr-the-openwakeword-javascript-architecture-that-actually-works">TL;DR: The <code>openWakeWord</code> JavaScript Architecture That Actually Works</h3>
<p>For the engineers who just want the final schematics, here is the stateful, multi-buffer pipeline required to make this work.</p>
<ul>
<li><strong>Pipeline:</strong> <code>[Audio Chunk]</code> -&gt; <code>Melspectrogram Model</code> -&gt; <code>Melspectrogram Buffer</code> -&gt; <code>Embedding Model</code> -&gt; <code>Wake Word Model</code> -&gt; <code>Score</code></li>
<li><strong>Stage 1: Audio to Image (Melspectrogram):</strong>
<ul>
<li><strong>Audio Source:</strong> 16kHz, 16-bit, Mono PCM audio.</li>
<li><strong>Chunking:</strong> The pipeline operates on <strong>1280 sample</strong> chunks (80ms). This is non-negotiable.</li>
<li><strong>Model Input:</strong> The chunk is fed into <code>melspectrogram.onnx</code> as a <code></code> <strong>float32</strong> tensor.</li>
<li><strong>Mandatory Transformation:</strong> The output from the melspectrogram model <strong>must</strong> be transformed with the formula <code>output = (value / 10.0) + 2.0</code>.</li>
</ul>
</li>
<li><strong>Stage 2: Image Analysis (Feature Embedding):</strong>
<ul>
<li><strong>Melspectrogram Buffer:</strong> The 5 transformed spectrogram frames from Stage 1 are pushed into a buffer.</li>
<li><strong>Sliding Window:</strong> This stage only executes when the <code>mel_buffer</code> contains at least <strong>76 frames</strong>. A <code></code> window is sliced from the <em>start</em> of the buffer.</li>
<li><strong>Model Input:</strong> This window is fed into <code>embedding_model.onnx</code> as a <code></code> tensor.</li>
<li><strong>Window Step:</strong> After processing, the buffer is slid forward by <strong>8 frames</strong> (<code>splice(0, 8)</code>).</li>
</ul>
</li>
<li><strong>Stage 3: Prediction:</strong>
<ul>
<li><strong>Embedding Buffer:</strong> The 96-value feature vector from Stage 2 is pushed into a second, fixed-size buffer that holds the last <strong>16</strong> embeddings.</li>
<li><strong>Model Input:</strong> Once full, the 16 embeddings are flattened and fed into the final wake word model as a <code></code> tensor. This <code>[batch, sequence, features]</code> shape is the critical insight that resolved a key error.</li>
</ul>
</li>
</ul>
<hr />
<h3 id="the-unvarnished-truth-my-journey-into-debugging-hell">The Unvarnished Truth: My Journey into Debugging Hell</h3>
<p>After the initial burst of productivity, all three LLMs hit the same wall and gave up. They settled on the same, demoralizing conclusion: the problem was <strong>floating-point precision differences</strong> between Python and the browser&#8217;s ONNX Runtime. They suggested the complex math in <code>openWakeWord</code> was too sensitive and that a 100% client-side implementation was likely <strong>impossible</strong>.<br />
Something about that felt fishy. The separate VAD (Voice Activity Detection) model was working perfectly fine. This felt like a logic problem, not a fundamental platform limitation.<br />
This is where the breakthrough happened. I realized &#8220;vibe coding&#8221; wasn&#8217;t enough. I had to get specific. I decided to change my approach and use the LLMs as specialized, focused tools rather than general-purpose partners:</p>
<ol>
<li><strong>The Analyst:</strong> I tasked one LLM with a single, focused job: analyze the <code>openwakeword</code> Python source code and describe, in painstaking detail, exactly what it was doing at every step.</li>
<li><strong>The Coder:</strong> I took the detailed blueprint from the &#8220;Analyst&#8221; and fed it to a <em>different</em> LLM. Its job was to take that blueprint and write the JavaScript implementation.</li>
</ol>
<p>This cross-examination process was like a magic trick. It bypassed the ruts the models had gotten into and started revealing the hidden architectural assumptions that had been causing all the problems.</p>
<h4 id="the-first-wall-the-sound-to-image-pipeline">The First Wall: The Sound-to-Image Pipeline</h4>
<p>The &#8220;Analyst&#8221; LLM immediately revealed my most basic misunderstanding. I thought I was feeding a sound model, but that&#8217;s not how it works. These models don&#8217;t &#8220;hear&#8221; sound; they &#8220;see&#8221; it.<br />
<strong>Aha! Moment #1: It&#8217;s an Image Recognition Problem.</strong> The first model in the chain, <code>melspectrogram.onnx</code>, doesn&#8217;t process audio waves. Its entire job is to convert a raw 80ms audio chunk into a <strong>melspectrogram</strong>—a 2D array of numbers that is essentially an image representing the intensity of different frequencies in that sound. The subsequent models are doing pattern recognition on these sound-images, not on the audio itself. This also explained the second part of the puzzle: the models were trained on specifically processed images, which is why this transformation was mandatory:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// This isn't just a normalization; it's part of the "image processing" pipeline
// that the model was trained on. It fails silently without it.

for (let j = 0; j &lt; new_mel_data.length; j++) {
  new_mel_data[j] = (new_mel_data[j] / 10.0) + 2.0;
}</pre>
<h4 id="the-second-wall-the-audio-history-tax">The Second Wall: The Audio History Tax</h4>
<p>With the formula in place, my test WAV file still failed. The &#8220;Analyst&#8221; LLM&#8217;s breakdown of the Python code&#8217;s looping was the key. I realized the pipeline&#8217;s second stage needs a history of <strong>76 spectrogram frames</strong> to even begin its work. Each 80ms audio chunk only produces <strong>5 frames</strong>, meaning the system has to process <strong>16 chunks</strong> (1.28 seconds) of audio before it can even think about generating the first feature vector. My test file was too short.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// This logic checks if the audio is long enough and pads it with silence if not.

const minRequiredSamples = 16 * frameSize; // 16 chunks * 1280 samples/chunk = 20480

if (audioData.length &lt; minRequiredSamples) {
  const padding = new Float32Array(minRequiredSamples - audioData.length);
  const newAudioData = new Float32Array(minRequiredSamples);
  newAudioData.set(audioData, 0);
  newAudioData.set(padding, audioData.length);
  audioData = newAudioData; // Use the new, padded buffer
}</pre>
<h4>The Third Wall: The Treachery of Optimization</h4>
<p>The system came to life, but it was unstable, crashing with a bizarre <code>offset is out of bounds</code> error. This wasn&#8217;t a floating-point issue; it was a memory management problem. I discovered that for performance, the ONNX Runtime for web <strong>reuses its memory buffers</strong>. The variable I was saving wasn&#8217;t the data, but a temporary <em>reference</em> to a memory location that was being overwritten.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// AHA Moment: ONNX Runtime reuses its output buffers. We MUST create a *copy*
// of the data instead of just pushing a reference to the buffer.

const new_embedding_data_view = embeddingOut[embeddingModel.outputNames[0]].data;
const stable_copy_of_embedding = new Float32Array(new_embedding_data_view);
embedding_buffer.push(stable_copy_of_embedding); // Push the stable copy, not the temporary view.</pre>
<h4 id="the-final-wall-the-purpose-of-the-vad">The Final Wall: The Purpose of the VAD</h4>
<p>The system was finally stable, and I could see the chart spike to 1.0 when I spoke the wake word. But the success sound wouldn&#8217;t play reliably. This was due to my most fundamental misconception. I had assumed the VAD&#8217;s purpose was to save resources. My thinking was: &#8220;VAD is cheap, the wake word model is expensive. So, I should only run the expensive model when the VAD detects speech.&#8221;<br />
This is completely wrong.<br />
<strong>Aha! Moment #4: The VAD is a Confirmation, Not a Trigger.</strong> The wake word pipeline must run <em>continuously</em> to maintain its history buffers. The VAD&#8217;s true purpose is to act as a <strong>confirmation signal</strong>. A detection is only valid if two conditions are met simultaneously: the wake word model reports a high score, AND the VAD confirms that human speech is currently happening. It’s a two-factor authentication system for your voice. This led to the final race condition: the VAD is fast, but the wake word pipeline is slow. The solution was a <strong>VAD Hangover</strong>—what I call &#8220;Redemption Frames&#8221;—to keep the detection window open just a little longer.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// These constants define the VAD Hangover logic

const VAD_HANGOVER_FRAMES = 12; // Keep speech active for ~1 second after VAD stops

let vadHangoverCounter = 0;
let isSpeechActive = false;

// Later, the final check uses this managed state:
if (score &gt; 0.5 &amp;&amp; isSpeechActive) {
 // Detection is valid!
}</pre>
<p>&nbsp;</p>
<h3 id="the-backend-betrayal-a-final-hurdle">The Backend Betrayal: A Final Hurdle</h3>
<p>With the core logic finally perfected, I implemented a feature to switch between the WASM, WebGL, and WebGPU backends. WASM and WebGPU worked, but WebGL crashed instantly with the error: `Error: no available backend found. ERR: [wasm] backend not found`.<br />
The issue was that the melspectrogram.onnx model uses specialized audio operators that the WebGL backend in ONNX Runtime simply does not support. My code was trying to force all models onto the selected backend, which is impossible when one is incompatible. The solution was a hybrid backend approach: force the incompatible pre-processing models (melspectrogram and VAD) to run on the universally-supported WASM backend, while allowing the heavy-duty neural network models to run on the user&#8217;s selected GPU backend for a performance boost. I&#8217;ve left the WebGL option in the demo as a reference for this interesting limitation.</p>
<h3 id="the-final-product">The Final Product</h3>
<p>This journey was a powerful lesson in the limitations of &#8220;vibe coding&#8221; for complex technical problems. While LLMs are incredible for scaffolding, they can&#8217;t replace rigorous, first-principles debugging. By pivoting my strategy—using one LLM to deconstruct the source of truth and another to implement that truth—I was able to solve a problem that a single LLM, or even a committee of them, declared impossible. The result is a working, robust web demo that proves this complex audio pipeline can indeed be tamed, running <strong>100% on the client, in the browser</strong>, no Python backend required.</p>
<a class="nectar-button n-sc-button jumbo accent-color regular-button"  href="https://deepcorelabs.com/projects/openwakeword" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>OpenWakeWord - Web Demo</span></a>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/open-wake-word-on-the-web/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Stable Diffusion PNG Prompt Text Extractor</title>
		<link>https://deepcorelabs.com/stable-diffusion-png-prompt-text-extractor/</link>
					<comments>https://deepcorelabs.com/stable-diffusion-png-prompt-text-extractor/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 06:18:23 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Stable Diffusion]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4432</guid>

					<description><![CDATA[A simple tool that extracts hidden prompt text from Stable Diffusion-generated PNG files &#8212; online (in the browser). What it does Upload a PNG file to extract the embedded generation...]]></description>
										<content:encoded><![CDATA[<p class="whitespace-pre-wrap break-words">A simple tool that extracts hidden prompt text from Stable Diffusion-generated PNG files &#8212; online (in the browser).</p>
<h2 class="text-xl font-bold text-text-200 mt-1 -mb-0.5">What it does</h2>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">Upload a PNG file to extract the embedded generation prompts (stored in iTXt chunks)</li>
<li class="whitespace-normal break-words">Works entirely in your browser &#8211; no server uploads needed, completely client-side</li>
<li class="whitespace-normal break-words">Super fast &#8212; instantly reveals the exact prompt used to create the SD image</li>
</ul>
<p class="whitespace-pre-wrap break-words">Perfect for artists studying prompt techniques, content verification, or understanding how specific AI images were created.</p>
<p class="whitespace-pre-wrap break-words">Try it now to decode the text behind your Stable Diffusion images.</p>
<a class="nectar-button n-sc-button medium accent-color regular-button" target="_blank" href="https://deepcorelabs.com/tools/prompt-extractor/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>Stable Diffusion PNG Prompt Extractor</span></a>
<p><a href="https://deepcorelabs.com/tools/prompt-extractor/"><img fetchpriority="high" decoding="async" class="alignnone wp-image-4434 size-full" src="https://deepcorelabs.com/wp-content/uploads/2025/03/2025-03-26_021316.jpg" alt="Stable Diffusion PNG Prompt Text Extractor Online Tool" width="739" height="1177" srcset="https://deepcorelabs.com/wp-content/uploads/2025/03/2025-03-26_021316.jpg 739w, https://deepcorelabs.com/wp-content/uploads/2025/03/2025-03-26_021316-188x300.jpg 188w, https://deepcorelabs.com/wp-content/uploads/2025/03/2025-03-26_021316-643x1024.jpg 643w" sizes="(max-width: 739px) 100vw, 739px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/stable-diffusion-png-prompt-text-extractor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WP Recovery Tools &#8211; Enter Recovery Mode Without Email</title>
		<link>https://deepcorelabs.com/wp-recovery-tools-enter-recovery-mode-without-email/</link>
					<comments>https://deepcorelabs.com/wp-recovery-tools-enter-recovery-mode-without-email/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Tue, 19 Nov 2024 01:38:59 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Recovery Mode]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4413</guid>

					<description><![CDATA[&#160; Hey fellow WordPress maintainers! After dealing with countless broken WordPress sites and locked-out admin panels over the years, I finally decided to create something that would make my life...]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p class="whitespace-pre-wrap break-words">Hey fellow WordPress maintainers! After dealing with countless broken WordPress sites and locked-out admin panels over the years, I finally decided to create something that would make my life (and hopefully yours) easier. Enter <strong>WP Recovery Tools</strong> &#8211; a single-file emergency toolkit that might just save your bacon when everything goes sideways.</p>
<h2 class="font-600 text-xl font-bold">What is WP Recovery Tools?</h2>
<p class="whitespace-pre-wrap break-words">It&#8217;s a standalone PHP script that helps you recover access and fix common WordPress issues without needing to access wp-admin or rely on working WordPress functions. Think of it as your emergency backdoor when the front door is jammed.</p>
<h2 class="font-600 text-xl font-bold">How to Use</h2>
<ol>
<li><a id="downloadLink" class="download-link" href="/tools/wp-recovery-tools/wp-recovery-tools.txt" download="wp-recovery-tools.php">Download the PHP script</a></li>
<li><em>(If not already, rename it from wp-recovery-tools.php to something like <strong>wp-recovery-tools_[random-string].php</strong>)</em></li>
<li>Upload it to your WordPress root directory (where <strong>/wp-config.php</strong> is)</li>
<li>Access it through your browser: Example: https://exmaple.com/wp-recovery-tools-0727248cdf916d5f.php</li>
<li>Delete it when you&#8217;re done!</li>
</ol>
<p><script>
let link = document.getElementById("downloadLink");
	const randomSuffix = Array.from(crypto.getRandomValues(new Uint8Array(8)))
		.map(b => b.toString(16).padStart(2, "0"))
		.join("");
	link.setAttribute("download", `wp-recovery-tools-${randomSuffix}.php`);
</script></p>
<p>&nbsp;</p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-scaled.jpg" rel="prettyPhoto[gallery-zlFb]"><img decoding="async" class="aligncenter wp-image-4402 size-full" src="https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-scaled.jpg" alt="" width="1175" height="2560" srcset="https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-scaled.jpg 1175w, https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-138x300.jpg 138w, https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-470x1024.jpg 470w, https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-768x1674.jpg 768w, https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-705x1536.jpg 705w, https://deepcorelabs.com/wp-content/uploads/2024/11/wp-recovery-tools-940x2048.jpg 940w" sizes="(max-width: 1175px) 100vw, 1175px" /></a></p>
<h2 class="font-600 text-xl font-bold">Key Features</h2>
<h3 class="font-600 text-lg font-bold">1. Recovery Mode Management</h3>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">Generate and manage recovery mode links</li>
<li class="whitespace-normal break-words">Clear all existing recovery links if needed</li>
<li class="whitespace-normal break-words">No need to mess with database queries or code snippets</li>
</ul>
<h3 class="font-600 text-lg font-bold">2. User Management</h3>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">View all WordPress users and their roles</li>
<li class="whitespace-normal break-words">Reset user passwords with a single click</li>
<li class="whitespace-normal break-words">Create new admin users when you&#8217;re locked out</li>
<li class="whitespace-normal break-words">Perfect for when you can&#8217;t access wp-admin or forgot credentials</li>
</ul>
<h3 class="font-600 text-lg font-bold">3. Plugin Management</h3>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">See all installed plugins and their status</li>
<li class="whitespace-normal break-words">Activate/deactivate plugins without accessing wp-admin</li>
<li class="whitespace-normal break-words">Super helpful when a plugin breaks your site or causes the white screen of death</li>
</ul>
<h3 class="font-600 text-lg font-bold">4. Theme Tools</h3>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">List all installed themes</li>
<li class="whitespace-normal break-words">Check current active theme</li>
<li class="whitespace-normal break-words">Switch themes when wp-admin is inaccessible</li>
<li class="whitespace-normal break-words">Great for fixing broken themes or theme-related issues</li>
</ul>
<h3 class="font-600 text-lg font-bold">5. Database &amp; System Tools</h3>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">Database repair and optimization</li>
<li class="whitespace-normal break-words">Clear cache and transients</li>
<li class="whitespace-normal break-words">Reset permalinks</li>
<li class="whitespace-normal break-words">View detailed system information</li>
</ul>
<h2 class="font-600 text-xl font-bold"> Security First</h2>
<p class="whitespace-pre-wrap break-words">The script has several security features built-in:</p>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">If no suffix found, forces you to rename the file with a unique suffix before using</li>
<li class="whitespace-normal break-words">Provides recovery links that expire and have limited use</li>
<li class="whitespace-normal break-words">Uses secure password generation</li>
<li class="whitespace-normal break-words">Implements proper SQL escaping and input validation</li>
</ul>
<h2 class="font-600 text-xl font-bold"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Important Warnings and Disclaimers</h2>
<p class="whitespace-pre-wrap break-words"><strong>PLEASE READ THIS CAREFULLY</strong></p>
<ol class="-mt-1 [li&gt;&amp;]:mt-2 list-decimal space-y-2 pl-8">
<li class="whitespace-normal break-words"><strong>Backup Your Site First!</strong>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">Seriously, don&#8217;t skip this. Take a full backup of your files and database before using any recovery tools</li>
<li class="whitespace-normal break-words">If something goes wrong, you&#8217;ll thank me later</li>
</ul>
</li>
<li class="whitespace-normal break-words"><strong>No Warranty</strong>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">This tool is provided as-is, without any warranty</li>
<li class="whitespace-normal break-words">While I use it regularly on production sites, your mileage may vary</li>
<li class="whitespace-normal break-words">Test it on a staging environment first if possible</li>
</ul>
</li>
<li class="whitespace-normal break-words"><strong>Security Considerations</strong>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">Don&#8217;t leave this file on your server after you&#8217;re done</li>
<li class="whitespace-normal break-words">Always make sure the file has random suffix (wp-recovery-tools-c60f10ea67c4db3d.php)</li>
<li class="whitespace-normal break-words">Keep the renamed filename secret &#8211; it&#8217;s your emergency access key</li>
</ul>
</li>
</ol>
<h2 class="font-600 text-xl font-bold">When to Use This Tool</h2>
<p class="whitespace-pre-wrap break-words">This toolkit is perfect for when:</p>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">You&#8217;re locked out of wp-admin</li>
<li class="whitespace-normal break-words">A plugin or theme update broke your site</li>
<li class="whitespace-normal break-words">You need to quickly add an admin user</li>
<li class="whitespace-normal break-words">WordPress recovery mode isn&#8217;t working</li>
<li class="whitespace-normal break-words">You need to deactivate a problematic plugin</li>
<li class="whitespace-normal break-words">Database needs quick repairs</li>
<li class="whitespace-normal break-words">You need system information for debugging</li>
</ul>
<h2 class="font-600 text-xl font-bold">When Not to Use</h2>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">Don&#8217;t use it for regular WordPress maintenance</li>
<li class="whitespace-normal break-words">Don&#8217;t leave it on your server permanently</li>
<li class="whitespace-normal break-words">Not meant for regular user management</li>
<li class="whitespace-normal break-words">Don&#8217;t use it if WordPress is working normally</li>
</ul>
<h2 class="font-600 text-xl font-bold">Pro Tips</h2>
<ol class="-mt-1 [li&gt;&amp;]:mt-2 list-decimal space-y-2 pl-8">
<li class="whitespace-normal break-words">Keep a copy in your emergency toolkit</li>
<li class="whitespace-normal break-words">Test it on a development site first to get familiar with the features</li>
<li class="whitespace-normal break-words">Document the filename you choose &#8211; you don&#8217;t want to forget it during an emergency</li>
<li class="whitespace-normal break-words">Consider creating a separate backup admin user while everything is working</li>
<li class="whitespace-normal break-words">Bookmark this article for future reference</li>
</ol>
<h2 class="font-600 text-xl font-bold">Technical Requirements</h2>
<ul class="-mt-1 [li&gt;&amp;]:mt-2 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words">WordPress 5.2 or higher</li>
<li class="whitespace-normal break-words">PHP 7.0 or higher</li>
<li class="whitespace-normal break-words">MySQL/MariaDB</li>
<li class="whitespace-normal break-words">File access to your WordPress root directory</li>
</ul>
<h2 class="font-600 text-xl font-bold">Final Thoughts</h2>
<p class="whitespace-pre-wrap break-words">As someone who manages multiple WordPress sites, having this tool in my arsenal has saved me countless hours of troubleshooting and recovery work. Just remember &#8211; with great power comes great responsibility. Use it wisely, keep it secure, and always, ALWAYS have backups!</p>
<p class="whitespace-pre-wrap break-words">Happy recovering!</p>
<hr />
<p class="whitespace-pre-wrap break-words"><em>P.S. I&#8217;m actively maintaining this tool and adding new features. If you have suggestions or run into any issues, feel free to reach out!</em></p>
<p class="whitespace-pre-wrap break-words"><em>Disclaimer: This tool is provided as-is without any warranties or guarantees. Always backup your site before using any recovery tools.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/wp-recovery-tools-enter-recovery-mode-without-email/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Flip/Mirror G-Code Online Tool</title>
		<link>https://deepcorelabs.com/flip-mirror-g-code-online-tool/</link>
					<comments>https://deepcorelabs.com/flip-mirror-g-code-online-tool/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Mon, 15 Jul 2024 00:14:55 +0000</pubDate>
				<category><![CDATA[3D]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4370</guid>

					<description><![CDATA[What is G-Code Flipper? G-Code Flipper is an online tool designed to help users flip or mirror their G-code files. It supports adjustments along the X-axis or Y-axis, ensuring prints...]]></description>
										<content:encoded><![CDATA[<p><a href="https://deepcorelabs.com/tools/gcode/flip/"><img loading="lazy" decoding="async" class="wp-image-4376 size-full aligncenter" src="https://deepcorelabs.com/wp-content/uploads/2024/07/2024-07-14_200523.jpg" alt="" width="1022" height="1208" srcset="https://deepcorelabs.com/wp-content/uploads/2024/07/2024-07-14_200523.jpg 1022w, https://deepcorelabs.com/wp-content/uploads/2024/07/2024-07-14_200523-254x300.jpg 254w, https://deepcorelabs.com/wp-content/uploads/2024/07/2024-07-14_200523-866x1024.jpg 866w, https://deepcorelabs.com/wp-content/uploads/2024/07/2024-07-14_200523-768x908.jpg 768w" sizes="auto, (max-width: 1022px) 100vw, 1022px" /></a></p>
<a class="nectar-button n-sc-button large accent-color regular-button"  href="https://deepcorelabs.com/tools/gcode/flip/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>Launch G-Code Flip/Mirror Tool Online</span></a>
<h2></h2>
<h2>What is G-Code Flipper?</h2>
<p>G-Code Flipper is an online tool designed to help users flip or mirror their G-code files. It supports adjustments along the X-axis or Y-axis, ensuring prints are correctly oriented.</p>
<h2>Key Features</h2>
<h3>File Upload</h3>
<p>Upload your G-code file directly into the tool. The tool will read and prepare the file for further processing.</p>
<h3>Flip Options</h3>
<p>The tool allows you to flip the G-code along the X-axis, Y-axis, or not flip at all. This helps in achieving the desired print orientation.</p>
<h3>Visual Representation</h3>
<p>G-Code Flipper provides a visual representation of the print before and after flipping. This ensures users can verify changes before proceeding with printing.</p>
<h3>Automatic Mesh Detection</h3>
<p>The tool automatically detects the start and end of the print mesh, accommodating different slicers:</p>
<ul>
<li><strong>Start Line</strong>: Identified by the first occurrence of <strong>;LAYER:0</strong> or <strong>;AFTER_LAYER_CHANGE  </strong></li>
<li><strong>End Line</strong>: Identified by the last occurrence of <strong>; stop printing object &#8230;</strong> or <strong>;TIME_ELAPSED: &#8230;<br />
(Cura and Orca Slicers)<br />
</strong></li>
</ul>
<p>If the tool fails to detect these lines, it prompts users to manually specify them.</p>
<h3>Download Adjusted Files</h3>
<p>After flipping, users can download the adjusted G-code file directly from the tool.</p>
<h2>How to Use G-Code Flipper</h2>
<ol>
<li><strong>Upload Your File</strong>: Select and upload your G-code file.</li>
<li><strong>Set Print Bed Dimensions</strong>: Input the dimensions of your print bed.</li>
<li><strong>Choose Flip Direction</strong>: Select whether to flip along the X-axis, Y-axis, or no flip.</li>
<li><strong>Review and Adjust</strong>: Check the visual representation of your print before and after flipping.</li>
<li><strong>Download Your File</strong>: Download the adjusted G-code file for printing.</li>
</ol>
<p>&nbsp;</p>
<a class="nectar-button n-sc-button large accent-color regular-button"  href="https://deepcorelabs.com/tools/gcode/flip/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>Launch G-Code Flip/Mirror Tool Online</span></a>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Full Disclaimer:</h3>
<p>The entire code for this tool, as well as the article above was written by Claude 3.5 Sonnet. The thumbnail generated by ChatGPT 4o <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> . It took 44 revisions to make the code work semi-properly. Use with caution. <strong>ABSOLUTELY NO WARRANTY.</strong> Good luck. Please let me know if you find bugs, have feedback or improvement suggestions.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/flip-mirror-g-code-online-tool/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Upgrade MariaDB on Plesk</title>
		<link>https://deepcorelabs.com/upgrade-mariadb-on-plesk/</link>
					<comments>https://deepcorelabs.com/upgrade-mariadb-on-plesk/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Mon, 22 Jan 2024 03:22:01 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Errors]]></category>
		<category><![CDATA[Plesk]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4319</guid>

					<description><![CDATA[The Problem: Unfortunately, Plesk doesn&#8217;t seem to have a way to upgrade MariaDB using the components in the control panel. Attempts to add this feature didn&#8217;t work for me either...]]></description>
										<content:encoded><![CDATA[<h2>The Problem:</h2>
<p>Unfortunately, Plesk doesn&#8217;t seem to have a way to upgrade MariaDB using the components in the control panel.</p>
<p><a href="https://docs.plesk.com/release-notes/obsidian/change-log/#plesk-18052">Attempts to add this feature</a> didn&#8217;t work for me either despite their claims <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-220859.png" rel="prettyPhoto[gallery-JlA1]"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4321" src="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-220859.png" alt="" width="984" height="449" srcset="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-220859.png 984w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-220859-300x137.png 300w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-220859-768x350.png 768w" sizes="auto, (max-width: 984px) 100vw, 984px" /></a></p>
<p><em>Hint: you can add an extension from the Plesk interface named Panel.ini Editor if you want to try your luck:</em></p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-221035.png" rel="prettyPhoto[gallery-JlA1]"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4322" src="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-221035.png" alt="" width="243" height="123" /></a></p>
<p>The following official article on Plesk doesn&#8217;t work either <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><a href="https://support.plesk.com/hc/en-us/articles/12388091703703">https://support.plesk.com/hc/en-us/articles/12388091703703</a></p>
<p>It results in an error like this:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="bash">The repository 'https://dlm.mariadb.com/repo/maxscale/latest/apt bionic Release' does not have a Release file.

Failed to add trusted package signing keys</pre>
<h2></h2>
<h2>The Solution:</h2>
<ol>
<li>First create backups of all databases as .sql dump:
<pre class="EnlighterJSRAW" data-enlighter-language="bash">MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -u admin --verbose --all-databases --routines --triggers &gt; /tmp/all-databases.sql</pre>
</li>
<li>Create a backup of all MySQL/MariaDB data (this is different from the above &#8212; it copies the entire current mysql/mariadb version executables):
<pre class="EnlighterJSRAW" data-enlighter-language="bash">cp -v -a /var/lib/mysql/ /var/lib/mysql_backup</pre>
</li>
</ol>
<p>&nbsp;</p>
<p>Then, follow this instead: <a href="https://mariadb.org/download/?t=repo-config&amp;d=18.04+LTS+%22bionic%22&amp;v=11.2&amp;r_m=knownhost">https://mariadb.org/download/?t=repo-config&amp;d=18.04+LTS+%22bionic%22&amp;v=11.2&amp;r_m=knownhost</a></p>
<p>Make sure you select your right OS version, desired MariaDB version, and a mirror closer to you is preferable.</p>
<p><strong>Hints:</strong><br />
Use <strong>cat /etc/*-release</strong> to find out your current OS name and version.</p>
<p>Use<strong> sudo nano /etc/apt/sources.list.d/mariadb.sources</strong> to create a file and paste the contents from second box. Ctrl+X to exit nano and Y to save file.</p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-215700.jpg" rel="prettyPhoto[gallery-JlA1]"><img loading="lazy" decoding="async" class="alignnone wp-image-4338 size-large" src="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-215700-1024x847.jpg" alt="" width="1024" height="847" srcset="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-215700-1024x847.jpg 1024w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-215700-300x248.jpg 300w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-215700-768x635.jpg 768w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-215700.jpg 1283w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>&nbsp;</p>
<p>In the end I finished with some commands from the first article that didn&#8217;t work initially. It&#8217;s supposed to add the newly installed MariaDB version to Plesk.</p>
<ol start="6">
<li>Start the MariaDB service:
<pre class="EnlighterJSRAW" data-enlighter-language="generic">systemctl start mariadb</pre>
</li>
<li>Upgrade MySQL/MariaDB databases:
<pre class="EnlighterJSRAW" data-enlighter-language="generic">MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysql_upgrade -uadmin</pre>
</li>
<li>Restart MySQL/MariaDB service:
<pre class="EnlighterJSRAW" data-enlighter-language="generic">systemctl restart mariadb</pre>
</li>
<li>Execute the following commands to update package version inside Plesk:
<pre class="EnlighterJSRAW" data-enlighter-language="generic">plesk bin service_node --update local
plesk sbin packagemng -sdf</pre>
<p>&nbsp;</li>
</ol>
<p>This finally worked&#8230;  after a few refreshes Plesk was showing MariaDB Version: 11.2 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Let me know how it goes. Good luck!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/upgrade-mariadb-on-plesk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Moodle &#8211; Environment error &#8216;It is required that you store all your data in Unicode format&#8217; [SOLVED]</title>
		<link>https://deepcorelabs.com/moodle-environment-error-it-is-required-that-you-store-all-your-data-in-unicode-format-solved/</link>
					<comments>https://deepcorelabs.com/moodle-environment-error-it-is-required-that-you-store-all-your-data-in-unicode-format-solved/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Mon, 22 Jan 2024 02:31:37 +0000</pubDate>
				<category><![CDATA[Errors]]></category>
		<category><![CDATA[Moodle]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4294</guid>

					<description><![CDATA[The Problem: It is required that you store all your data in Unicode format (UTF-8). New installations must be performed into databases that have their default character set as Unicode....]]></description>
										<content:encoded><![CDATA[<h2>The Problem:</h2>
<blockquote><p>It is required that you store all your data in Unicode format (UTF-8). New installations must be performed into databases that have their default character set as Unicode. If you are upgrading, you should perform the UTF-8 migration process (see the Admin page).</p>
<p>The current setup of MySQL or MariaDB is using &#8216;utf8&#8217;. This character set does not support four byte characters which include some emoji. Trying to use these characters will result in an error when updating a record, and any information being sent to the database will be lost Please consider changing your settings to &#8216;utf8mb4&#8217;. See the documentation for full details.</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194939.png" rel="prettyPhoto[gallery-Bl9e]"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-4295" src="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194939-847x1024.png" alt="" width="847" height="1024" srcset="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194939-847x1024.png 847w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194939-248x300.png 248w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194939-768x929.png 768w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194939.png 1031w" sizes="auto, (max-width: 847px) 100vw, 847px" /></a></p>
<h2>The Solution:</h2>
<p>Login to mysql/mariadb via SSH using root user or the user associated with moodle db:</p>
<p><em>(All code snippets below are <strong>editable</strong>)</em></p>
<pre class="EnlighterJSRAW" data-enlighter-language="mariadb">mysql -u moodle_user -p 123456

use moodle;

SHOW LOCAL VARIABLES LIKE 'character_set_database';

--# In my case I got this:

+------------------------+---------+
| Variable_name          |  Value  |
+------------------------+---------+
| character_set_database | utf8mb3 |
+------------------------+---------+
1 row in set (0.001 sec)

--# Run the following to change to utf8mb4

ALTER DATABASE moodle CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

--# Verify again to make sure the change took effect

SHOW LOCAL VARIABLES LIKE 'character_set_database';

+------------------------+---------+
| Variable_name          |  Value  |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+
1 row in set (0.001 sec)
</pre>
<p>&nbsp;</p>
<p>Make sure in your <strong>./config.php </strong><em>&#8216;dbcollation&#8217;</em> is set to<em> &#8216;utf8mb4_unicode_ci&#8217;</em></p>
<pre class="EnlighterJSRAW" data-enlighter-language="php">//...

$CFG-&gt;dboptions = array (
  'dbpersist' =&gt; 0,
  'dbport' =&gt; '',
  'dbsocket' =&gt; '',
  'dbcollation' =&gt; 'utf8mb4_unicode_ci',  // 'utf8_general_ci' doesn't work
);

//...</pre>
<p>&nbsp;</p>
<div>
<p>If the above doesn&#8217;t work or errors, you may need to add the following to my.cnf and/or mariadb.cnf</p>
</div>
<div>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">sudo nano /etc/mysql/my.cnf

#... append to the bottom

#Moodle required
[ client]
default-character-set = utf8mb4

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = true

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

[mysql]
default-character-set = utf8mb4</pre>
<p>&nbsp;</p>
<p>Restart mariadb:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">systemctl restart mariadb</pre>
<p>&nbsp;</p>
<p>Refresh the page and you should now be able to proceed with the installation:</p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194916.png" rel="prettyPhoto[gallery-Bl9e]"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-4297" src="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194916-899x1024.png" alt="" width="899" height="1024" srcset="https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194916-899x1024.png 899w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194916-263x300.png 263w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194916-768x875.png 768w, https://deepcorelabs.com/wp-content/uploads/2024/01/Screenshot-2024-01-21-194916.png 1079w" sizes="auto, (max-width: 899px) 100vw, 899px" /></a></p>
</div>
<p>Let me know how it goes or if you have other solutions. Good luck!</p>
<p>&nbsp;</p>
<p>P.S. Also, check my <a href="//deepcorelabs.com/upgrade-mariadb-on-plesk/">article on updating MariaDB since Moodle requires 10.5.6 or greater</a> I think. Ignore the part that is about Plesk if you&#8217;re not using it &#8212; the process is exactly the same except the last step 9. is not necessary on vanilla Ubuntu or CentOS.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/moodle-environment-error-it-is-required-that-you-store-all-your-data-in-unicode-format-solved/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>3D Touch (BL Touch Clone) Klipper fix for Ender 3</title>
		<link>https://deepcorelabs.com/3d-touch-bl-touch-clone-klipper-fix-for-ender-3/</link>
					<comments>https://deepcorelabs.com/3d-touch-bl-touch-clone-klipper-fix-for-ender-3/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Fri, 23 Sep 2022 06:21:44 +0000</pubDate>
				<category><![CDATA[3D]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4038</guid>

					<description><![CDATA[This is mostly for my own reference but it may help someone in need. The 3D Touch finally works after a lot of trial and error. Important settings: stow_on_each_sample: True...]]></description>
										<content:encoded><![CDATA[<p>This is mostly for my own reference but it may help someone in need. The <a href="https://www.amazon.com/gp/product/B09M9V8Y4Y/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;th=1">3D Touch</a> finally works after a lot of trial and error.</p>
<p>Important settings:</p>
<div><strong>stow_on_each_sample: <span style="color: #ffcc66;">True</span><br />
probe_with_touch_mode: <span style="color: #ffcc66;">False</span></strong></div>
<div>
<div><strong>pin_up_touch_mode_reports_triggered: <span style="color: #ffcc66;">False</span></strong></div>
</div>
<p>The last line is set to false even though the Klipper test reports true!<br />
You may need to try a combo of true and false of these settings.<br />
I&#8217;ve seen other threads set <strong>pin_up_touch_mode_reports_triggered </strong>to <strong>true</strong> to get it working depending on the model.<br />
<strong>stow_on_each_sample </strong>is slower but it doesn&#8217;t work as well otherwise.</p>
<p>Here&#8217;s what it looks like when NOT working:</p>
<div style="width: 1080px;" class="wp-video"><video class="wp-video-shortcode" id="video-4038-1" width="1080" height="608" preload="metadata" controls="controls"><source type="video/mp4" src="https://deepcorelabs.com/wp-content/uploads/2022/09/IMG_2126_x264.mp4?_=1" /><a href="https://deepcorelabs.com/wp-content/uploads/2022/09/IMG_2126_x264.mp4">https://deepcorelabs.com/wp-content/uploads/2022/09/IMG_2126_x264.mp4</a></video></div>
<h2 style="font-size:75%">Some keywords: 3D Touch not working, blinking fast. BL Touch Clone (3D Touch) fails calibration. Red Blink. Blue Blink.</h2>
<p>Here&#8217;s my entire <strong>printer.cfg  </strong>&#8212; keep in mind it has pressure advance, bed leveling, etc. custom settings.</p>
<div dir="ltr">
<div style="color: #cbccc6; background-color: #28282b; font-family: Consolas, 'Courier New', monospace; font-size: 16px; line-height: 22px; white-space: pre;">
<div><span style="color: #6c7886; font-style: italic;"># This file contains pin mappings for the stock 2020 Creality Ender 3</span></div>
<div><span style="color: #6c7886; font-style: italic;"># V2. To use this config, during &#8220;make menuconfig&#8221; select the</span></div>
<div><span style="color: #6c7886; font-style: italic;"># STM32F103 with a &#8220;28KiB bootloader&#8221; and serial (on USART1 PA10/PA9)</span></div>
<div><span style="color: #6c7886; font-style: italic;"># communication.</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;"># If you prefer a direct serial connection, in &#8220;make menuconfig&#8221;</span></div>
<div><span style="color: #6c7886; font-style: italic;"># select &#8220;Enable extra low-level configuration options&#8221; and select</span></div>
<div><span style="color: #6c7886; font-style: italic;"># serial (on USART3 PB11/PB10), which is broken out on the 10 pin IDC</span></div>
<div><span style="color: #6c7886; font-style: italic;"># cable used for the LCD module as follows:</span></div>
<div><span style="color: #6c7886; font-style: italic;"># 3: Tx, 4: Rx, 9: GND, 10: VCC</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;"># Flash this firmware by copying &#8220;out/klipper.bin&#8221; to a SD card and</span></div>
<div><span style="color: #6c7886; font-style: italic;"># turning on the printer with the card inserted. The firmware</span></div>
<div><span style="color: #6c7886; font-style: italic;"># filename must end in &#8220;.bin&#8221; and must not match the last filename</span></div>
<div><span style="color: #6c7886; font-style: italic;"># that was flashed.</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;"># See docs/Config_Reference.md for a description of parameters.</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">stepper_x</span>]</div>
<div>step_pin: <span style="color: #5ccfe6;">PC2</span></div>
<div>dir_pin: <span style="color: #5ccfe6;">PB9</span></div>
<div>enable_pin: <span style="color: #5ccfe6;">!PC3</span></div>
<div>microsteps: <span style="color: #ffcc66;">16</span></div>
<div>rotation_distance: <span style="color: #ffcc66;">40</span></div>
<div>endstop_pin: <span style="color: #5ccfe6;">^PA5</span></div>
<div>position_endstop: <span style="color: #ffcc66;">0</span></div>
<div>position_max: <span style="color: #ffcc66;">250</span></div>
<div>homing_speed: <span style="color: #ffcc66;">65</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">stepper_y</span>]</div>
<div>step_pin: <span style="color: #5ccfe6;">PB8</span></div>
<div>dir_pin: <span style="color: #5ccfe6;">PB7</span></div>
<div>enable_pin: <span style="color: #5ccfe6;">!PC3</span></div>
<div>microsteps: <span style="color: #ffcc66;">16</span></div>
<div>rotation_distance: <span style="color: #ffcc66;">40</span></div>
<div>endstop_pin: <span style="color: #5ccfe6;">^PA6</span></div>
<div>position_endstop: <span style="color: #ffcc66;">5</span> <span style="color: #6c7886; font-style: italic;">#End-stop is not at 0</span></div>
<div>position_max: <span style="color: #ffcc66;">235</span> <span style="color: #6c7886; font-style: italic;">#If endstop is 0 235 will grind</span></div>
<div>position_min: <span style="color: #ffcc66;">5</span> <span style="color: #6c7886; font-style: italic;">#Prevents moving to 0 and <span class="Lm ng" data-ddnwab="PR_15_0" aria-invalid="grammar">griding</span> in this direction</span></div>
<div>homing_speed: <span style="color: #ffcc66;">65</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">stepper_z</span>]</div>
<div>step_pin: <span style="color: #5ccfe6;">PB6</span></div>
<div>dir_pin: <span style="color: #5ccfe6;">!PB5</span></div>
<div>enable_pin: <span style="color: #5ccfe6;">!PC3</span></div>
<div>microsteps: <span style="color: #ffcc66;">16</span></div>
<div>rotation_distance: <span style="color: #ffcc66;">8</span></div>
<div><span style="color: #6c7886; font-style: italic;">#endstop_pin: ^PA7 #microswitch</span></div>
<div><span style="color: #6c7886; font-style: italic;">#position_endstop: 0.0</span></div>
<div>endstop_pin: probe:z_virtual_endstop</div>
<div>position_max: <span style="color: #ffcc66;">250</span></div>
<div>position_min: <span style="color: #ffcc66;">-3</span></div>
<div>homing_speed: <span style="color: #ffcc66;">30</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#################################</span></div>
<div><span style="color: #6c7886; font-style: italic;">########### LEVELING ############</span></div>
<div><span style="color: #6c7886; font-style: italic;">#################################</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">bltouch</span>]</div>
<div>sensor_pin: <span style="color: #5ccfe6;">^PB1</span></div>
<div>control_pin: <span style="color: #5ccfe6;">PB0</span></div>
<div><span style="color: #6c7886; font-style: italic;"># x_offset -44, y_offset -7 for CR Touch, verified by measurement (same as used in marlin also)</span></div>
<div>x_offset: <span style="color: #ffcc66;">-38.5</span></div>
<div>y_offset: <span style="color: #ffcc66;">-10.5</span></div>
<div>speed:<span style="color: #ffcc66;">60</span> <span style="color: #6c7886; font-style: italic;">#z-hop speed while probing &#8211; 30</span></div>
<div>stow_on_each_sample: <span style="color: #ffcc66;">true</span></div>
<div>z_offset = <span style="color: #ffcc66;">2.01</span> <span style="color: #6c7886; font-style: italic;">#2.10 #2.29 #Higher numbers = closer to bed</span></div>
<div>probe_with_touch_mode: <span style="color: #ffcc66;">False</span></div>
<div><span style="color: #6c7886; font-style: italic;">#pin_up_reports_not_triggered: False</span></div>
<div>pin_up_touch_mode_reports_triggered: <span style="color: #ffcc66;">False</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">bed_mesh</span>]</div>
<div>speed: <span style="color: #ffcc66;">350</span> <span style="color: #6c7886; font-style: italic;">#80</span></div>
<div>horizontal_move_z: <span style="color: #ffcc66;">3.5</span> <span style="color: #6c7886; font-style: italic;">#z-hop height while probing</span></div>
<div>mesh_min: <span style="color: #ffcc66;">20</span>, <span style="color: #ffcc66;">20</span></div>
<div>mesh_max: <span style="color: #ffcc66;">200</span>, <span style="color: #ffcc66;">200</span></div>
<div>probe_count: <span style="color: #ffcc66;">3,3</span></div>
<div>algorithm: bicubic</div>
<div>fade_start: <span style="color: #ffcc66;">1</span></div>
<div>fade_end: <span style="color: #ffcc66;">10</span></div>
<div>fade_target: <span style="color: #ffcc66;">0</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#Only used during homing</span></div>
<div>[<span style="color: #ffa759;">safe_z_home</span>]</div>
<div>home_xy_position: <span style="color: #ffcc66;">117.5,117.5</span> <span style="color: #6c7886; font-style: italic;"># Change coordinates to the center of your print bed</span></div>
<div><span style="color: #6c7886; font-style: italic;">#home_xy_position: 50,50</span></div>
<div>z_hop: <span style="color: #ffcc66;">5</span> <span style="color: #6c7886; font-style: italic;"># Move up mm</span></div>
<div>z_hop_speed: <span style="color: #ffcc66;">60</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#################################</span></div>
<div><span style="color: #6c7886; font-style: italic;">###########   OTHER  ############</span></div>
<div><span style="color: #6c7886; font-style: italic;">#################################</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">extruder</span>]</div>
<div>pressure_advance: <span style="color: #ffcc66;">0.66</span></div>
<div>pressure_advance_smooth_time: <span style="color: #ffcc66;">0.08</span> <span style="color: #6c7886; font-style: italic;">#Default 0.04</span></div>
<div>step_pin: <span style="color: #5ccfe6;">PB4</span></div>
<div>dir_pin: <span style="color: #5ccfe6;">PB3</span></div>
<div>enable_pin: <span style="color: #5ccfe6;">!PC3</span></div>
<div>microsteps: <span style="color: #ffcc66;">16</span></div>
<div><span style="color: #6c7886; font-style: italic;">#rotation_distance: 33.24 #34.406 #Default (200*16/93)</span></div>
<div>rotation_distance:  <span style="color: #ffcc66;">34.406</span> <span style="color: #6c7886; font-style: italic;">#Default (200*16/93)</span></div>
<div>nozzle_diameter: <span style="color: #ffcc66;">0.400</span></div>
<div>filament_diameter: <span style="color: #ffcc66;">1.750</span></div>
<div>heater_pin: <span style="color: #5ccfe6;">PA1</span></div>
<div>sensor_type: <span style="color: #5ccfe6;">EPCOS 100K B57560G104F</span></div>
<div>sensor_pin: <span style="color: #5ccfe6;">PC5</span></div>
<div>control: <span style="color: #5ccfe6;">pid</span></div>
<div><span style="color: #6c7886; font-style: italic;"># tuned for stock hardware with 215 degree Celsius target # PID_CALIBRATE HEATER=extruder TARGET=215</span></div>
<div>pid_Kp=<span style="color: #ffcc66;">28.938</span></div>
<div>pid_Ki=<span style="color: #ffcc66;">2.031</span></div>
<div>pid_Kd=<span style="color: #ffcc66;">103.092</span></div>
<div>min_temp: <span style="color: #ffcc66;">0</span></div>
<div>max_temp: <span style="color: #ffcc66;">250</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">input_shaper</span>]</div>
<div>shaper_freq_x: <span style="color: #ffcc66;">40.42</span></div>
<div>shaper_freq_y: <span style="color: #ffcc66;">33.90</span></div>
<div>shaper_type: mzv</div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">heater_bed</span>]</div>
<div>heater_pin: <span style="color: #5ccfe6;">PA2</span></div>
<div>sensor_type: <span style="color: #5ccfe6;">EPCOS 100K B57560G104F</span></div>
<div>sensor_pin: <span style="color: #5ccfe6;">PC4</span></div>
<div>control: <span style="color: #5ccfe6;">pid</span></div>
<div><span style="color: #6c7886; font-style: italic;"># tuned for stock hardware with 60 degree Celsius target # PID_CALIBRATE HEATER=heater_bed TARGET=60</span></div>
<div><span style="color: #6c7886; font-style: italic;">#pid_Kp: 54.027</span></div>
<div><span style="color: #6c7886; font-style: italic;">#pid_Ki: 0.770</span></div>
<div><span style="color: #6c7886; font-style: italic;">#Wpid_Kd: 970 #948.182</span></div>
<div>pid_Kp=<span style="color: #ffcc66;">67.455</span></div>
<div>pid_Ki=<span style="color: #ffcc66;">0.963</span></div>
<div>pid_Kd=<span style="color: #ffcc66;">1181.314</span></div>
<div>min_temp: <span style="color: #ffcc66;">0</span></div>
<div>max_temp: <span style="color: #ffcc66;">130</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">fan</span>]</div>
<div>pin: <span style="color: #5ccfe6;">PA0</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">mcu</span>]</div>
<div>serial: <span style="color: #5ccfe6;">/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0</span></div>
<div>restart_method: command</div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">printer</span>]</div>
<div>kinematics: cartesian</div>
<div>max_velocity: <span style="color: #ffcc66;">300</span></div>
<div>max_accel: <span style="color: #ffcc66;">4500</span> <span style="color: #6c7886; font-style: italic;">#3000 &#8211; Default</span></div>
<div>max_accel_to_decel: <span style="color: #ffcc66;">4500</span> <span style="color: #6c7886; font-style: italic;">#3000 &#8211; Default</span></div>
<div>max_z_velocity: <span style="color: #ffcc66;">5</span></div>
<div>max_z_accel: <span style="color: #ffcc66;">100</span></div>
<div>square_corner_velocity: <span style="color: #ffcc66;">5</span></div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">virtual_sdcard</span>]</div>
<div>path: ~/gcode_files</div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">display_status</span>]</div>
<p>&nbsp;</p>
<div>[<span style="color: #ffa759;">pause_resume</span>]</div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#PAUSE</span></div>
<div>[<span style="color: #ffa759;">gcode_macro PAUSE</span>]</div>
<div>description: Pause the actual running print</div>
<div>rename_existing: PAUSE_BASE</div>
<div><span style="color: #6c7886; font-style: italic;"># change this if you need more or less extrusion</span></div>
<div>variable_extrude: <span style="color: #ffcc66;">1.0</span></div>
<div><span class="LI ng" data-ddnwab="PR_16_0" aria-invalid="spelling">gcode</span>:</div>
<div>  <span style="color: #6c7886; font-style: italic;">##### read E from pause macro #####</span></div>
<div>  <span style="color: #bae67e;">{% set E = printer[&#8220;gcode_macro PAUSE&#8221;].extrude|float %}</span></div>
<div>  <span style="color: #6c7886; font-style: italic;">##### set park <span class="Lm ng" data-ddnwab="PR_17_0" aria-invalid="grammar">positon</span> for x and y #####</span></div>
<div>  <span style="color: #6c7886; font-style: italic;"># default is your max <span class="LI ng" data-ddnwab="PR_18_0" aria-invalid="spelling">posion</span> from your printer.cfg</span></div>
<div>  <span style="color: #bae67e;">{% set x_park = printer.toolhead.axis_maximum.x|float &#8211; 5.0 %}</span></div>
<div>  <span style="color: #bae67e;">{% set y_park = printer.toolhead.axis_maximum.y|float &#8211; 5.0 %}</span></div>
<div>  <span style="color: #6c7886; font-style: italic;">##### calculate save lift position #####</span></div>
<div>  <span style="color: #bae67e;">{% set max_z = printer.toolhead.axis_maximum.z|float %}</span></div>
<div>  <span style="color: #bae67e;">{% set act_z = printer.toolhead.position.z|float %}</span></div>
<div>  <span style="color: #bae67e;">{% if act_z &lt; (max_z &#8211; 2.0) %}</span></div>
<div>      <span style="color: #bae67e;">{% set z_safe = 2.0 %}</span></div>
<div>  <span style="color: #bae67e;">{% else %}</span></div>
<div>      <span style="color: #bae67e;">{% set z_safe = max_z &#8211; act_z %}</span></div>
<div>  <span style="color: #bae67e;">{% endif %}</span></div>
<div>  <span style="color: #6c7886; font-style: italic;">##### end of definitions #####</span></div>
<div>  PAUSE_BASE</div>
<div>  <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">91</span></div>
<div>  <span style="color: #bae67e;">{% if printer.extruder.can_extrude|lower == &#8216;true&#8217; %}</span></div>
<div>    <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">1</span> <span style="color: #d4bfff;">E</span>&#8211;<span style="color: #bae67e;">{E}</span> <span style="color: #d4bfff;">F</span><span style="color: #ffcc66;">2100</span></div>
<div>  <span style="color: #bae67e;">{% else %}</span></div>
<div>    <span style="color: #bae67e;">{action_respond_info(&#8220;Extruder not hot enough&#8221;)}</span></div>
<div>  <span style="color: #bae67e;">{% endif %}</span></div>
<div>  <span style="color: #bae67e;">{% if &#8220;xyz&#8221; in printer.toolhead.homed_axes %}</span></div>
<div>    <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">1</span> <span style="color: #d4bfff;">Z</span><span style="color: #bae67e;">{z_safe}</span> <span style="color: #d4bfff;">F</span><span style="color: #ffcc66;">900</span></div>
<div>    <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">90</span></div>
<div>    <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">1</span> <span style="color: #d4bfff;">X</span><span style="color: #bae67e;">{x_park}</span> <span style="color: #d4bfff;">Y</span><span style="color: #bae67e;">{y_park}</span> <span style="color: #d4bfff;">F</span><span style="color: #ffcc66;">6000</span></div>
<div>  <span style="color: #bae67e;">{% else %}</span></div>
<div>    <span style="color: #bae67e;">{action_respond_info(&#8220;Printer not homed&#8221;)}</span></div>
<div>  <span style="color: #bae67e;">{% endif %}</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#RESUME</span></div>
<div>[<span style="color: #ffa759;">gcode_macro RESUME</span>]</div>
<div>description: Resume the actual running print</div>
<div>rename_existing: RESUME_BASE</div>
<div>gcode:</div>
<div>  <span style="color: #6c7886; font-style: italic;">##### read E from pause macro #####</span></div>
<div>  <span style="color: #bae67e;">{% set E = printer[&#8220;gcode_macro PAUSE&#8221;].extrude|float %}</span></div>
<div>  <span style="color: #6c7886; font-style: italic;">#### get VELOCITY parameter if specified ####</span></div>
<div>  <span style="color: #bae67e;">{% if &#8216;VELOCITY&#8217; in params|upper %}</span></div>
<div>    <span style="color: #bae67e;">{% set get_params = (&#8216;VELOCITY=&#8217; + params.VELOCITY)  %}</span></div>
<div>  <span style="color: #bae67e;">{%else %}</span></div>
<div>    <span style="color: #bae67e;">{% set get_params = &#8220;&#8221; %}</span></div>
<div>  <span style="color: #bae67e;">{% endif %}</span></div>
<div>  <span style="color: #6c7886; font-style: italic;">##### end of definitions #####</span></div>
<div>  <span style="color: #bae67e;">{% if printer.extruder.can_extrude|lower == &#8216;true&#8217; %}</span></div>
<div>    <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">91</span></div>
<div>    <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">1</span> <span style="color: #d4bfff;">E</span><span style="color: #bae67e;">{E}</span> <span style="color: #d4bfff;">F</span><span style="color: #ffcc66;">2100</span></div>
<div>  <span style="color: #bae67e;">{% else %}</span></div>
<div>    <span style="color: #bae67e;">{action_respond_info(&#8220;Extruder not hot enough&#8221;)}</span></div>
<div>  <span style="color: #bae67e;">{% endif %}</span></div>
<div>  RESUME_BASE <span style="color: #bae67e;">{get_params}</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#CANCEL_PRINT</span></div>
<div>[<span style="color: #ffa759;">gcode_macro CANCEL_PRINT</span>]</div>
<div>description: Cancel the actual running print</div>
<div>rename_existing: CANCEL_PRINT_BASE</div>
<div><span class="LI ng" data-ddnwab="PR_19_0" aria-invalid="spelling">gcode</span>:</div>
<div>  <span style="color: #f29e74;">G</span><span style="color: #ffcc66;">1</span> <span style="color: #d4bfff;">Z</span><span style="color: #ffcc66;">10</span> <span style="color: #d4bfff;">F</span><span style="color: #ffcc66;">3600</span> <span style="color: #6c7886; font-style: italic;">#move up</span></div>
<div>  <span style="color: #f29e74;">M</span><span style="color: #ffcc66;">18</span> <span style="color: #6c7886; font-style: italic;">#disable steppers</span></div>
<div>  <span style="color: #6c7886; font-style: italic;">#TURN_OFF_HEATERS</span></div>
<div>  CANCEL_PRINT_BASE</div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#Disable Steppers</span></div>
<div>[<span style="color: #ffa759;">gcode_macro DISABLE_STEPPERS</span>]</div>
<div>gcode:</div>
<div>  <span style="color: #f29e74;">M</span><span style="color: #ffcc66;">18</span></div>
<p>&nbsp;</p>
<div><span style="color: #6c7886; font-style: italic;">#*# &lt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- SAVE_CONFIG &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*#</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# [bed_mesh default]</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# version = 1</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# points =</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*#     0.055000, 0.022500, 0.047500</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*#     0.002500, -0.047500, 0.010000</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*#     -0.022500, -0.055000, -0.082500</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# tension = 0.2</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# <span class="LI ng" data-ddnwab="PR_20_0" aria-invalid="spelling">min_x</span> = 20.0</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# algo = bicubic</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# <span class="LI ng" data-ddnwab="PR_21_0" aria-invalid="spelling">y_count</span> = 3</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# mesh_y_pps = 2</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# min_y = 20.0</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# x_count = 3</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# max_y = 200.0</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# mesh_x_pps = 2</span></div>
<div><span style="color: #6c7886; font-style: italic;">#*# max_x = 200.0</span></div>
<p>&nbsp;</p>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/3d-touch-bl-touch-clone-klipper-fix-for-ender-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://deepcorelabs.com/wp-content/uploads/2022/09/IMG_2126_x264.mp4" length="3095792" type="video/mp4" />

			</item>
		<item>
		<title>Restore Old Context Menu in Explorer &#8211; Windows 11</title>
		<link>https://deepcorelabs.com/restore-old-context-menu-in-explorer-windows-11/</link>
					<comments>https://deepcorelabs.com/restore-old-context-menu-in-explorer-windows-11/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Mon, 20 Jun 2022 19:10:27 +0000</pubDate>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 11]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=4018</guid>

					<description><![CDATA[Annoyed by the new right-click context menu for dummies in Windows 11 and having to constantly click &#8220;Show more Options&#8221;? Here&#8217;s how to remove the new windows explorer context menu...]]></description>
										<content:encoded><![CDATA[<p>Annoyed by the new right-click context menu for dummies in Windows 11 and having to constantly click &#8220;Show more Options&#8221;?</p>
<p>Here&#8217;s how to remove the new windows explorer context menu and revert to the old one.</p>
<h2>Easy method</h2>
<h3><span style="color: #3366ff;"><a style="color: #3366ff;" href="https://deepcorelabs.com/wp-content/uploads/2022/06/Restore_Explorer_Context_Menu.reg" download="">DOWNLOAD &#8211; Restore_Explorer_Context_Menu.reg</a></span></h3>
<p>Double-click the file to run it and press &#8216;Yes&#8217;</p>
<p>Test right-clicking anywhere right away.</p>
<p><span style="color: #ff6600;"><span style="color: #000000;">If it doesn&#8217;t work,</span> restart Windows Explorer </span>from Task Manager!</p>
<p><a href="https://deepcorelabs.com/wp-content/uploads/2022/06/restart-windows-explorer.jpg" rel="prettyPhoto[gallery-BUpP]"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4027" src="https://deepcorelabs.com/wp-content/uploads/2022/06/restart-windows-explorer.jpg" alt="" width="501" height="458" srcset="https://deepcorelabs.com/wp-content/uploads/2022/06/restart-windows-explorer.jpg 501w, https://deepcorelabs.com/wp-content/uploads/2022/06/restart-windows-explorer-300x274.jpg 300w" sizes="auto, (max-width: 501px) 100vw, 501px" /></a></p>
<p>That&#8217;s it! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&nbsp;</p>
<h2>Custom Method</h2>
<p>Alternatively, if you don&#8217;t trust running a random registry file off the internet you can create your own:</p>
<p>Create a text file anywhere and name it something like <strong>Restore_Explorer_Context_Menu.reg</strong></p>
<p>Edit it &gt; Paste the following below &gt; Save it &gt; Double-click it &gt; Click Yes! &gt; Restart Explorer</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32]
@=""

</pre>
<p>&nbsp;</p>
<p><em>This was based on the following article: </em></p>
<p><a href="https://www.techrepublic.com/article/how-to-restore-the-full-context-menu-to-file-explorer-in-windows-11/"><em>https://www.techrepublic.com/article/how-to-restore-the-full-context-menu-to-file-explorer-in-windows-11/</em></a></p>
<p><em>It&#8217;s the only method that worked for me. The Folder Options method with &#8220;Launch folder windows in a separate process&#8221; didn&#8217;t work for me </em><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&nbsp;</p>
<h3>Edit</h3>
<p>If for some strange reason you want to revert back to the default menu replace <strong>@=&#8221;&#8221;</strong> with <strong>@=-</strong> and run the reg again. (The minus will delete the entry)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/restore-old-context-menu-in-explorer-windows-11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Robotic Arm &#8211; 3D printed</title>
		<link>https://deepcorelabs.com/robotic-arm-3d-printed/</link>
					<comments>https://deepcorelabs.com/robotic-arm-3d-printed/#respond</comments>
		
		<dc:creator><![CDATA[Miro Hristov]]></dc:creator>
		<pubDate>Mon, 09 May 2022 23:25:51 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://deepcorelabs.com/?p=3971</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
		<div id="fws_69ccc3679e57e"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				<div class="vc_separator wpb_content_element vc_separator_align_center vc_sep_width_100 vc_sep_pos_align_center vc_sep_color_grey vc_separator-has-text" ><span class="vc_sep_holder vc_sep_holder_l"><span  class="vc_sep_line"></span></span><h4>Robotic Arm Test</h4><span class="vc_sep_holder vc_sep_holder_r"><span  class="vc_sep_line"></span></span>
</div>
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p><video controls="controls" width="100%" height="auto"><source src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2238_x264.mp4" type="video/mp4" /></video></p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69ccc3679f2fb"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				<div class="vc_separator wpb_content_element vc_separator_align_center vc_sep_width_100 vc_sep_pos_align_center vc_sep_color_grey vc_separator-has-text" ><span class="vc_sep_holder vc_sep_holder_l"><span  class="vc_sep_line"></span></span><h4>3D CAD Sketch and Process Images</h4><span class="vc_sep_holder vc_sep_holder_r"><span  class="vc_sep_line"></span></span>
</div>
	<div class="wpb_gallery wpb_content_element clearfix">
		<div class="wpb_wrapper"><div class="wpb_gallery_slidesimage_grid" data-onclick="link_image" data-interval="5">

	<div class="portfolio-wrap ">

			<span class="portfolio-loading"></span>

			<div class="row portfolio-items no-masonry " data-starting-filter="" data-gutter="default" data-masonry-type="default" data-bypass-cropping=""  data-ps="7" data-loading="default" data-categories-to-show="" data-col-num="cols-4">



	
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-600x400.jpg" width="600" height="400" alt="Clipboard_20220509" title="Clipboard_20220509" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-3-600x400.jpg" width="600" height="400" alt="Clipboard_20220509 (3)" title="Clipboard_20220509 (3)" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-3.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-2-600x400.jpg" width="600" height="400" alt="Clipboard_20220509 (2)" title="Clipboard_20220509 (2)" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-2.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-6-600x400.jpg" width="600" height="400" alt="Clipboard_20220509 (6)" title="Clipboard_20220509 (6)" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-6.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-5-600x400.jpg" width="600" height="400" alt="Clipboard_20220509 (5)" title="Clipboard_20220509 (5)" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-5.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-4-600x400.jpg" width="600" height="400" alt="Clipboard_20220509 (4)" title="Clipboard_20220509 (4)" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/Clipboard_20220509-4.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2167-scaled-600x400.jpg" width="600" height="400" alt="IMG_2167" title="IMG_2167" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2167-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy top-level-image " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2169-scaled-600x400.jpg" width="600" height="400" alt="IMG_2169" title="IMG_2169" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2169-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1696-scaled-600x400.jpg" width="600" height="400" alt="IMG_1696" title="IMG_1696" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1696-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1697-scaled-600x400.jpg" width="600" height="400" alt="IMG_1697" title="IMG_1697" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1697-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1768-scaled-600x400.jpg" width="600" height="400" alt="IMG_1768" title="IMG_1768" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1768-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1765-scaled-600x400.jpg" width="600" height="400" alt="IMG_1765" title="IMG_1765" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_1765-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2240-scaled-600x400.jpg" width="600" height="400" alt="IMG_2240" title="IMG_2240" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2240-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						
							<div class="col span_3  element" data-project-cat="" data-default-color="true" data-title-color="" data-subtitle-color="">

							<div class="inner-wrap animated" data-animation="none">

							
							<div class="work-item style-2">

								<img loading="lazy" decoding="async" class="skip-lazy " src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2241-scaled-600x400.jpg" width="600" height="400" alt="IMG_2241" title="IMG_2241" />
								<div class="work-info-bg"></div>
								<div class="work-info">


																	   			 <a href="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2241-scaled.jpg" class="pretty_photo"></a>
								   		
										<div class="vert-center">
																					</div><!--/vert-center-->

									

								</div>
							</div><!--work-item-->

						

						</div></div> 
						</div></div></div>
		</div> 
	</div> <div class="vc_separator wpb_content_element vc_separator_align_center vc_sep_width_100 vc_sep_pos_align_center vc_sep_color_grey vc_separator-has-text" ><span class="vc_sep_holder vc_sep_holder_l"><span  class="vc_sep_line"></span></span><h4>3D Printing</h4><span class="vc_sep_holder vc_sep_holder_r"><span  class="vc_sep_line"></span></span>
</div>
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p><video controls="controls" width="100%" height="auto"><source src="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2084_x264.mp4" type="video/mp4" /></video></p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69ccc367a4045"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				<div class="vc_separator wpb_content_element vc_separator_align_center vc_sep_width_100 vc_sep_pos_align_center vc_sep_color_grey vc_separator-has-text" ><span class="vc_sep_holder vc_sep_holder_l"><span  class="vc_sep_line"></span></span><h4>Autodesk Fusion 360 Preview</h4><span class="vc_sep_holder vc_sep_holder_r"><span  class="vc_sep_line"></span></span>
</div>
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p><video controls="controls" width="100%" height="auto"><source src="https://deepcorelabs.com/wp-content/uploads/2022/05/2022-05-09-19-45-38.mp4" type="video/mp4" /></video></p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://deepcorelabs.com/robotic-arm-3d-printed/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2238_x264.mp4" length="5440074" type="video/mp4" />
<enclosure url="https://deepcorelabs.com/wp-content/uploads/2022/05/IMG_2084_x264.mp4" length="29704229" type="video/mp4" />
<enclosure url="https://deepcorelabs.com/wp-content/uploads/2022/05/2022-05-09-19-45-38.mp4" length="18193617" type="video/mp4" />

			</item>
	</channel>
</rss>
