Working? Prompts with attached image/model in addition to web-source

Hi everyone,

Last year I was really impressed of how accurate the Text-To-CAD was.
So, it was obvious choice when I started with my big project.

A little bit of background:

My CAD skills are near zero, even though I regulary adjust and create very simple models in Autodesk Fusion. Had it and used it for years, spending all weekend on a simple model. Then spend a couple of hours more to convert to 2D technical drawing for fabrication.

And since Autodesk Fusion really started to crash with every move, I felt it was time to try something new.

And now, a couple of months later. When I finally made the step for a subscribtion, the modelling is worse than ever. I`m literally given it a description, image attachement and link to the web-page.

So what has happened since I last tried ZOO? Could somebody please help me get it to work again? I dont want to spend my time on this, as this was the whole point for me using Text-To-CAD…

Please help

Thanks so much for writing this up and for subscribing - and sorry this has been frustrating.

Are you getting bad models, or are you getting no result at all (for example an “interrupt” or similar error message and the run just stops)?

We currently have a known issue where the reasoning gets interrupted and the app returns an interrupt error instead of finishing the model, and the whole team is actively working on fixing that as a top priority.

If what you’re seeing is different from an interrupt / no‑result situation (for example it completes but the geometry is totally off), it would really help us to get more details: a couple of example prompts, screenshots, and what you expected vs what you got. That way we can track down whether this is a separate bug and get it fixed.

Hi Max,
Thanks for your prompt reply and I´m sorry for lashing out my frustration like this.

Mainly getting really bad/strange models, but it generates many views and then deletes them. BUT the worst part has been that the model generation on the second and third time gets even worse and it deletes the previous version. Only experienced the interupt 1-2 times, but this only happened while generating my first model.

I`ve had 3 different models and approaches since starting with the subscription. Which are really out of shape.

Model 1) Button cutter shank (rectangular rod with 5 degree cut angle)
I got a couple of interupts, but the model was close, but i did not manage to get it to correct the model. And also tried to alter directly in the main.kcl code.

Prompt included a 2D technical drawing (png fileformat) with shape and dimensions in black and white. It generated and corrected even with experiencing “interupt”
I have not tried new prompts on this model.

Screenshot of model 1 (which has been close to the reference drawing)

1 Like

1 Like

Model 2: Quick Change Tool Post (Square block with 2x 60deg Dovetails)

Prompted with dimension, image of QCTP and web-link to the web source.

Tried 2-3 times and the model got worse and worse.

1 Like

Expected something like this

1 Like

second image

1 Like

Model 3: Quick Change Tool Post (with a different model and attached STL file of the model)

1 Like

Second attempt

1 Like

Expected this

And added the STL file
Source: Thingiverse model 7x10 Mini Lathe Quick Change Tool

So, even though I have experienced “interrupt” and no results after. I have not had problems with running the prompt again.

My issue is that I`m not getting good results. And I dont know what I have to do write, attach, refer to in order to get a usable model in return.

Again, sorry for venting, but I don`t understand whats going on.

Looking forward to get some tips and advice on how to proceed.

(feel free to look into my user profile, log and prompts)

/Daniel

ps: the system only allows one image attachment per reply

Thanks a ton for taking the time to write all this up and for sharing the screenshots and references - this kind of detail is super valuable for us.

I’m going to go through each of your three models tomorrow one by one and try to reproduce what you did: same prompts, same attachments, same references. I’ll record a walkthrough of that process so you can see exactly what I’m doing and where things are going wrong.

From there I’ll share concrete suggestions for how to phrase prompts / use images & STL files to get better results, and we’ll also use what we learn to file or fix any bugs on our side.

I really appreciate you sticking with it and being so specific here - this is exactly the kind of feedback that helps us improve the product.

I recorded a walkthrough for the first part, and wanted to share a bit of context: this drawing is probably at the edge of what Zookeeper can reliably generate today, since a part of the geometry is defined by angles rather than just dimensions. It took me several rounds of prompting to get the part into the right shape.

The video isn’t perfect - the audio in particular is rough - but I hope it’s still useful. I’d really appreciate it if you could watch it and leave comments; I’m happy to record another one for the second part and respond to any feedback.

I’m also attaching the KCL code for the current version of the part in case that’s helpful for debugging or comparison.

One tip in the meantime: try switching Zookeeper to Thoughtful mode for these more complex, angle‑driven parts.

@settings(defaultLengthUnit = mm)

overallLength = 90
shankWidth = 19
shankThickness = 9.60
featureLength = 12

topReliefAngle = 5deg
frontDraftAngle = -5deg

holeDiameter = 3.18
holeSpacing = 8.81
holeSetback = 4.10

wedgeWidth = 4
wedgeLength = 4
cutOverlap = 0.5

frontTopX = -overallLength / 2
backX = frontTopX + overallLength
topZ = shankThickness / 2
bottomZ = -shankThickness / 2
shoulderX = frontTopX + featureLength

frontDraftMagnitude = 0deg - frontDraftAngle
topReliefSegmentAngle = 180deg + topReliefAngle
frontDraftSegmentAngle = 270deg - frontDraftAngle

topReliefProjectedLength = featureLength
topReliefRise = topReliefProjectedLength * tan(topReliefAngle)
topReliefLength = topReliefProjectedLength / cos(topReliefAngle)
frontTopZ = topZ - topReliefRise

