TODO
Certainly a pocket for the heart.
A slight pocket for the oval photo? Or nothing and laser etch?
A new glossy photo? How do I cut it to size?
A chromium-centric file-only (server-not-needed) blog tracking the project on a long-overdue memorial for a beloved cat named BC (BiColor Cat).
There's a meta-blog here where I track my progress on modifying/improving this blog's content.
Certainly a pocket for the heart.
A slight pocket for the oval photo? Or nothing and laser etch?
A new glossy photo? How do I cut it to size?
I have a feeling this step (2. Generate G-Code) is going to have a lot of parts.
I have included "2. Generate G-code" from claude.ai's steps.
I added lettering a-e to help identify which sub-step I'm working on. I also added one sub-step for jscut.
2. Generate G-code. This is the CAM step, and it’s where you specify tool diameter, cut depth, feeds/speeds, stepdown per pass, and whether the toolpath is inside/outside/on the line (offset direction matters — for cutting a shape out, you want an outside offset by the tool radius, plus tabs so the piece doesn’t move mid-cut). Good Linux-native options:
For a first cut in wood with a common 1/8" (3.175 mm) 2-flute endmill, reasonable starting numbers: feed 800–1000 mm/min, plunge 200–300 mm/min, stepdown 1–1.5 mm per pass, spindle at whatever fixed speed your 4030 spindle runs. Add 3–4 tabs (0.5–1 mm thick) around the perimeter.
- a. FreeCAD Path workbench — heaviest but most capable. Import the SVG, extrude to a body if needed, then create a Job, Profile operation, and post-process with the grbl post. Best if you’ll be doing this often.
- b. Kiri:Moto (grid.space/kiri) — runs in the browser, no install, has a CNC mode with good SVG import. Fast to learn.
- c. Inkscape gcodetools extension (Extensions → Gcodetools) — stays in Inkscape but the UX is dated and it’s easy to get wrong offsets. Fine for engraving; less pleasant for profile cuts.
- d. Estlcam runs well under Wine if you want something closer to what the Genmitsu community typically uses.
- e. jscut was suggested by claude.ai in one of our conversations.
I guess one of the first things I need to do is specify the tool diameter. That means picking a tool. Here's what I have picked:
3.175mm is 0.125in, as in ⅛" (one eighth of an inch). I take this to mean that the tool diameter is one eighth of an inch.
This is one of a set of such bits which live in the "lower-right-hand" workbench drawer in the garage. The "left-hand" workbench has the 4030 Prover on it.
Here's where the other 4 bits in the set look like:
Those live in the same drawer as the singleton, which is in a little plastic baggie:
In the image above, you can see the "lower-right-hand" workbench drawer is open, and the bit in its baggie is sitting on the workbench top.
A closer look at one of the bits shows that this is a two-flute bit:
Here's the original text (different formatting than Claude and the parts I've already done are grayed out):
1. Prep the SVG in Inkscape. Set the document units to mm and make the drawing size match real-world dimensions (File → Document Properties). Convert any strokes or text to paths (Path → Object to Path, Path → Stroke to Path). Combine subpaths only if they’re meant to be a single contour. It’s worth simplifying (Path → Simplify) to reduce node count on curves, but not so aggressively that the shape drifts. Save as plain SVG.
I open memorial.20260903T145342-0700.heart-only.svg with Kate again to look at the <path> tag's content so I can understand what it's doing, and whether I've got subpaths to worry about because I'm working on "Combine subpaths only if they’re meant to be a single contour."
From this I learned how to define a "subpath" as a part of the <part> element's "d" attribute's content.
In particular (from this), "Every M/m (moveto) lifts the pen and starts a new subpath, so one d string can hold several separate pieces."
I don't understand "moveto", so I got some advice.
That advice assumed I knew what the SVG mental model for the <path>'s d attribute's content was. I guess partly right, as confirmed by this.
The mental model advice made me curious about the origin of the "d" attribute's name, and I got some clarity on that from claude.ai. The "d" is short for "data". Ha.
Next, I had claude.ai explain the d attribute's content in detail.
This confirmed that there were no subpaths to combine (there is only one). It also confirmed that there were no worth-while simplifications possible, let alone necessary.
It also pointed to a potential issue with gcode generation from the .svg having to do with "fill:#ffffff;fill-opacity:0;". The end recommendation is to leave the fill as white, because it's more likely CAD/CAM will interpret that as a pocket than a "profile" cut.
That same advice clarified the definition (and types of) "profile" cuts.
Annoyingly, the advice refused to share its interactive demo graphic, so I've included a non-interactive snapshot:
As the final task in the step, I saved a copy of the .svg as "Plain SVG" here.
Here's the original text (different formatting than Claude):
1. Prep the SVG in Inkscape. Set the document units to mm and make the drawing size match real-world dimensions (File → Document Properties). Convert any strokes or text to paths (Path → Object to Path, Path → Stroke to Path). Combine subpaths only if they’re meant to be a single contour. It’s worth simplifying (Path → Simplify) to reduce node count on curves, but not so aggressively that the shape drifts. Save as plain SVG.
Since I only want the heart from the .svg, and because I don't want to fuss with the other design elements, I copied memorial.20260903T145342-0700.svg to memorial.20260903T145342-0700.heart-only.svg and removed everything from memorial.20260903T145342-0700.heart-only.svg except the heart outline.
I used Inkscape to open memorial.20260903T145342-0700.heart-only.svg and I removed BC's ellipse-picture, the image of the plaque, the image of the fur-phial and an alignment rectangle.
Editing the file with Kate (editor), I find that there are some elements still present in the .svg OTHER THAN the single <path> element. There were a couple <rect>s and a couple <clipPath> tags.
There was also an <ellipse> tag! I manually deleted one <rect> and the <ellipse> each of which had its own enclosing <clipPath>. Both of these tags were enclosed in a <defs> tag, which I also deleted.
Inspecting from InkScape with Layers and Objects, another rect object appeared. Looking in the .svg with the editor, I could see there was indeed another <rect> tag, which I also deleted.
This left just a <path> tag enclosed by a <g> tag. I left those alone, since the <g> tag also had a transform matrix attribute which I imagine is important. I learned this from claude.ai about the <g> tag.
There was also a <sodipodi:namedview> tag, which I learned from claude.ai is a) harmless, b) contains a bunch of InkScape-specific view data not relevant to the actual geometry, and c) SodiPodi was the software from which InkScape was originally forked - which explains the name.
Lastly, I can confidently say that there were no strokes or text to convert to paths. According to claude.ai, a subpath can exist with a <path> object, so I'll work on the "Combine subpaths only if ..." part of Step 1 next time.
Robin reminded me which plaque he wanted, so I created the following .svg with all the desired features and dimensions:
I was able to print the oval-BC image below from Windows on Sherri's printer on photographic paper with good results:
I asked claude.ai:
https://claude.ai/share/809fe671-3b9d-45c6-a49b-4cfd38fa995c
From claude.ai: FreeCAD Path workbench — heaviest but most capable. Import the SVG, extrude to a body if needed, then create a Job, Profile operation, and post-process with the grbl post. Best if you'll be doing this often.
Firstly, I found that I could export from Inkscape as a .png file.

I exported a selection, namely the picture of BC trimmed to an ellipse:

Then I learned I could import this into LaserGRBL.
claude.ai says I should be able to etch this.
Another important thing I learned is how to Home the LC-50's gantry.
Turns out that when you power up the LC-50, it'll often refuse to Home (or Test) until you send it a $X (unlock) command.
One reason it may refuse is that some error condition, or an E-Stop, occurred. It will retain the error state and refuse to Home (or Test) until sent a $X (unlock) command.
So I used Universal GCode Sender (ugsplatform) to connect to the LC-50 and then sent it the $X (unlock) command.
Then if I pressed Test/Home, a blue light would illuminate on the laser PCB and the laser itself would turn on (low power).
Pressing Test/Home again would cause the laser to turn off, but the blue light remained on.
Pressing and holding Home for about 5 seconds would cause the gantry to return to the Home position: the lower left corner of the engraving area.
Then I could terminate ugsplatform and connect using LaserGRBL.
I used bitblt with the default settings with power set to 10%.
This was the result:

Admittedly not great, but it does appear to the correct size at least:

Pressing it seems to have no effect:
I pressed it quickly. No effect.
I pressed and held it for 10 seconds. No effect.
Also, the power on/off button takes effect when the button is RELEASED, not when it is pressed.
I feel kind of duped, having bought the Genmitsu LC50 Plus, and then finding out later that there is virtually NO support, and the product has already been discontinued:
After some searching, I was able to find some LC50 Plus resources.
The sainsmart.com site recommended LightBurn Core, which is commercial software which runs on Kubuntu.
Claude's recommendation, which will not render in an iframe.
Claude recommends open source software called meerk405.
Turns out I have an old Dell Windows computer attached to the laser etcher. It actually has LaserGRBL already installed. A long time ago, I used this Dell to connect to the Genmitsu Prover 4030 and ran a version of Carveco on it. Now I can use it to run LaserGRBL:

One of the most useful things on the LC50 Plus resources page is the Speed-Power Reference Chart.
Turns out we'll need that.
The manual is also kind of useful. I used it when I assembled the machine in the first place.
Contrary to what seems completely obvious, one does not put the distance gauge tool directly under the laser, but on the corner of the laser:

You can see from the manual that this is correct, but intuition says you should put the tool directly under the laser:

Also contrary to intuition, and other CNC device conventions, LaserGRBL seems to always start from the upper-right of the workpiece (a bit of partly-used scrap plywood in this case).

It seems to be good practise to use the "Go to top right" button before attempting any engraving.

Note that this caused the laser etcher to make a kind of "grindy" sound like it had reached a limit and was stuck.
I'm guessing there is a better way.
There is a Test/Home button:

I suppose I should experiment with that.
Obviously, the Jinsoku Z3 Galvo Laser's work area is too small:

The Genmitsu LC50 Plus' work area is certainly large enough:

But I've no idea how to place the workpiece. In other words, I don't know where 0, 0 on the laser is in space. It's probably lower left, but I don't want to just assume that.
I'll use double-sided tape to hold it down thus:

Update the memorial .svg accordingly:
I have been unable to print the .svg design on paper to actually try positioning on the wood, but I could tell by eye-balling it that the actual photo was too small for the ellipse.

I wish I could print the .svg design on a piece of paper, but for some reason printing on Kubuntu is not working. Getting printing to work is likely to turn into a huge job. The bit of debugging I have done suggests that the ip address getting assigned to the HP printers is unstable. Print jobs just get stuck in the print queue and never print. I'm afraid that getting printing to work might mean changing the entire lab network's configuration.
I could get new photos printed by a printing service, which would mean selecting the right photo and making sure it was sized to fit the ellipse. Doing that would be some of the same tasks needed to laser etch the photo directly into the plaque or some other material.
In the meantime, I have measured the physical photo. It's about 100x151mm.


Importing the photo into the svg and sizing it confirms what eye-balling suggests:
However, importing, resizing and cropping:
Here's how to do the cropping according to Claude:

And here's me actually doing that:
Add in one of plaques:
Here are the three plaques. Not sure which one we'll end up using.

Notice that they're all the same width. They are all about 101.2mm :

Two of them are the same height:

They are both about 50mm high:

The other one is 38mm high:

I think I'll make the memorial's .svg reflect the 50mm height.

In the memorial .svg, I resized the plaque object, and aligned it horizontally to center with the heart object:
Note: I renamed img/drawing.c.svg to img/memorial.20260903T105258-0700.svg.
I remeasured the pieces of wood I'll be using. There are three identical pieces.
Here is the height. It's about 184.3mm. I'll call it 184 when I put it into the .svg file. Notice that the right side of the wood piece is not visible. That's because the camera is nearly perfectly centered above the right edge and so the measurement is more accurate than had the camera been too far left or right. I started with the camera positioned too far right such that I could clearly see the right side of the piece of wood, then moved the camera left until the edge disappeared. That way I knew the camera was nearly directly above the edge.

Here is the width. It's about 256mm.

Here's the document with updated width and height:
Incidentally, here's how you view the width and height from Inkscape. You choose the File | Document Properties menu item:

