Skip to content

Shape blob storage: sync FreeCAD custom tool shapes (.fcstd) as content-addressed blobs #45

Description

@sliptonic

Why

In loobric-freecad's asset-store mode, tool libraries are served from the server. A toolbit referencing a custom shape (.fcstd) renders wrong or fails to instantiate on any seat that lacks the shape file locally — shape references sync today, shape contents do not. This is the one designed follow-up that store-mode v1 ships around (v1 warns on pull when a referenced shape is missing locally).

What

Server-side storage for shape blobs with:

  • Content-hash identity — a shape is identified by a digest of its bytes, so the same shape referenced by 40 tools is stored once and renaming a file doesn't fork it
  • Association with ToolInstanceRecords via the existing reference (the .fctb's shape name stays the client-facing handle; the record carries the hash)
  • Versioning — a re-uploaded shape with new content is a new blob; records point at a specific hash
  • Size limits and media-type validation (these are opaque binary .fcstd documents; the server never parses them)

The existing media-attachment mechanism (attach_media_from_url, MCP 1.2.0) may be the foundation or a sibling — needs a deliberate decision rather than reuse-by-default, since media is per-record and shapes are shared across records.

Explicitly out of scope

  • Built-in FreeCAD shapes (every seat has them; only custom shapes sync)
  • Parsing/validating shape geometry server-side
  • .fcm machine configs — permanent non-goal; post/kinematics config is not Loobric's domain

Client behavior this unblocks

FreeCAD addon serves toolbitshape assets from the mirror like toolbits: a pulled tool arrives with its custom shape, multi-seat just works.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions