com.thefibrehose.pattern

thefibrehose.com

Documentation

Structured metadata for a knitting/crochet pattern. The PDF itself lives either as a paired com.thefibrehose.pdf record (subject) or on thefibrehose's own backend (privatePdfId) - exactly one of the two must be set, enforced client-side only since atproto lexicon cannot express cross-field conditionals (same precedent as the yardage/meterage pair below).

main record

Structured metadata for a knitting/crochet pattern. The PDF itself lives either as a paired com.thefibrehose.pdf record (subject) or on thefibrehose's own backend (privatePdfId) - exactly one of the two must be set, enforced client-side only since atproto lexicon cannot express cross-field conditionals (same precedent as the yardage/meterage pair below).

Record Key tid Timestamp-based ID

Properties

attributes array of string Optional

Freeform descriptive tags, e.g. textured, colorwork, top-down.

maxLength: 30 items
colorCount integer Required

Number of distinct yarn colors used in the pattern.

minimum: 1
craftType string Required

Whether this is a knitting, crochet, or other pattern.

Allowed: knitting, crochet, other
createdAt string datetime Required

Timestamp when this pattern record was created.

difficulty integer Optional

Optional difficulty rating, 1 (easiest) to 10 (hardest).

minimum: 1maximum: 10
hookSizeMm string Optional

Recommended crochet hook size in millimeters (e.g. "5.0"). Relevant only when craftType is crochet. A string because atproto lexicon has no decimal numeric type.

maxLength: 16 bytes
language string language Required

BCP-47 language tag the pattern is written in (e.g. "en", "en-US").

meterage integer Optional

Yarn requirement in meters. Computed alongside yardage from whichever unit the uploader entered.

minimum: 0
name string Required

The pattern's name/title, as given by the uploader.

maxLength: 200 bytes
needleSizeMm string Optional

Recommended knitting needle size in millimeters (e.g. "4.5"). Relevant only when craftType is knitting. A string because atproto lexicon has no decimal numeric type.

maxLength: 16 bytes
pdfFileName string Required

The PDF's original filename, denormalized here so the list view can display it without an extra fetch regardless of where the file itself is hosted.

maxLength: 1024 bytes
photo blob Optional

Optional photo of the finished piece. Always an atproto blob regardless of where the PDF itself is hosted.

maxSize: 5.2 MB
privatePdfId string Optional

Opaque id of the PDF as stored on thefibrehose's own access-controlled backend, when the PDF is not stored as an atproto blob. Mutually exclusive with subject; exactly one must be present.

maxLength: 64 bytes
subject ref com.atproto.repo.strongRef Optional

Strong ref to the linked com.thefibrehose.pdf record holding the actual file, when the PDF is stored as an atproto blob. Mutually exclusive with privatePdfId; exactly one must be present.

uploaderDid string did Required

DID of the account that originally uploaded this pattern. Redundant with the record's own repo ownership today, but keeps provenance explicit and self-describing if this record is ever copied, reposted, or indexed outside its own repo.

yardage integer Optional

Yarn requirement in yards. Computed alongside meterage from whichever unit the uploader entered.

minimum: 0
yarnWeight integer Required

Craft Yarn Council standard yarn weight, 0 (Lace) to 7 (Jumbo).

minimum: 0maximum: 7
View raw schema
{
  "description": "Structured metadata for a knitting/crochet pattern. The PDF itself lives either as a paired com.thefibrehose.pdf record (subject) or on thefibrehose's own backend (privatePdfId) - exactly one of the two must be set, enforced client-side only since atproto lexicon cannot express cross-field conditionals (same precedent as the yardage/meterage pair below).",
  "key": "tid",
  "record": {
    "properties": {
      "attributes": {
        "description": "Freeform descriptive tags, e.g. textured, colorwork, top-down.",
        "items": {
          "maxLength": 64,
          "type": "string"
        },
        "maxLength": 30,
        "type": "array"
      },
      "colorCount": {
        "description": "Number of distinct yarn colors used in the pattern.",
        "minimum": 1,
        "type": "integer"
      },
      "craftType": {
        "description": "Whether this is a knitting, crochet, or other pattern.",
        "enum": [
          "knitting",
          "crochet",
          "other"
        ],
        "type": "string"
      },
      "createdAt": {
        "description": "Timestamp when this pattern record was created.",
        "format": "datetime",
        "type": "string"
      },
      "difficulty": {
        "description": "Optional difficulty rating, 1 (easiest) to 10 (hardest).",
        "maximum": 10,
        "minimum": 1,
        "type": "integer"
      },
      "hookSizeMm": {
        "description": "Recommended crochet hook size in millimeters (e.g. \"5.0\"). Relevant only when craftType is crochet. A string because atproto lexicon has no decimal numeric type.",
        "maxLength": 16,
        "type": "string"
      },
      "language": {
        "description": "BCP-47 language tag the pattern is written in (e.g. \"en\", \"en-US\").",
        "format": "language",
        "type": "string"
      },
      "meterage": {
        "description": "Yarn requirement in meters. Computed alongside yardage from whichever unit the uploader entered.",
        "minimum": 0,
        "type": "integer"
      },
      "name": {
        "description": "The pattern's name/title, as given by the uploader.",
        "maxLength": 200,
        "type": "string"
      },
      "needleSizeMm": {
        "description": "Recommended knitting needle size in millimeters (e.g. \"4.5\"). Relevant only when craftType is knitting. A string because atproto lexicon has no decimal numeric type.",
        "maxLength": 16,
        "type": "string"
      },
      "pdfFileName": {
        "description": "The PDF's original filename, denormalized here so the list view can display it without an extra fetch regardless of where the file itself is hosted.",
        "maxLength": 1024,
        "type": "string"
      },
      "photo": {
        "accept": [
          "image/png",
          "image/jpeg",
          "image/webp"
        ],
        "description": "Optional photo of the finished piece. Always an atproto blob regardless of where the PDF itself is hosted.",
        "maxSize": 5242880,
        "type": "blob"
      },
      "privatePdfId": {
        "description": "Opaque id of the PDF as stored on thefibrehose's own access-controlled backend, when the PDF is not stored as an atproto blob. Mutually exclusive with subject; exactly one must be present.",
        "maxLength": 64,
        "type": "string"
      },
      "subject": {
        "description": "Strong ref to the linked com.thefibrehose.pdf record holding the actual file, when the PDF is stored as an atproto blob. Mutually exclusive with privatePdfId; exactly one must be present.",
        "ref": "com.atproto.repo.strongRef",
        "type": "ref"
      },
      "uploaderDid": {
        "description": "DID of the account that originally uploaded this pattern. Redundant with the record's own repo ownership today, but keeps provenance explicit and self-describing if this record is ever copied, reposted, or indexed outside its own repo.",
        "format": "did",
        "type": "string"
      },
      "yardage": {
        "description": "Yarn requirement in yards. Computed alongside meterage from whichever unit the uploader entered.",
        "minimum": 0,
        "type": "integer"
      },
      "yarnWeight": {
        "description": "Craft Yarn Council standard yarn weight, 0 (Lace) to 7 (Jumbo).",
        "maximum": 7,
        "minimum": 0,
        "type": "integer"
      }
    },
    "required": [
      "uploaderDid",
      "name",
      "pdfFileName",
      "craftType",
      "yarnWeight",
      "colorCount",
      "language",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}

Lexicon Garden

@