Then you will see the Document Properties dialog which will contain the "Display | Front Page" Width and Height:

Inkscape hates inches, so I convert to mm.
It's about 250mm x 179mm . (W x H)
The oval is way too large for the Genmitsu Jinsoku Z3 to handle, so that means either I need to get a larger photo print, or some other kind of printing (or etching).
There are three very nice pieces of wood, all about the same size, which were bought expressly for this purpose:


It's about 9 ⅞" x 7 ¼ . (W x H)
There are three different plaques, each slightly different in size, but this one looks the closest to the original design:


It's about 4" x 2" . (W x H)
This little vial for BC's fur is meant to hang within the heart.

It's about 1 ½" long.
There are some photos of BC. Many copies of the same one. None will quite work.

So that means I'm back to square 1 as far as the existing photos are concerned.
Thankfully, we've got the original art for that picture (img/20190111_101410.jpg):

I tried my best to use the limited photos we had of BC to try making something you could etch into something using the CNC or laser. I've attached a PNG - I can try vectorizing it later. I MAY be able to remove the background, but my first attempts looked really choppy and stupid. It's tough because the background and her black fur blend together and make it difficult to see where she ends and shadows begin. I don't know if this is a workable version - but I was wondering if it could work if we do the BLACK deeper than the grey - the grey helps give her more shape to be recognizable as BC and not just catblob.
Can we do two different depths with the different colors?
Patrick also put together this wonderful heart-and-cat decal/sticker design, with a matching vector file ready for cutting:
Here's the .svg
Going through the img/ folder and taking a guess at what each file is and why it's here.
| Artifact | Description |
|---|---|
![]() |
Candid phone photo of BC (timestamped 2019-01-11) dozing on someone's lap next to a computer desk — one of many casual reference photos, not staged for anything. |
| BC napping face-first against a couch cushion. Another "sweet sleepy face" candidate shot. | |
| BC sprawled on her back on a blanket, completely conked out. A favorite goofy sleeping pose. | |
| BC curled up asleep on a paisley bedspread next to a flea comb — looks like she'd just been groomed. | |
| BC asleep on someone's lap at a computer desk (keyboard/mouse visible) — a "keeping me company while I work" shot. | |
| BC curled up on the bed at night, eyes catching the camera flash. | |
Close, low-light portrait of BC looking straight into the camera — the kind of shot that'd crop well into a small oval, like the cameo in drawing.svg below. |
|
| BC sitting alert on the hallway rug, ears up, watching whoever's holding the camera. | |
| A simple red heart clip-art icon (the filename suggests it was pulled from a "corazón"/heart icon set) — a reusable design element for the memorial artwork. | |
| An early, unfinished layout draft for the plaque artwork: a grey placeholder oval (for a photo), the heart icon, and a grey placeholder rectangle (for the nameplate text) — before any real photo or text was dropped in. | |
| A more finished version of the mock-up above: a photo of BC cropped into the oval, an outlined heart, and a nameplate reading "B.C. / 2007 - 2023" — looks like the working design file for a photo memorial piece. | |
![]() |
A small glass vial with metal end-caps, photographed outdoors on a wire grate. Guessing this is a keepsake capsule (fur, ashes, or a note) meant to be kept with the memorial. |
![]() |
The actual engraved metal plaque: "In loving memory of BC, 2007 - 2023" with small cat icons. This looks like the finished/ordered memorial plaque itself — simpler than the photo-based drawing.svg concept, so maybe that design got dropped in favor of this one. |
![]() |
Patrick's first pass at turning a candid photo of BC into an engraving-ready image: an oil-paint/posterize filter flattens it into black/grey/white regions for CNC or laser etching. Her black fur and the dark background still blend together here, which is the "catblob" problem he flagged. |
![]() |
A cleaner decal/sticker design: BC drawn as a black-and-white line illustration, curled up asleep inside a heart outline — a different, more graphic-design-y direction than the photo-based etching attempt above. |
| The vector (SVG) version of the heart-and-cat decal above — the actual cut/etch-ready file, not just a preview image. |
I did a .fork of https://github.com/pflagerd/blog-bootstrap