

Behold, the shakey box frame
Added a second box, need clean up the tubes.
Built a frame so they could sit separately from the printer itself.


Added a second box, need clean up the tubes.
Built a frame so they could sit separately from the printer itself.
Hey, so I’ve checked all the infill settings in Qidi slicer and I was trying to find the infil with most constructional stability.
Bees make honeycomb, so I think the 3d honeycomb would be the best in terms of stability is that correct or is there a better sparse infill pattern?
Also wanted to ask which of the patterns have the best stability/mass ratio?
Last friday i put my 3d printer on duty and on the morning next day print was finished but i couldnt connect to fluidd app? I write ip address in my browser and i couldnt connect to it. I liked to check on my camery on my phone. When i came back from work i tried to put print new project but i couldnt connect by orca slicer or qidi app. I realised that IP changed on my QIDI so i changed it on my app but it wont connect either. I dont know what i should do. Im noob if we are talking about IP internet etc. I make sure that 3d print is connect with the same WIFI and computer or my phone. Here is the picture i took. I also noticed that even QR Code wont show up in Qidi link option. In the QIDI app when i test connection with this IP i get Error 28.
So i wonder what`s going on
Pretty self-explanatory the bottom left corner of my Q2 bed cannot be made level. I have manually twisted the bar on the left that the build plate lifts and lowers on, but then when going to the next step in the manual leveling the plate goes back to the same as it was before. To give an idea when I get the Top left, top right, and bottom right leveled so they provide slight friction on a piece of paper the bottom left corner has about 1/4 inch between the build plate and the nozzle. Loosening the nut on the screw below the left bottom corner does not lift it high enough, because after about 1-2 full turns the nut is able to be removed by hand and the corner is still about 1/4 inch away from the nozzle.
What a huge upgrade. I have been running a Anycubic Kobra3 V1 for a year and have finally got my second printer and I must say this is a huge upgrade. The K3 is a great, cheap way to figure out if this is something I want to do. Now I have designed some products that are prone to warping on a bed slinger so I got this beast. 16hr print and zero issues and no warping. Now I have an excuse to get some of the more industrial filaments and really push and see what I and it can do. Looking forward to this adventure
Printing some parts for a customer and got the good ol wrapping error since I'm using a cardboard spool. Saved it by moving the spool over to my space pi dryer and I'm letting the box continue to feed it.
I’ve been trying to print the famous twisty fidget ball. I’m seeing corner curling and other artifacts. I’ve included a picture as an example. I’ve printed and installed a new fan duct to try and resolve the problems. My better fan is still out for delivery.
Q2 printing Sunlu silk pla rainbow temp and flow calibrated on orca.
Anyone have suggestions.
Thanks everyone.
Been pulling my hair out over this for a while. Every time I clicked the Device tab in OrcaSlicer to monitor my Qidi Plus 4, the whole app would segfault and die. Tried every environment variable people suggest online (WEBKIT_DISABLE_COMPOSITING_MODE, LIBGL_ALWAYS_SOFTWARE, etc.), nothing worked.
After a lot of digging I found the actual root cause: it's not a driver issue, it's the version of Fluidd that ships with Qidi's firmware. It uses an outdated library called vue-resize that corrupts memory in the WebKit browser embedded in OrcaSlicer. Newer versions of Fluidd already fixed this, but not the one shipped with Qidi firmware.
So I wrote a small workaround: a tiny C file that you can compile and inject via LD_PRELOAD. Save this as webkit_vueresize_fix.c, then:
gcc -shared -std=c99 -fPIC -O2 -o webkit_vueresize_fix.so webkit_vueresize_fix.c -ldl
LD_PRELOAD=./webkit_vueresize_fix.so orca-slicer
That's it.
If you want to make it permanent so you don't have to type it every time, copy the .so somewhere and add this line to /usr/bin/orca-slicer just before the final exec:
export LD_PRELOAD="/usr/lib/webkit_vueresize_fix.so${LD_PRELOAD:+:$LD_PRELOAD}"
The C code:
/*
* webkit_vueresize_fix.c
*
* LD_PRELOAD hook for OrcaSlicer on Linux.
* Intercepts webkit_web_view_load_uri and injects a user script that
* replaces the broken vue-resize <object> hack with native ResizeObserver,
* preventing the WebKitGTK crash on Fluidd < v1.37.0.
*
* Build:
* gcc -shared -fPIC -o webkit_vueresize_fix.so webkit_vueresize_fix.c \
* -ldl $(pkg-config --libs glib-2.0) -I$(pkg-config --cflags glib-2.0)
*
* Usage:
* LD_PRELOAD=/path/to/webkit_vueresize_fix.so orca-slicer
*/
#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* --- Minimal webkit2gtk type stubs (no headers needed) --- */
typedef void* WebKitWebView;
/* --- The patch script ---
* Replaces vue-resize's broken <object>-based ResizeObserver with a shim
* that uses the native ResizeObserver API, which WebKitGTK supports correctly.
* This runs at document-start, before any framework code executes.
*/
static const char *PATCH_SCRIPT =
"(function() {"
" 'use strict';"
/* Block creation of <object> elements used by vue-resize for size detection.
* vue-resize injects a hidden <object> with type='text/html' to detect
* container resizes — this is the specific hack that triggers the WebKitGTK
* crash (heap corruption in AcceleratedBackingStore). */
" var _origCreateElement = document.createElement.bind(document);"
" document.createElement = function(tag) {"
" if (typeof tag === 'string' && tag.toLowerCase() === 'object') {"
" var el = _origCreateElement('div');"
/* Mark it so we can detect it if needed */
" el.setAttribute('data-vr-shim', '1');"
" Object.defineProperty(el, 'contentDocument', { get: function() { return null; } });"
" Object.defineProperty(el, 'contentWindow', { get: function() { return null; } });"
/* Swallow the load event that vue-resize listens to */
" var _origAddEL = el.addEventListener.bind(el);"
" el.addEventListener = function(type, fn, opts) {"
" if (type === 'load') return;"
" return _origAddEL(type, fn, opts);"
" };"
" return el;"
" }"
" return _origCreateElement(tag);"
" };"
/* Additionally, patch the vue-resize module directly if it exposes itself.
* vue-resize registers a Vue plugin; we stub addResizeListener/removeResizeListener
* with a native ResizeObserver-based implementation. */
" var _roMap = typeof WeakMap !== 'undefined' ? new WeakMap() : null;"
" function _addResizeListener(el, fn) {"
" if (!el || !fn) return;"
" if (typeof ResizeObserver !== 'undefined' && _roMap) {"
" if (!_roMap.has(el)) {"
" var observers = [];"
" _roMap.set(el, observers);"
" }"
" var ro = new ResizeObserver(function(entries) {"
" fn();"
" });"
" ro.observe(el);"
" _roMap.get(el).push({ fn: fn, ro: ro });"
" }"
" }"
" function _removeResizeListener(el, fn) {"
" if (!el || !_roMap || !_roMap.has(el)) return;"
" var observers = _roMap.get(el);"
" for (var i = observers.length - 1; i >= 0; i--) {"
" if (observers[i].fn === fn) {"
" observers[i].ro.disconnect();"
" observers.splice(i, 1);"
" }"
" }"
" }"
/* Patch window so that when vue-resize module is evaluated it picks up our impl */
" window.__vueResizePatch = {"
" addResizeListener: _addResizeListener,"
" removeResizeListener: _removeResizeListener"
" };"
/* Hook module system: intercept require/define for 'vue-resize' */
" var _defineOrig = typeof define !== 'undefined' ? define : null;"
" Object.defineProperty(window, 'define', {"
" configurable: true,"
" get: function() { return _defineOrig; },"
" set: function(fn) { _defineOrig = fn; }"
" });"
/* Final safety net: override Object.prototype to catch vue-resize install */
" console.log('[vr-fix] vue-resize WebKitGTK patch active');"
"})();";
/* --- webkit2gtk function pointer types --- */
typedef void* WebKitUserContentManager;
typedef void* WebKitUserScript;
typedef int WebKitUserContentInjectedFrames;
typedef int WebKitUserScriptInjectionTime;
#define WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES 0
#define WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START 0
typedef WebKitUserContentManager* (*wv_get_ucm_t)(WebKitWebView*);
typedef WebKitUserScript* (*us_new_t)(const char*,
WebKitUserContentInjectedFrames,
WebKitUserScriptInjectionTime,
const char* const*,
const char* const*);
typedef void (*ucm_add_script_t)(WebKitUserContentManager*,
WebKitUserScript*);
typedef void (*us_unref_t)(WebKitUserScript*);
typedef void (*load_uri_orig_t)(WebKitWebView*, const char*);
static load_uri_orig_t real_load_uri = NULL;
/* Resolved once, reused for all calls */
static wv_get_ucm_t sym_get_ucm = NULL;
static us_new_t sym_script_new = NULL;
static ucm_add_script_t sym_add_script = NULL;
static us_unref_t sym_us_unref = NULL;
#define DLSYM_FN(dst, sym) do { \
void *_p = dlsym(RTLD_DEFAULT, sym); \
memcpy(&(dst), &_p, sizeof(_p)); \
} while(0)
#define DLSYM_FN_NEXT(dst, sym) do { \
void *_p = dlsym(RTLD_NEXT, sym); \
memcpy(&(dst), &_p, sizeof(_p)); \
} while(0)
static void resolve_symbols(void) {
if (sym_get_ucm) return;
DLSYM_FN(sym_get_ucm, "webkit_web_view_get_user_content_manager");
DLSYM_FN(sym_script_new, "webkit_user_script_new");
DLSYM_FN(sym_add_script, "webkit_user_content_manager_add_script");
DLSYM_FN(sym_us_unref, "webkit_user_script_unref");
if (!sym_get_ucm || !sym_script_new || !sym_add_script || !sym_us_unref)
fprintf(stderr, "[vr-fix] WARNING: could not resolve webkit UCM symbols\n");
}
/*
* Inject the patch script into a WebView's UserContentManager.
* Must be called BEFORE load_uri — ideally right after webkit_web_view_new.
*/
static void inject_script(WebKitWebView *wv) {
resolve_symbols();
if (!sym_get_ucm || !sym_script_new || !sym_add_script || !sym_us_unref)
return;
WebKitUserContentManager *ucm = sym_get_ucm(wv);
if (!ucm) {
fprintf(stderr, "[vr-fix] WARNING: null UserContentManager\n");
return;
}
WebKitUserScript *script = sym_script_new(
PATCH_SCRIPT,
WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES,
WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START,
NULL, /* whitelist: NULL = all URIs */
NULL /* blacklist: none */
);
if (!script) {
fprintf(stderr, "[vr-fix] WARNING: webkit_user_script_new returned NULL\n");
return;
}
sym_add_script(ucm, script);
sym_us_unref(script);
fprintf(stderr, "[vr-fix] patch injected into WebView %p\n", (void*)wv);
}
/* --- Hook webkit_web_view_load_uri ---
* Inject the patch script on EVERY load_uri call, for every WebView.
* The script is idempotent: it overwrites the same globals each time
* (runs at document-start so duplicate injection is harmless).
* This avoids hooking webkit_web_view_new whose signature varies.
*/
void webkit_web_view_load_uri(WebKitWebView *web_view, const char *uri) {
if (!real_load_uri)
DLSYM_FN_NEXT(real_load_uri, "webkit_web_view_load_uri");
fprintf(stderr, "[vr-fix] load_uri %p -> %s\n", (void*)web_view, uri ? uri : "(null)");
if (web_view)
inject_script(web_view);
real_load_uri(web_view, uri);
}
Tested on Arch Linux, AMD Radeon Pro WX 7100, Wayland. Works on my Qidi Plus 4: Device tab loads Fluidd without any crash. Hope it helps someone else too!
This time a made an angle piece to attach the G29 wheel base on it, to drive my ATSgame on a horizontal position like a real truck instead of the racing position the G29 originally is made for.
I know people here looking for issues to solve, fix bad prints just looking the pics. But I like to show good prints, because life goes a lot easy when we are positive. People who have issues like I have sometimes, find good answers here, but on my case I like to show good prints because the impression when people only show issues here, is that printers are bad, what is the otherwise Qidi printers are very good printers.
I'm struggling with my first layer - been through support for an initial issue with the bed sensors, now I'm seeing these artifacts on my larger prints. The Z-offset seems ok - 99% of the first layer is good, but it seems like there are spots on my platform that have divots or something that are causing these holes in the initial layers of the print.
Anyone ever experience this before - is this a symptom of a bad platform?
Printer is melting and extruder won’t thread a nozzle anymore. It looks like it’s eroding . 1 month in. Ordered 4/13/26
Been mainly printing at 300-310c.
Qidi Help Desk been MIA.
Any ideas?
Im wanting to buy a reliable 3d printer that's plug in and play I have a low budget which one should I choose some people say qidi printers have electric shocked some people is this true and the printers I have been looking at is bambu lab p1s and qidi q2c and if one of them is not plug in and play how much effort do you need to put into it to make it plug in and play (also mention what needs to be modded)
I’m looking to upgrade my current 3D printer, and was looking at the Creality K2 and K2 Plus printers. I’ve also seen the Plus4 recommended, but seems to be less information out there about it.
I’m mostly looking for something that can print PLA, PETG, and TPU reliably, minimum print volume of 256mm cubed, and preferably something that makes high quality prints.
Would you recommend the Plus4 over the K2 or K2 Plus?
As stated in title the extruder on my Q2 will not allow filament through. It is not clogged nor are there pieces of filament on the gears it is a brand new extruder that came directly from Qidi. I placed my old extruder back on and same issue. I say old, but it is only 2 months old. Had to replace because fixing a clog I dropped the gear and the metal post got lost. Anyway can anyone please help before I just sit this thing ablaze
I use Orca and sort of hate that I can't remap filaments when I go to print a file a second time. I like having the option to choose which filaments that are currently on the printer, map to the filaments present in the file. You can't do that from an Orca generated gcode file with Qidi because of how they handle filament mapping via qidiclient.
So I made a tool to take an Orca generate gcode file to a Qidi 3mf file! It fixes thumbnails not showing up, it allows filament remapping, and also will allow you to select the things you expect like polar cooler, timelapse, and bed leveling when starting prints from the screen.
I only own a Max 4 so it might work on a Q2, but ymmv.
You could add this as a post processor in Orca so the 3mf file is ready for you to send to the printer. I also think I might be able to have a small service sit on the printer watching for new gcode files and run the same script automatically.
Let me know what you think!
Just curious if anyone has printed and used the bed adjust key on their Max4?
I didn’t have enough clearance on the old bed or new one. Has anyone else experienced this?
I’m considering getting a Qidi Q2 and wanted some opinions from people who already have one.
I previously owned a Q1 Pro and honestly loved it. It produced really solid prints and I had a great experience with it overall.
After that I switched to a Core One because I planned on putting INDX on it, but I realized I really can’t live without a heated chamber anymore. That’s why I’m now thinking about getting a Q2 instead, together with the Qidi Box for the occasional MMU/multicolor print. Most of my prints would still be single-color though.
The thing is, I’ve heard quite a few mixed things about the Qidi Box. Some people seem to have no issues at all, while others mention filament path friction, jams, sensor issues, and general reliability problems.
So now I’m also wondering if it would maybe make more sense to just get the Q2 by itself and later put something like a BTT Vivid on it instead.
So I’m wondering:
Would love to hear experiences from long-term users, especially people printing engineering materials.
Printer is melting and extruder won’t thread a nozzle anymore. It looks like it’s eroding . 1 month in. Ordered 4/13/26
Been mainly printing at 300-310c
Any ideas?
Hi everyone,
I’m using a QIDI Q2 and ran into an issue today.
During a print, filament built up around the nozzle (likely failed adhesion). While removing the filament blob, a firmware error suddenly appeared.
After that, I removed almost all of the stuck filament and tried:
Now the printer won’t boot properly.
The strange part is that the nozzle is completely cold, but the screen shows around 360°C.
I also noticed that one of the wires near the hotend/nozzle area may have come loose or detached while removing the filament.
Has anyone experienced this before?
Does this sound like a thermistor/wiring failure, or could it be something else?
Would this usually require replacing the thermistor/hotend assembly?
Photos attached. Any help would be appreciated.
Recently started having an issues with Qidi studio were the first few layers come out atrocious. But just tested orca with a benchy and it printed perfectly. I also just uninstalled Qidi studio and deleted all folders to do a clean install.
The black half circle is a failed 1st layer. So is the benchy. The current benchy printing I had to raise z-offset +.015 to save it in 1-3 layers and once it looked like it stabilized lowered z back to .0 and the rest of the print is looking great.
Anyone have any idea why suddenly it suddenly changed to print like this.
Also, bed is leveled and trammed. Filament is dried.