{"id":134,"date":"2026-03-31T17:03:58","date_gmt":"2026-03-31T17:03:58","guid":{"rendered":"https:\/\/www.e5m-ck.com\/?page_id=134"},"modified":"2026-04-02T07:33:02","modified_gmt":"2026-04-02T06:33:02","slug":"how-to-take-screenshots-of-the-nebula-pad-screen-creality-ender-5-max","status":"publish","type":"page","link":"https:\/\/www.e5m-ck.com\/?page_id=134","title":{"rendered":"How to Take Screenshots of the Nebula Pad Screen \u2014 Creality Ender 5 Max"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"134\" class=\"elementor elementor-134\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-73e7535 e-flex e-con-boxed e-con e-parent\" data-id=\"73e7535\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1f481a3 elementor-widget elementor-widget-text-editor\" data-id=\"1f481a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<div style=\"background: #f0f4ff; border-left: 4px solid #3a5fc8; padding: 16px 20px; border-radius: 4px;\">The Nebula Pad has no built-in screenshot function. This guide installs a Klipper macro that captures the screen as a PNG file, accessible directly from your web interface (Fluidd or Mainsail). Two options: automatic install via SSH in one command, or manual install for those who want to understand every line.<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8426e5f e-flex e-con-boxed e-con e-parent\" data-id=\"8426e5f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-391c024 elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"391c024\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:[],&quot;no_headings_message&quot;:&quot;No headings were found on this page.&quot;,&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;marker_view&quot;:&quot;numbers&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tTable of Contents\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__391c024\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__391c024\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__391c024\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d8be443 e-flex e-con-boxed e-con e-parent\" data-id=\"d8be443\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e88c627 elementor-widget elementor-widget-text-editor\" data-id=\"e88c627\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>\u26a0\ufe0f Disclaimer<\/h2>\n<p>The modifications described in this tutorial involve editing Klipper configuration files and adding a plugin to the Nebula Pad.<\/p>\n<p>By following this tutorial, you acknowledge that:<\/p>\n<ul>\n  <li>You perform all modifications <strong>at your own risk<\/strong><\/li>\n  <li>The author accepts <strong>no responsibility<\/strong> for any damage, data loss, or malfunction resulting from the application of this guide<\/li>\n  <li>This tutorial is provided <strong>as-is<\/strong>, without any warranty of any kind<\/li>\n  <li>These modifications <strong>may void your warranty<\/strong><\/li>\n  <li>A misconfiguration in <code>printer.cfg<\/code> or an incompatible plugin <strong>can cause Klipper to crash and prevent your printer from starting<\/strong> \u2014 always verify your configuration after any change<\/li>\n  <li>This guide was tested on the <strong>Creality Ender 5 Max<\/strong> \u2014 results may vary on other printers<\/li>\n<\/ul>\n<div style=\"background:#fff3cd; border-left:4px solid #f0a500; padding:14px 18px; border-radius:4px;\">\n  The author cannot be held liable for any direct, indirect, incidental or consequential damages arising from the use or misuse of the information provided in this tutorial.\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e100480 e-flex e-con-boxed e-con e-parent\" data-id=\"e100480\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b1d64ed elementor-widget elementor-widget-text-editor\" data-id=\"b1d64ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>Why Do This?<\/h2>\n<p>The Nebula Pad has <strong>no native screenshot function<\/strong> \u2014 there are no physical buttons, and the standard Android screenshot commands (<code>screencap<\/code>, ADB) are not available on this device.<\/p>\n<p>This tutorial installs a <strong>Klipper macro<\/strong> called <code>SCREENSHOT<\/code> that:<\/p>\n<ol>\n  <li>Reads the raw framebuffer (<code>\/dev\/fb0<\/code>) \u2014 the direct video memory of the Nebula Pad screen<\/li>\n  <li>Converts it to a properly oriented PNG file using <code>ffmpeg<\/code><\/li>\n  <li>Saves it to the <code>gcodes\/<\/code> folder, making it instantly accessible from your web interface (Fluidd or Mainsail)<\/li>\n<\/ol>\n\n<div style=\"background:#f0fff4; border-left:4px solid #2d8a4e; padding:14px 18px; border-radius:4px; margin:16px 0;\">\n  \u2705 <code>ffmpeg<\/code> is already pre-installed on the Nebula Pad by Creality \u2014 no additional installation is required for it.\n<\/div>\n\n<p><strong>What gets installed:<\/strong><\/p>\n<ul>\n  <li><strong><code>gcode_shell_command.py<\/code><\/strong> \u2014 a Klipper plugin that allows macros to run Linux shell commands. Without this, Klipper macros cannot execute system commands like <code>ffmpeg<\/code>.<\/li>\n  <li><strong><code>screenshot.cfg<\/code><\/strong> \u2014 a Klipper configuration file containing the <code>SCREENSHOT<\/code> macro and its shell command<\/li>\n  <li><strong>An include line<\/strong> in <code>printer.cfg<\/code> \u2014 tells Klipper to load <code>screenshot.cfg<\/code> at startup<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8dcc386 e-flex e-con-boxed e-con e-parent\" data-id=\"8dcc386\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-070c86d elementor-widget elementor-widget-text-editor\" data-id=\"070c86d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>Common Prerequisites<\/h2>\n<p>Both options require:<\/p>\n<ul>\n  <li>Root access enabled on the Nebula Pad <em>(see our <a href=\"#\">Root Access guide<\/a>)<\/em><\/li>\n  <li>A PC connected to the same Wi-Fi network as the printer<\/li>\n  <li>The IP address of your Nebula Pad (Settings \u2192 Network on the pad)<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e765cde e-flex e-con-boxed e-con e-parent\" data-id=\"e765cde\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-16ac4c6 elementor-widget elementor-widget-text-editor\" data-id=\"16ac4c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>Option A \u2014 Automatic Install via SSH<\/h2>\n<p><strong>Choose this option if<\/strong> you want a fast, one-command installation with no manual steps.<\/p>\n\n<h3>Additional Prerequisites<\/h3>\n<ul>\n  <li>PowerShell (Windows) or Terminal (macOS\/Linux)<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6c73109 e-flex e-con-boxed e-con e-parent\" data-id=\"6c73109\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-19d4015 elementor-widget elementor-widget-text-editor\" data-id=\"19d4015\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Step 1 \u2014 Connect via SSH<\/h3>\n<strong>On Windows:<\/strong> Click <strong>Start<\/strong>, type <strong>PowerShell<\/strong>, and open it.\n<strong>On macOS\/Linux:<\/strong> Open <strong>Terminal<\/strong>.\n\nType the following command and press <strong>Enter<\/strong>:\n<pre style=\"background: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 6px; overflow-x: auto; font-size: 0.9em;\"><code>ssh root@192.168.1.XXX<\/code><\/pre>\nReplace <code>192.168.1.XXX<\/code> with your Nebula Pad&#8217;s IP address.\n<div style=\"background: #fff3cd; border-left: 4px solid #f0a500; padding: 14px 18px; border-radius: 4px; margin: 16px 0;\">\u26a0\ufe0f When prompted for the password, <strong>no characters will appear on screen<\/strong> \u2014 this is normal Linux security behavior. Type it and press <strong>Enter<\/strong>.<\/div>\nIf you see a prompt like <code>root@Ender-5 \/root [#]<\/code>, you are connected successfully.\n<figure style=\"margin: 16px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 6px;\" src=\"https:\/\/www.e5m-ck.com\/wp-content\/uploads\/2026\/03\/ssh_connection_successful.jpg\" alt=\"PowerShell showing successful SSH connection\" \/><figcaption style=\"font-style: italic; color: #666; margin-top: 8px;\">PowerShell showing a successful SSH connection to the Nebula Pad.<\/figcaption><\/figure>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4ac6be8 e-flex e-con-boxed e-con e-parent\" data-id=\"4ac6be8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4acb67c elementor-widget elementor-widget-text-editor\" data-id=\"4acb67c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Step 2 \u2014 Run the Installer<\/h3>\nCopy and paste the following command and press <strong>Enter<\/strong>:\n<pre style=\"background: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 6px; overflow-x: auto; font-size: 0.9em;\"><code>wget -O \/tmp\/install.sh https:\/\/www.e5m-ck.com\/wp-content\/uploads\/e5mdoc_ck_nebula_screenshot_install.sh &amp;&amp; sh \/tmp\/install.sh<\/code><\/pre>\nThe installer will automatically:\n<ol>\n \t<li>Check if <code>gcode_shell_command.py<\/code> is already installed \u2014 download it from the Guilouz repository if not<\/li>\n \t<li>Create <code>screenshot.cfg<\/code> in <code>\/usr\/data\/printer_data\/config\/<\/code><\/li>\n \t<li>Insert the include line at the very top of <code>printer.cfg<\/code><\/li>\n \t<li>Restart Klipper then reboot the Nebula Pad<\/li>\n<\/ol>\n<figure style=\"margin: 16px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 6px;\" src=\"https:\/\/www.e5m-ck.com\/wp-content\/uploads\/2026\/03\/ssh_installer_output.jpg\" alt=\"PowerShell showing full installer output\" \/><figcaption style=\"font-style: italic; color: #666; margin-top: 8px;\">PowerShell showing the full installer output \u2014 all four steps completing successfully.<\/figcaption><\/figure>\n<div style=\"background: #fff3cd; border-left: 4px solid #f0a500; padding: 14px 18px; border-radius: 4px; margin: 16px 0;\">\u26a0\ufe0f The Nebula Pad will reboot automatically at the end of the installation. Wait for it to come back online before proceeding to the After Installation section.<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a7979a4 e-flex e-con-boxed e-con e-parent\" data-id=\"a7979a4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4010d68 elementor-widget elementor-widget-text-editor\" data-id=\"4010d68\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>Option B \u2014 Manual Install<\/h2>\n<p><strong>Choose this option if<\/strong> you want to understand exactly what is being installed and keep full control over every file added to your configuration. Each component is installed and explained separately.<\/p>\n\n<div style=\"background:#f0f4ff; border-left:4px solid #3a5fc8; padding:14px 18px; border-radius:4px; margin:16px 0;\">\n  \ud83d\udcf8 Screenshots show Fluidd \u2014 Mainsail interface is similar.\n<\/div>\n\n<h3>Additional Prerequisites<\/h3>\n<ul>\n  <li>PowerShell (Windows) or Terminal (macOS\/Linux)<\/li>\n  <li>Your web interface (Fluidd or Mainsail) installed and accessible:\n    <ul>\n      <li>Fluidd: <code>http:\/\/192.168.1.XXX:4408<\/code><\/li>\n      <li>Mainsail: <code>http:\/\/192.168.1.XXX:4409<\/code><\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fcce0a9 e-flex e-con-boxed e-con e-parent\" data-id=\"fcce0a9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f901457 elementor-widget elementor-widget-text-editor\" data-id=\"f901457\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Step 1 \u2014 Install gcode_shell_command via SSH<\/h3>\n<p><code>gcode_shell_command.py<\/code> is a Klipper plugin that allows macros to execute Linux shell commands. Without it, the <code>SCREENSHOT<\/code> macro cannot run <code>ffmpeg<\/code>.<\/p>\n\n<div style=\"background:#fff3cd; border-left:4px solid #f0a500; padding:14px 18px; border-radius:4px; margin:16px 0;\">\n  \u26a0\ufe0f This step must be done via SSH. Your web interface terminal only accepts G-code commands \u2014 it cannot run Linux shell commands like <code>wget<\/code>.\n<\/div>\n\n<ol>\n  <li>Open <strong>PowerShell<\/strong> (Windows) or <strong>Terminal<\/strong> (macOS\/Linux) and connect to the Nebula Pad:<\/li>\n<\/ol>\n\n<pre style=\"background:#1e1e1e; color:#d4d4d4; padding:16px; border-radius:6px; overflow-x:auto; font-size:0.9em;\"><code>ssh root@192.168.1.XXX<\/code><\/pre>\n\n<ol start=\"2\">\n  <li>Run the following command to download and install <code>gcode_shell_command.py<\/code>:<\/li>\n<\/ol>\n\n<pre style=\"background:#1e1e1e; color:#d4d4d4; padding:16px; border-radius:6px; overflow-x:auto; font-size:0.9em;\"><code>wget -O \/usr\/share\/klipper\/klippy\/extras\/gcode_shell_command.py https:\/\/raw.githubusercontent.com\/Guilouz\/Creality-Helper-Script\/main\/files\/gcode-shell-command\/gcode_shell_command.py<\/code><\/pre>\n\n<p>This places <code>gcode_shell_command.py<\/code> directly in Klipper&#8217;s <code>extras\/<\/code> folder. Klipper automatically loads every <code>.py<\/code> file in this folder at startup \u2014 no further configuration is needed to activate the plugin.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7d4785f e-flex e-con-boxed e-con e-parent\" data-id=\"7d4785f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6402df8 elementor-widget elementor-widget-text-editor\" data-id=\"6402df8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Step 2 \u2014 Create screenshot.cfg via your Web Interface<\/h3><ol><li>In your web interface, click the <strong>Configuration<\/strong> icon <code>{...}<\/code> in the left menu<\/li><li>Click <strong>&#8220;+ New file&#8221;<\/strong> and name it <code>screenshot.cfg<\/code><\/li><li>Paste the following content:<\/li><\/ol><figure style=\"margin: 16px 0;\"><\/figure><pre style=\"background: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 6px; overflow-x: auto; font-size: 0.9em;\"><code># ============================================================\n# screenshot.cfg\n# Captures the Nebula Pad screen as a properly oriented PNG\n# Screenshots are saved in gcodes\/ folder, accessible via\n# your web interface (Fluidd or Mainsail)\n# E5M DOC CK \u2014 Christian KELHETTER \u2014 v1.2 March 2026\n# ============================================================\n\n[gcode_shell_command screenshot]\ncommand: sh -c \"cat \/dev\/fb0 &gt; \/tmp\/fb.raw &amp;&amp; ffmpeg -y -vcodec rawvideo -f rawvideo -pix_fmt bgra -s 480x272 -i \/tmp\/fb.raw -vf 'transpose=1' \/usr\/data\/printer_data\/gcodes\/screenshot_$(date +%Y%m%d_%H%M%S).png &amp;&amp; rm \/tmp\/fb.raw\"\ntimeout: 15\nverbose: True\n\n[gcode_macro SCREENSHOT]\ndescription: Capture Nebula Pad screen to gcodes\/\ngcode:\n    RESPOND TYPE=command MSG=\"\/\/ Taking screenshot...\"\n    RUN_SHELL_COMMAND CMD=screenshot\n    RESPOND TYPE=command MSG=\"\/\/ Screenshot saved to gcodes\/\"<\/code><\/pre><ol start=\"4\"><li>Click <strong>Save<\/strong><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c7c2472 e-flex e-con-boxed e-con e-parent\" data-id=\"c7c2472\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-92bc6c4 elementor-widget elementor-widget-text-editor\" data-id=\"92bc6c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Line by line explanation:<\/strong><\/p>\n\n<p><code>[gcode_shell_command screenshot]<\/code> \u2014 declares a named shell command called <code>screenshot<\/code> that Klipper can trigger from a macro<\/p>\n\n<p><code>command: sh -c \"...\"<\/code> \u2014 the shell command that runs when triggered:<\/p>\n<ul>\n  <li><code>cat \/dev\/fb0 > \/tmp\/fb.raw<\/code> \u2014 reads the raw video memory of the Nebula Pad screen and saves it as a temporary raw binary file<\/li>\n  <li><code>ffmpeg -y -vcodec rawvideo -f rawvideo -pix_fmt bgra -s 480x272<\/code> \u2014 tells ffmpeg the input is raw video, in BGRA color format (Blue Green Red Alpha), at 480\u00d7272 pixels \u2014 the native screen resolution of the Nebula Pad<\/li>\n  <li><code>-i \/tmp\/fb.raw<\/code> \u2014 specifies the raw file as ffmpeg input<\/li>\n  <li><code>-vf 'transpose=1'<\/code> \u2014 applies a video filter to rotate the image 90 degrees clockwise, correcting the screen orientation<\/li>\n  <li><code>screenshot_$(date +%Y%m%d_%H%M%S).png<\/code> \u2014 saves the output as a timestamped PNG file so screenshots never overwrite each other<\/li>\n  <li><code>&& rm \/tmp\/fb.raw<\/code> \u2014 deletes the temporary raw file after conversion to keep the system clean<\/li>\n<\/ul>\n\n<p><code>timeout: 15<\/code> \u2014 if the command takes more than 15 seconds, Klipper will abort it and log an error<\/p>\n\n<p><code>verbose: True<\/code> \u2014 Klipper will print the full shell command output to the console, useful for debugging if something goes wrong<\/p>\n\n<p><code>[gcode_macro SCREENSHOT]<\/code> \u2014 declares the Klipper macro that appears as a button in your web interface<\/p>\n\n<p><code>RESPOND TYPE=command MSG=\"...\"<\/code> \u2014 sends a visible message to the console to indicate progress<\/p>\n\n<p><code>RUN_SHELL_COMMAND CMD=screenshot<\/code> \u2014 triggers the shell command defined above<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cf8e05e e-flex e-con-boxed e-con e-parent\" data-id=\"cf8e05e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a646735 elementor-widget elementor-widget-text-editor\" data-id=\"a646735\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Step 3 \u2014 Add the Include to printer.cfg<\/h3>\n<ol>\n  <li>In your web interface, open <strong><code>printer.cfg<\/code><\/strong><\/li>\n  <li>Add the following line at the <strong>very top<\/strong> of the file, before any other content:<\/li>\n<\/ol>\n\n<pre style=\"background:#1e1e1e; color:#d4d4d4; padding:16px; border-radius:6px; overflow-x:auto; font-size:0.9em;\"><code>[include screenshot.cfg] # E5M DOC CK - Nebula Pad Screenshot macro<\/code><\/pre>\n\n<ol start=\"3\">\n  <li>Click <strong>Save &amp; Restart<\/strong><\/li>\n<\/ol>\n\n<p><strong>Why at the top?<\/strong> Placing the include at the first line ensures it is always loaded first, regardless of what else is in <code>printer.cfg<\/code>. It also makes it easy to find and remove if needed.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ddf6314 e-flex e-con-boxed e-con e-parent\" data-id=\"ddf6314\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-01b850d elementor-widget elementor-widget-text-editor\" data-id=\"01b850d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>After Installation \u2014 Take and Download a Screenshot<\/h2><p>Once installation is complete and the Nebula Pad has restarted, the <code>SCREENSHOT<\/code> macro is ready to use.<\/p><h3>Take a Screenshot<\/h3><ol><li>Navigate to the screen you want to capture on the Nebula Pad<\/li><li>In your web interface (Fluidd or Mainsail), find the <strong>SCREENSHOT<\/strong> button in the macros panel<\/li><\/ol><figure style=\"margin: 16px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 6px;\" src=\"https:\/\/www.e5m-ck.com\/wp-content\/uploads\/2026\/03\/fluidd_macros_screenshot_button.jpg\" alt=\"Fluidd macros panel with SCREENSHOT button\" \/><figcaption style=\"font-style: italic; color: #666; margin-top: 8px;\">Fluidd \u2014 macros panel showing the SCREENSHOT button.<\/figcaption><\/figure><ol start=\"3\"><li>Click it \u2014 you will see the following messages in the console:<\/li><\/ol><pre style=\"background: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 6px; overflow-x: auto; font-size: 0.9em;\"><code>\/\/ Taking screenshot...\n\/\/ Screenshot saved to gcodes\/<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-141681c e-flex e-con-boxed e-con e-parent\" data-id=\"141681c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-87e60a6 elementor-widget elementor-widget-text-editor\" data-id=\"87e60a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Download the Screenshot<\/h3>\n<ol>\n \t<li>In your web interface, click the <strong>Files<\/strong> icon in the left menu<\/li>\n \t<li>The screenshot appears as a PNG file named <code>screenshot_YYYYMMDD_HHMMSS.png<\/code><\/li>\n<\/ol>\n<figure style=\"margin: 16px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 6px;\" src=\"https:\/\/www.e5m-ck.com\/wp-content\/uploads\/2026\/03\/fluidd_files_png_generated.jpg\" alt=\"Fluidd files panel showing PNG file\" \/><figcaption style=\"font-style: italic; color: #666; margin-top: 8px;\">Fluidd \u2014 files panel showing the generated PNG screenshot file.<\/figcaption><\/figure>\n<ol start=\"3\">\n \t<li>Click on the file and select <strong>Download<\/strong><\/li>\n<\/ol>\nHere is an example of what a screenshot looks like:\n<figure style=\"margin: 16px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 6px;\" src=\"https:\/\/www.e5m-ck.com\/wp-content\/uploads\/2026\/03\/screenshot_20260331_185228.png\" alt=\"Example PNG screenshot of the Nebula Pad screen\" \/><figcaption style=\"font-style: italic; color: #666; margin-top: 8px;\">Example screenshot captured from the Nebula Pad screen.<\/figcaption><\/figure>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-aa915a8 e-flex e-con-boxed e-con e-parent\" data-id=\"aa915a8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f1e3d20 elementor-widget elementor-widget-text-editor\" data-id=\"f1e3d20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>How to Uninstall<\/h2>\n<p>To remove everything installed by this tutorial:<\/p>\n<ol>\n  <li>In your web interface, open <strong><code>printer.cfg<\/code><\/strong> and delete the line:<\/li>\n<\/ol>\n\n<pre style=\"background:#1e1e1e; color:#d4d4d4; padding:16px; border-radius:6px; overflow-x:auto; font-size:0.9em;\"><code>[include screenshot.cfg] # E5M DOC CK - Nebula Pad Screenshot macro<\/code><\/pre>\n\n<ol start=\"2\">\n  <li>Click <strong>Save &amp; Restart<\/strong><\/li>\n  <li>In your web interface, delete the file <strong><code>screenshot.cfg<\/code><\/strong> from the configuration panel<\/li>\n  <li>Via SSH, remove <code>gcode_shell_command.py<\/code> if you no longer need it:<\/li>\n<\/ol>\n\n<pre style=\"background:#1e1e1e; color:#d4d4d4; padding:16px; border-radius:6px; overflow-x:auto; font-size:0.9em;\"><code>rm \/usr\/share\/klipper\/klippy\/extras\/gcode_shell_command.py<\/code><\/pre>\n\n<ol start=\"5\">\n  <li>Reboot the Nebula Pad:<\/li>\n<\/ol>\n\n<pre style=\"background:#1e1e1e; color:#d4d4d4; padding:16px; border-radius:6px; overflow-x:auto; font-size:0.9em;\"><code>reboot<\/code><\/pre>\n\n<div style=\"background:#fff3cd; border-left:4px solid #f0a500; padding:14px 18px; border-radius:4px; margin:16px 0;\">\n  \u26a0\ufe0f Only remove <code>gcode_shell_command.py<\/code> if no other macros or plugins on your system depend on it.\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-076841e e-flex e-con-boxed e-con e-parent\" data-id=\"076841e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-50ea2f1 elementor-widget elementor-widget-text-editor\" data-id=\"50ea2f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>Compatible Printers<\/h2>\n<p>This tutorial was written and tested on the <strong>Creality Ender 5 Max<\/strong>.<\/p>\n<p>The macro may work on other printers using the Nebula Pad with a 480\u00d7272 screen resolution, but this has not been verified. If your screen resolution is different, the <code>-s 480x272<\/code> parameter in the <code>ffmpeg<\/code> command will need to be adjusted accordingly.<\/p>\n\n<hr style=\"margin:32px 0; border:none; border-top:1px solid #ddd;\" \/>\n\n<p style=\"color:#888; font-size:0.9em;\">Tutorial by Christian KELHETTER \u2014 feel free to share and adapt with credit.<br>v1.0 \u2014 March 2026<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The Nebula Pad has no built-in screenshot function. This guide installs a Klipper macro that captures the screen as a PNG file, accessible directly from your web interface (Fluidd or Mainsail). Two options: automatic install via SSH in one command, or manual install for those who want to understand every line.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"elementor_theme","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-134","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=\/wp\/v2\/pages\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=134"}],"version-history":[{"count":10,"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=\/wp\/v2\/pages\/134\/revisions"}],"predecessor-version":[{"id":223,"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=\/wp\/v2\/pages\/134\/revisions\/223"}],"wp:attachment":[{"href":"https:\/\/www.e5m-ck.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}