frontDraftRise = shankThickness - topReliefRise
frontDraftRun = frontDraftRise * tan(frontDraftMagnitude)
frontDraftLength = frontDraftRise / cos(frontDraftMagnitude)

frontBottomX = frontTopX + frontDraftRun
bottomFaceLength = overallLength - frontDraftRun
topFlatLength = overallLength - topReliefProjectedLength

holeDatumX = frontTopX + holeSetback
holeDatumZ = 0
holeOffsetY = holeSpacing / 2

holeAxisX = cos(frontDraftSegmentAngle)
holeAxisZ = sin(frontDraftSegmentAngle)
holeAxisUpX = -holeAxisX
holeAxisUpZ = -holeAxisZ

topReliefSlope = tan(topReliefAngle)
holeToReliefTopLength =
  (frontTopZ - holeDatumZ + (holeDatumX - frontTopX) * topReliefSlope) /
  (holeAxisUpZ - holeAxisUpX * topReliefSlope)
holeReliefTopX = holeDatumX + holeAxisUpX * holeToReliefTopLength
holeToFlatTopLength = (topZ - holeDatumZ) / holeAxisUpZ
holeUsesReliefTop = holeReliefTopX >= frontTopX & holeReliefTopX <= shoulderX
holeToTopLength = if holeUsesReliefTop {
  holeToReliefTopLength
} else {
  holeToFlatTopLength
}
holeToBottomLength = (holeDatumZ - bottomZ) / holeAxisUpZ
holeMidOffset = (holeToTopLength - holeToBottomLength) / 2
holeMidX = holeDatumX + holeAxisUpX * holeMidOffset
holeMidZ = holeDatumZ + holeAxisUpZ * holeMidOffset
holeCutLength = holeToTopLength + holeToBottomLength + 2 * cutOverlap

holePlaneXAxis = { x = 0, y = 1, z = 0 }
holePlaneYAxis = { x = -holeAxisZ, y = 0, z = holeAxisX }
holePlaneZAxis = { x = holeAxisX, y = 0, z = holeAxisZ }

leftHolePlane = {
  origin = { x = holeMidX, y = -holeOffsetY, z = holeMidZ },
  xAxis = holePlaneXAxis,
  yAxis = holePlaneYAxis,
  zAxis = holePlaneZAxis,
}
rightHolePlane = {
  origin = { x = holeMidX, y = holeOffsetY, z = holeMidZ },
  xAxis = holePlaneXAxis,
  yAxis = holePlaneYAxis,
  zAxis = holePlaneZAxis,
}

wedgeHalfWidth = wedgeWidth / 2
wedgeSideAngle = atan(wedgeHalfWidth / wedgeLength)
wedgeSideLength = wedgeLength / cos(wedgeSideAngle)
wedgeFrontX = frontTopX
wedgeUpperFaceAngle = 360deg - wedgeSideAngle
wedgeLowerFaceAngle = 180deg + wedgeSideAngle
wedgeCutLength = shankThickness + 2 * cutOverlap

assert(wedgeWidth, isGreaterThan = 0, error = "wedgeWidth must be positive")
assert(wedgeLength, isGreaterThan = 0, error = "wedgeLength must be positive")
assert(
  holeSetback,
  isGreaterThanOrEqual = 0,
  isLessThanOrEqual = featureLength,
  error = "holeSetback must stay within the front feature zone",
)

bodyProfile = startSketchOn(XZ)
  |> startProfile(at = [frontBottomX, bottomZ])
  |> xLine(length = bottomFaceLength, tag = $bottomFace)
  |> yLine(length = shankThickness, tag = $backFace)
  |> xLine(length = -topFlatLength, tag = $topFlatFace)
  |> angledLine(
       angle = topReliefSegmentAngle,
       length = topReliefLength,
       tag = $topReliefFace,
     )
  |> angledLine(
       angle = frontDraftSegmentAngle,
       length = frontDraftLength,
       tag = $frontDraftFace,
     )
  |> close()

body = extrude(bodyProfile, length = shankWidth, symmetric = true)

leftHoleSketch = startSketchOn(leftHolePlane)
  |> circle(center = [0, 0], diameter = holeDiameter)
leftHoleCutter = extrude(leftHoleSketch, length = holeCutLength, symmetric = true)

rightHoleSketch = startSketchOn(rightHolePlane)
  |> circle(center = [0, 0], diameter = holeDiameter)
rightHoleCutter = extrude(rightHoleSketch, length = holeCutLength, symmetric = true)

bodyWithHoles = subtract([body], tools = [leftHoleCutter, rightHoleCutter])[0_]

wedgeProfile = startSketchOn(XY)
  |> startProfile(at = [wedgeFrontX, wedgeHalfWidth])
  |> angledLine(angle = wedgeUpperFaceAngle, length = wedgeSideLength, tag = $wedgeUpperFace)
  |> angledLine(angle = wedgeLowerFaceAngle, length = wedgeSideLength, tag = $wedgeLowerFace)
  |> close()
wedgeCutter = extrude(wedgeProfile, length = wedgeCutLength, symmetric = true)

buttonCutterShank = subtract([bodyWithHoles], tools = [wedgeCutter])[0_]

appearance(buttonCutterShank, color = "#7a7a7a")