{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "giraffe-granny-square-free-pattern",
  "title": "Giraffe Granny Square: Free Crochet Pattern",
  "meta_description": "Crochet a free giraffe granny square pattern with textured back-loop head, easy color changes & a 3D snout — perfect for animal-themed baby blankets",
  "published_at": "2026-07-21",
  "updated_at": "2026-07-21",
  "author": "Ruby",
  "thumbnail_url": "data/images/giraffe-granny-square-free-pattern-hero.webp",
  "meta": {
    "title": "Giraffe Granny Square: Free Crochet Pattern",
    "pattern_name": "Giraffe Granny Square: Free Crochet Pattern",
    "difficulty": "Intermediate",
    "time_needed": "2-3 Hours",
    "rating": 4.8,
    "made_count": "1.1K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "DK",
      "tags": [
        "giraffe granny square",
        "granny square pattern",
        "free crochet pattern",
        "animal granny square",
        "safari crochet",
        "crochet giraffe",
        "back loop only",
        "color change crochet",
        "DK yarn",
        "baby blanket square",
        "crochet motif"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Giraffe Granny Square: Free Crochet Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Intermediate Level",
          "value": "Comfortable with back-loop stitches, standing chains, and simple color changes",
          "raw_text": "Comfortable with back-loop stitches, standing chains, and simple color changes",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "hero-info-2",
          "label": "Afternoon Project",
          "value": "About 2–3 hours of relaxing hook time from magic loop to final border",
          "raw_text": "About 2–3 hours of relaxing hook time from magic loop to final border",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "hero-info-3",
          "label": "Safari Cuteness",
          "value": "A dimensional giraffe face that steals the show on any animal blanket",
          "raw_text": "A dimensional giraffe face that steals the show on any animal blanket",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 2,
      "card_type": "about",
      "code": "about",
      "title": "About",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "about-info-1",
          "label": "",
          "value": "This free crochet pattern turns a humble granny square into an adorable giraffe, complete with a dimensional raised head, a yellow neck that grows right out of the square's colorwork, and a sweet little snout, horns, ears, and eyes. The color inspiration comes from a real giraffe — a yellow head with brown horns. It's the perfect motif for safari-themed baby blankets, nursery pillows, or a single accent square for the giraffe lover in your life. If you've mastered basic granny squares and want something with real personality, this is the pattern to reach for next",
          "raw_text": "This free crochet pattern turns a humble granny square into an adorable giraffe, complete with a dimensional raised head, a yellow neck that grows right out of the square's colorwork, and a sweet little snout, horns, ears, and eyes. It's the perfect motif for safari-themed baby blankets, nursery pillows, or a single accent square for the giraffe lover in your life. If you've mastered basic granny squares and want something with real personality, this is the pattern to reach for next",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "about-info-2",
          "label": "",
          "value": "You'll begin with a magic loop and a circle of half double crochets for the head, then work a round of double crochet increases in back loops only — that BLO round is the secret that makes the head pop forward in relief. From there, standing chain stitches, simple cream-to-yellow color changes, and classic (2hdc, ch2, 2hdc) corners square everything off neatly. If those techniques sound familiar, this is a relaxed intermediate make; expect around two to three cozy hours from start to finish",
          "raw_text": "You'll begin with a magic loop and a circle of half double crochets for the head, then work a round of double crochet increases in back loops only — that BLO round is the secret that makes the head pop forward in relief. From there, standing chain stitches, simple cream-to-yellow color changes, and classic (2hdc, ch2, 2hdc) corners square everything off neatly. If those techniques sound familiar, this is a relaxed intermediate make; expect around two to three cozy hours from start to finish",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "about-info-3",
          "label": "",
          "value": "Worked in DK-weight yarn on a 3.00 mm hook, the finished square measures approximately 4.1 by 4.1 inches — a tidy size for joining into blankets or framing as an accent piece. The raised head gives it a tactile, almost appliqué quality that flat colorwork squares simply don't have, and because every feature is attached as you go, there's no dreaded assembly marathon at the end. Stitch one as a gift topper, or hook a whole herd for an heirloom safari blanket",
          "raw_text": "Worked in DK-weight yarn on a 3.00 mm hook, the finished square measures approximately 4.1 by 4.1 inches — a tidy size for joining into blankets or framing as an accent piece. The raised head gives it a tactile, almost appliqué quality that flat colorwork squares simply don't have, and because every feature is attached as you go, there's no dreaded assembly marathon at the end. Stitch one as a gift topper, or hook a whole herd for an heirloom safari blanket",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 3,
      "card_type": "why_love",
      "code": "why-love",
      "title": "Why You'll Love This Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "why-love-1",
          "label": "",
          "value": "The moment I finished the back-loop round on this little giraffe, I was hooked — pun fully intended. Working those dc increases in back loops only makes the head genuinely pop forward off the square, so it looks dimensional without any stuffing or padding. Then comes my favorite trick in the whole pattern: the three yellow stitches you swap in during the cream round quietly become the giraffe's neck, and you simply keep matching them with yellow hdc as each round grows outward. The neck builds itself — no sewing a strip on later. Even the snout, a tiny ch-3 topped with a (dc, 3tr, dc) fan, takes about a minute to make, and because you leave a long tail from the very first knot, attaching it at the head-and-neck join is painless. Ears, horns, and eyes go on as you work, so when the single crochet border is done, the square is truly done. It's clever, quick, and ridiculously cute — everything I want in a motif",
          "raw_text": "The moment I finished the back-loop round on this little giraffe, I was hooked — pun fully intended. Working those dc increases in back loops only makes the head genuinely pop forward off the square, so it looks dimensional without any stuffing or padding. Then comes my favorite trick in the whole pattern: the three yellow stitches you swap in during the cream round quietly become the giraffe's neck, and you simply keep matching them with yellow hdc as each round grows outward. The neck builds itself — no sewing a strip on later. Even the snout, a tiny ch-3 topped with a (dc, 3tr, dc) fan, takes about a minute to make, and because you leave a long tail from the very first knot, attaching it at the head-and-neck join is painless. Ears, horns, and eyes go on as you work, so when the single crochet border is done, the square is truly done. It's clever, quick, and ridiculously cute — everything I want in a motif",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 4,
      "card_type": "switch_things_up",
      "code": "switch-things-up",
      "title": "Switch Things Up",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "switch-1",
          "label": "",
          "value": "Color play is where this square really shines. The designer's inspiration is a real giraffe — a yellow head with brown horns — and the sample uses cream for the background with a yellow head and neck. But flip it: try a soft caramel giraffe on a pale mint or sky-blue background for a modern nursery, or a blush-pink giraffe on ivory for an unbelievably sweet baby-girl safari set. Since the head, neck, and background are the only large color areas, you could even pull all three shades from one gradient cake for a marbled effect — though I'd keep the head solid so the face reads clearly. Sizing is easy to adjust. Each additional hdc round adds roughly half an inch in DK; just keep working the three neck stitches in yellow on every added round so the neck reaches the border. Two extra rounds turns the 4.1-inch square into a 5-inch one that matches standard granny layouts. Or swap to worsted weight — Stylecraft Special Aran or Brava Worsted with a 4 mm hook — and the same rounds land near 5 inches automatically. For crisp, defined facial features, a mercerized cotton like Scheepjes Catona is gorgeous; Paintbox Simply DK is a budget-friendly acrylic with a huge shade range of giraffe golds and browns. Themed versions are fun, too: embroider brown patches down the neck with scrap yarn for a realistic giraffe, tuck a tiny crocheted red bow under the chin for the holidays, or build a full safari sampler by pairing this square with lion, elephant, and zebra motifs worked on the same background color so the set hangs together beautifully",
          "raw_text": "Color play is where this square really shines. The sample uses cream for the background with a yellow head and neck, but flip it: try a soft caramel giraffe on a pale mint or sky-blue background for a modern nursery, or a blush-pink giraffe on ivory for an unbelievably sweet baby-girl safari set. Since the head, neck, and background are the only large color areas, you could even pull all three shades from one gradient cake for a marbled effect — though I'd keep the head solid so the face reads clearly. Sizing is easy to adjust. Each additional hdc round adds roughly half an inch in DK; just keep working the three neck stitches in yellow on every added round so the neck reaches the border. Two extra rounds turns the 4.1-inch square into a 5-inch one that matches standard granny layouts. Or swap to worsted weight — Stylecraft Special Aran or Brava Worsted with a 4 mm hook — and the same rounds land near 5 inches automatically. For crisp, defined facial features, a mercerized cotton like Scheepjes Catona is gorgeous; Paintbox Simply DK is a budget-friendly acrylic with a huge shade range of giraffe golds and browns. Themed versions are fun, too: embroider brown patches down the neck with scrap yarn for a realistic giraffe, tuck a tiny crocheted red bow under the chin for the holidays, or build a full safari sampler by pairing this square with lion, elephant, and zebra motifs worked on the same background color so the set hangs together beautifully",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 5,
      "card_type": "common_mistakes",
      "code": "common-mistakes",
      "title": "Common Mistakes & How to Fix Them",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "mistake",
          "code": "mistake-1",
          "label": "Working the head's increase round",
          "value": "The dc increases are worked in back loops only on purpose — the unworked front loops form the ridge that makes the head pop forward. Insert your hook under just the single back loop of each stitch. If your giraffe's head is lying flat against the square, this is almost always why; frog back and redo the round in BLO",
          "raw_text": "The dc increases are worked in back loops only on purpose — the unworked front loops form the ridge that makes the head pop forward. Insert your hook under just the single back loop of each stitch. If your giraffe's head is lying flat against the square, this is almost always why; frog back and redo the round in BLO",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "mistake",
          "code": "mistake-2",
          "label": "A loose, gappy magic loop at the center of the head",
          "value": "After working the 13 hdc into the magic loop, pull the tail firmly to cinch the ring completely closed before you slip stitch to the top of the ch-2, then secure the tail so it can't loosen. A hole in the middle of the giraffe's face is very noticeable on a motif this small",
          "raw_text": "After working the 13 hdc into the magic loop, pull the tail firmly to cinch the ring completely closed before you slip stitch to the top of the ch-2, then secure the tail so it can't loosen. A hole in the middle of the giraffe's face is very noticeable on a motif this small",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "mistake",
          "code": "mistake-3",
          "label": "Not treating the standing chains as stitches",
          "value": "Throughout this pattern the ch-2 counts as an hdc and the ch-3 counts as a dc. If you also work a stitch into their base, every round gains extra stitches and the square starts to ruffle. Skip the base stitch, and always close the round with a slip stitch into the top chain of the standing chain",
          "raw_text": "Throughout this pattern the ch-2 counts as an hdc and the ch-3 counts as a dc. If you also work a stitch into their base, every round gains extra stitches and the square starts to ruffle. Skip the base stitch, and always close the round with a slip stitch into the top chain of the standing chain",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "mistake",
          "code": "mistake-4",
          "label": "Starting the border rounds with the",
          "value": "The three yellow sc in the second repeat mark where the neck will grow. Rotate the piece so that color-change edge sits at the bottom before you begin the hdc rounds; otherwise the neck will climb out of a side or the top and the head will look like it's floating sideways",
          "raw_text": "The three yellow sc in the second repeat mark where the neck will grow. Rotate the piece so that color-change edge sits at the bottom before you begin the hdc rounds; otherwise the neck will climb out of a side or the top and the head will look like it's floating sideways",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "mistake",
          "code": "mistake-5",
          "label": "Sloppy cream-to-yellow color changes on the neck stitches",
          "value": "Change color on the final yarn-over of the last cream stitch before the yellow section, not at the start of the first yellow stitch — that keeps the color line crisp. Drop the cream and pick it back up after the 3 yellow hdc rather than cutting, and keep the float relaxed so the fabric doesn't pucker",
          "raw_text": "Change color on the final yarn-over of the last cream stitch before the yellow section, not at the start of the first yellow stitch — that keeps the color line crisp. Drop the cream and pick it back up after the 3 yellow hdc rather than cutting, and keep the float relaxed so the fabric doesn't pucker",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "mistake",
          "code": "mistake-6",
          "label": "Cutting the snout yarn short before attaching it",
          "value": "The snout — a ch-3 with a (dc, 3tr, dc) fan worked into the first chain — is tiny, but the pattern tells you to leave a generous length of yarn before you even start, and that's your sewing tail. Leave 10–12 inches so you can stitch it securely at the point where the head meets the neck without joining a new strand",
          "raw_text": "The snout — a ch-3 with a (dc, 3tr, dc) fan worked into the first chain — is tiny, but the pattern tells you to leave a generous length of yarn before you even start, and that's your sewing tail. Leave 10–12 inches so you can stitch it securely at the point where the head meets the neck without joining a new strand",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 6,
      "card_type": "materials",
      "code": "materials",
      "title": "Materials",
      "raw_heading": "",
      "quantity": 1,
      "groups": [
        {
          "order": 1,
          "group_code": "group-1",
          "group_name": "",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-1-1",
              "label": "",
              "value": "Yarn of your choice- 3 color, the sample is made with DK Sports",
              "raw_text": "Yarn of your choice- 3 color, the sample is made with DK Sports"
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "Crochet hook- we are using a 3.00mm hook",
              "raw_text": "Crochet hook- we are using a 3.00mm hook"
            },
            {
              "order": 3,
              "row_type": "item",
              "code": "mat-1-3",
              "label": "",
              "value": "Darning Needle",
              "raw_text": "Darning Needle"
            },
            {
              "order": 4,
              "row_type": "item",
              "code": "mat-1-4",
              "label": "",
              "value": "Scissors",
              "raw_text": "Scissors"
            }
          ]
        }
      ],
      "rows": []
    },
    {
      "order": 7,
      "card_type": "abbreviations",
      "code": "abbreviations",
      "title": "Abbreviations",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "abbrev",
          "code": "abbrev-ch",
          "label": "ch",
          "value": "chain stitch",
          "raw_text": "ch = chain stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "ch",
          "meaning": "chain stitch"
        },
        {
          "order": 2,
          "row_type": "abbrev",
          "code": "abbrev-dc",
          "label": "dc",
          "value": "double crochet",
          "raw_text": "dc = double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "dc",
          "meaning": "double crochet"
        },
        {
          "order": 3,
          "row_type": "abbrev",
          "code": "abbrev-sc",
          "label": "sc",
          "value": "single crochet",
          "raw_text": "sc = single crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sc",
          "meaning": "single crochet"
        },
        {
          "order": 4,
          "row_type": "abbrev",
          "code": "abbrev-hdc",
          "label": "hdc",
          "value": "half double crochet",
          "raw_text": "hdc = half double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "hdc",
          "meaning": "half double crochet"
        },
        {
          "order": 5,
          "row_type": "abbrev",
          "code": "abbrev-inc",
          "label": "inc",
          "value": "increase",
          "raw_text": "inc = increase",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "inc",
          "meaning": "increase"
        },
        {
          "order": 6,
          "row_type": "abbrev",
          "code": "abbrev-sl-st",
          "label": "Sl St",
          "value": "slip stitch",
          "raw_text": "Sl St = slip stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "Sl St",
          "meaning": "slip stitch"
        },
        {
          "order": 7,
          "row_type": "abbrev",
          "code": "abbrev-ch-sp",
          "label": "ch-sp",
          "value": "chain space",
          "raw_text": "ch-sp = chain space",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "ch-sp",
          "meaning": "chain space"
        },
        {
          "order": 8,
          "row_type": "abbrev",
          "code": "abbrev-st",
          "label": "st",
          "value": "stitch",
          "raw_text": "st = stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "st",
          "meaning": "stitch"
        },
        {
          "order": 9,
          "row_type": "abbrev",
          "code": "abbrev-sk",
          "label": "sk",
          "value": "skip",
          "raw_text": "sk = skip",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sk",
          "meaning": "skip"
        },
        {
          "order": 10,
          "row_type": "abbrev",
          "code": "abbrev-bl",
          "label": "BL",
          "value": "back loop",
          "raw_text": "BL = back loop",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "BL",
          "meaning": "back loop"
        },
        {
          "order": 11,
          "row_type": "abbrev",
          "code": "abbrev-blo",
          "label": "BLO",
          "value": "back loop only",
          "raw_text": "BLO = back loop only",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "BLO",
          "meaning": "back loop only"
        },
        {
          "order": 12,
          "row_type": "abbrev",
          "code": "abbrev-bo",
          "label": "bo",
          "value": "bobble stitch",
          "raw_text": "bo = bobble stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "bo",
          "meaning": "bobble stitch"
        },
        {
          "order": 13,
          "row_type": "abbrev",
          "code": "abbrev-pic",
          "label": "pic",
          "value": "picot stitch",
          "raw_text": "pic = picot stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "pic",
          "meaning": "picot stitch"
        }
      ]
    },
    {
      "order": 8,
      "card_type": "part",
      "code": "main-pattern",
      "title": "Main Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "main-pattern-info-14",
          "label": "Info",
          "value": "We'll start with a basic granny square. The square uses simple color changes to form the giraffe's head and neck naturally within the pattern. Then bring your giraffe to life by creating and attaching each feature, including snout, horns, ears, and eyes, as we go. No tedious assembly at the end!",
          "raw_text": "We'll start with a basic granny square. The square uses simple color changes to form the giraffe's head and neck naturally within the pattern. Then bring your giraffe to life by creating and attaching each feature, including snout, horns, ears, and eyes, as we go. No tedious assembly at the end!",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "subhead",
          "code": "main-pattern-info-15",
          "label": "",
          "value": "The Basic Square",
          "raw_text": "The Basic Square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "main-pattern-info-16",
          "label": "Info",
          "value": "This granny square comes together in seven rounds. Rounds 1-2 create the adorable rounded shape for the giraffe's head. From Round 3 onward, we build out the square using regular granny stitches.",
          "raw_text": "This granny square comes together in seven rounds. Rounds 1-2 create the adorable rounded shape for the giraffe's head. From Round 3 onward, we build out the square using regular granny stitches.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "info",
          "code": "main-pattern-info-17",
          "label": "Info",
          "value": "In each round, we work 3 consecutive stitches in a contrasting color. These colored stitches stack vertically round after round, forming a slender rectangle that becomes the giraffe's neck.",
          "raw_text": "In each round, we work 3 consecutive stitches in a contrasting color. These colored stitches stack vertically round after round, forming a slender rectangle that becomes the giraffe's neck.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "round",
          "code": "main-pattern-round-1",
          "label": "Round 1",
          "value": "Start with a magic loop, ch2 as a standing st(count as hdc), 13hdc in this loop, sl st to the top of the first ch2.",
          "raw_text": "Round 1 Start with a magic loop, ch2 as a standing st(count as hdc), 13hdc in this loop, sl st to the top of the first ch2.",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "round",
          "code": "main-pattern-round-2",
          "label": "Round 2",
          "value": "ch3 as a standing st(count as dc), dc in the same st to form a dc inc. dc inc in the remaining sts, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 2 ch3 as a standing st(count as dc), dc in the same st to form a dc inc. dc inc in the remaining sts, sl st to the top of the first ch3, fasten off.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "info",
          "code": "main-pattern-info-18",
          "label": "Info",
          "value": "Work this round in back loops only to create dimensional texture that makes the head pop forward.",
          "raw_text": "Work this round in back loops only to create dimensional texture that makes the head pop forward.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "round",
          "code": "main-pattern-round-3",
          "label": "Round 3",
          "value": "Turn over. BLO for this round. Add new cream yarn into any st. ch3 as a standing st(count as dc), dc in the same st to form dc inc, hdc, 3sc, hdc, dc inc, ch3. [dc inc, hdc, 3sc, hdc, dc inc, ch3] rep 3 times, sl st to the top of the ch3.",
          "raw_text": "Round 3 Turn over.   BLO  for this round. Add new cream yarn into any st. ch3 as a standing st(count as dc), dc in the same st to form dc inc, hdc, 3sc, hdc, dc inc, ch3. [dc inc, hdc, 3sc, hdc, dc inc, ch3]  rep 3  times, sl st to the top of the ch3.",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "info",
          "code": "main-pattern-info-1",
          "label": "Info",
          "value": "Change to yellow color for the 3sc in the second repeat, the rest in the original cream color. Place this edge with color change at bottom.",
          "raw_text": "Change to yellow  color for the  3sc  in the  second repeat,  the rest in the original cream color .  Place  this edge with color change at bottom .",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "round",
          "code": "main-pattern-round-4-6",
          "label": "Round 4-6",
          "value": "For each round, ch2 as a standing st(count as hdc), hdc in the remaining sts, while (2hdc+ch2+2hdc) in the corner sp, sl st to the top of the first ch2. When you reach the 3 stitches worked in yellow, work your 3hdc using yellow yarn to match. After Round 6 finished, fasten off.",
          "raw_text": "Round 4-6 For each round , ch2 as a standing st(count as hdc), hdc in the remaining sts, while (2hdc+ch2+2hdc) in the corner sp, sl st to the top of the first ch2.  When you reach the 3 stitches worked in yellow, work your 3hdc using yellow yarn to match.  After Round 6 finished, fasten off.",
          "round_start": 4,
          "round_end": 6,
          "is_range": true,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 11,
          "row_type": "round",
          "code": "main-pattern-round-7",
          "label": "Round 7",
          "value": "Join new yarn in any st, ch as a standing st, sc in each st, while 3sc in each corner sp, finally sl st to the top of the first sc, fasten off.",
          "raw_text": "Round 7 Join new yarn in any st, ch as a standing st, sc in each st, while 3sc in each corner sp, finally sl st to the top of the first sc, fasten off.",
          "round_start": 7,
          "round_end": 7,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 12,
          "row_type": "subhead",
          "code": "main-pattern-info-2",
          "label": "",
          "value": "The Snout",
          "raw_text": "The Snout",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 13,
          "row_type": "info",
          "code": "main-pattern-info-19",
          "label": "Info",
          "value": "The snout is created as a separate piece. Before everything starts, leave the yarn enough length for easier attachment later.",
          "raw_text": "The snout is created as a separate piece. Before everything starts, leave the yarn enough length for easier attachment later.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 14,
          "row_type": "info",
          "code": "main-pattern-info-3",
          "label": "Info",
          "value": "Knot on your hook, ch3,(dc+3tr+dc)in the 1st ch, ch2, sl st to the 1st ch, leave the yarn and attach it to the meeting place of the head and neck.",
          "raw_text": "Knot on your hook, ch3,(dc+3tr+dc)in the 1st ch, ch2, sl st to the 1st ch, leave the yarn and attach it to the meeting place of the head and neck.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 15,
          "row_type": "info",
          "code": "main-pattern-info-20",
          "label": "Info",
          "value": "For the horns and ears, I rotate my work to make joining and crocheting easier. If you're comfortable working without flipping, go right ahead — whatever feels natural to you!",
          "raw_text": "For the horns and ears, I rotate my work to make joining and crocheting easier. If you're comfortable working without flipping, go right ahead — whatever feels natural to you!",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 16,
          "row_type": "subhead",
          "code": "main-pattern-info-4",
          "label": "",
          "value": "The Horns",
          "raw_text": "The Horns",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 17,
          "row_type": "instruction",
          "code": "main-pattern-info-21",
          "label": "Steps",
          "value": "Start with a dc increase, then we combine ch3 and another dc increase into a 3-dc-bobble. This creates the horns knobby texture and height!",
          "raw_text": "Start with a dc increase, then we combine ch3 and another dc increase into a 3-dc-bobble. This creates the horns knobby texture and height!",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 18,
          "row_type": "instruction",
          "code": "main-pattern-info-5",
          "label": "Steps",
          "value": "Turn the square 180 degrees to position its head upside down. Join yarn in the third loop of the st to the right of the giraffe's head. ch3 (count as dc), dc in the same st to form dc inc(ch3+dc). Turn the square 180 degrees to its original position, ch3(count as dc), dc inc in the top of the initial ch3. Remove the hook and insert it into the top of the ch3, grab the last dc and pull it up to complete a 3-dc-pc, ch1. Fasten off.",
          "raw_text": "Turn the square 180 degrees to position its head upside down . Join yarn in the  third loop  of the st to the right of the giraffe's head. ch3 (count as dc), dc in the same st to form  dc inc(ch3+dc) .  Turn the square 180 degrees , ch3(count as dc), dc inc in the top of the initial ch3. Remove the hook and insert it into the top of the ch3, grab the last dc and pull it up to complete a 3-dc-pc, ch1. Fasten off.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 19,
          "row_type": "info",
          "code": "main-pattern-info-6",
          "label": "Info",
          "value": "Create another horn in the same way.",
          "raw_text": "Create another horn in the same way.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 20,
          "row_type": "subhead",
          "code": "main-pattern-info-7",
          "label": "",
          "value": "The Ears",
          "raw_text": "The Ears",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 21,
          "row_type": "instruction",
          "code": "main-pattern-info-8",
          "label": "Steps",
          "value": "Turn the square 180 degrees to position its head upside down. Next to the right horns, join new yarn in the front loop of the stitch to the right. ch4, sk the last ch, sl st in the 3rd ch, sc in the 2nd ch, sl st to the first ch, join to the st where we start, fasten off. Turn the square 180 degrees back to its original position.",
          "raw_text": "Turn the square 180 degrees to position its head upside down . Next to the right horns, join new yarn in the front loop of the stitch to the right. ch4, sk the last ch, sl st in the 3rd ch, sc in the 2nd ch, sl st to the first ch, join to the st where we start, fasten off.  Turn the square 180 degrees",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 22,
          "row_type": "instruction",
          "code": "main-pattern-info-9",
          "label": "Steps",
          "value": "Join new yarn to the outer loop of the same joining st from Step 1. Work along the outer loop of this ear, ch, sk1, 2 sl st. ch-3 pic, 2 sl st, ch, sk1, sl st to the joining st, fasten off.",
          "raw_text": "Join new yarn to the outer loop of the same joining st from  Step 1 . Work along the outer loop of this ear, ch, sk1, 2 sl st. ch-3 pic, 2 sl st, ch, sk1, sl st to the joining st, fasten off.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 23,
          "row_type": "info",
          "code": "main-pattern-info-10",
          "label": "Info",
          "value": "Create another ear in the same way.",
          "raw_text": "Create another ear in the same way.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 24,
          "row_type": "subhead",
          "code": "main-pattern-info-11",
          "label": "",
          "value": "The Eyes",
          "raw_text": "The Eyes",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 25,
          "row_type": "info",
          "code": "main-pattern-info-12",
          "label": "Info",
          "value": "Leave a tail for later attachment. Start with a magic ring, ch as a standing st, 3sc in this loop, sl st to the top of the first sc, pull the tail tightly.",
          "raw_text": "Leave a tail for later attachment . Start with a magic ring, ch as a standing st, 3sc in this loop, sl st to the top of the first sc, pull the tail tightly.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 26,
          "row_type": "info",
          "code": "main-pattern-info-22",
          "label": "Info",
          "value": "Create a second eye and sew both eyes in place symmetrically.",
          "raw_text": "Create a second eye and sew both eyes in place symmetrically.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 27,
          "row_type": "info",
          "code": "main-pattern-info-13",
          "label": "Info",
          "value": "For extra personality, sew few stitches on the snout to define its lips.",
          "raw_text": "Sew few stitches on the snout to define its lips.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 9,
      "card_type": "important_notes",
      "code": "important-notes",
      "title": "Important Notes",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "note-1",
          "label": "Note",
          "value": "💡 A 3.00 mm hook with DK yarn deliberately creates a firmer fabric than the ball band suggests — that density supports the raised head and keeps the snout and eyes from sagging once attached. If your stitches look airy, go down a hook size",
          "raw_text": "💡 A 3.00 mm hook with DK yarn deliberately creates a firmer fabric than the ball band suggests — that density supports the raised head and keeps the snout and eyes from sagging once attached. If your stitches look airy, go down a hook size",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "note-2",
          "label": "Note",
          "value": "💡 Place a stitch marker in the top chain of every standing ch-2 or ch-3 the moment you make it. Every round closes with a slip stitch into that exact chain, and on a busy little square it's easy to end the round in the wrong spot",
          "raw_text": "💡 Place a stitch marker in the top chain of every standing ch-2 or ch-3 the moment you make it. Every round closes with a slip stitch into that exact chain, and on a busy little square it's easy to end the round in the wrong spot",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "note-3",
          "label": "Note",
          "value": "💡 Wind off a small bobbin of yellow — a few yards is plenty — instead of dragging the whole ball around the square. You only work 3 yellow stitches per round for the neck, and a bobbin keeps the back of your work tidy and tangle-free",
          "raw_text": "💡 Wind off a small bobbin of yellow — a few yards is plenty — instead of dragging the whole ball around the square. You only work 3 yellow stitches per round for the neck, and a bobbin keeps the back of your work tidy and tangle-free",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "info",
          "code": "note-4",
          "label": "Note",
          "value": "💡 Crochet over your cream and yellow tail ends as you work the hdc rounds. On a 4-inch motif there isn't much fabric to weave into later, so trapping the ends as you go saves the fiddliest part of finishing",
          "raw_text": "💡 Crochet over your cream and yellow tail ends as you work the hdc rounds. On a 4-inch motif there isn't much fabric to weave into later, so trapping the ends as you go saves the fiddliest part of finishing",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "info",
          "code": "note-5",
          "label": "Note",
          "value": "💡 Attach the snout, horns, ears, and eyes as you complete each stage rather than saving them all for the end — this pattern is designed for feature-as-you-go construction, and it's far easier to position the face before the border rounds bulk up the square",
          "raw_text": "💡 Attach the snout, horns, ears, and eyes as you complete each stage rather than saving them all for the end — this pattern is designed for feature-as-you-go construction, and it's far easier to position the face before the border rounds bulk up the square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "info",
          "code": "note-6",
          "label": "Note",
          "value": "💡 If you're joining a set into a blanket, block every square to the same 4.1-inch measurement first. The back-loop head round can pull the center slightly, and a light steam block evens things out without flattening the dimensional face",
          "raw_text": "💡 If you're joining a set into a blanket, block every square to the same 4.1-inch measurement first. The back-loop head round can pull the center slightly, and a light steam block evens things out without flattening the dimensional face",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "info",
          "code": "note-7",
          "label": "Note",
          "value": "💡 Gauge: the completed giraffe granny square measures approximately 4.1 × 4.1 inches",
          "raw_text": "💡 Gauge: the completed giraffe granny square measures approximately 4.1 × 4.1 inches",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "info",
          "code": "note-8",
          "label": "Note",
          "value": "💡 Color guidance: the designer's color inspiration comes from a real giraffe — a yellow head with brown horns — worked here with a cream background",
          "raw_text": "💡 Color guidance: the designer's color inspiration comes from a real giraffe — a yellow head with brown horns — worked here with a cream background",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 10,
      "card_type": "faq",
      "code": "faq",
      "title": "FAQ",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "faq",
          "code": "faq-1",
          "label": "What size is the finished giraffe granny square?",
          "value": "Approximately 4.1 × 4.1 inches when worked in DK-weight yarn with a 3.00 mm hook. Your result will vary with tension and yarn choice — worsted weight with a 4 mm hook produces a square closer to 5 inches",
          "raw_text": "Approximately 4.1 × 4.1 inches when worked in DK-weight yarn with a 3.00 mm hook. Your result will vary with tension and yarn choice — worsted weight with a 4 mm hook produces a square closer to 5 inches",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What size is the finished giraffe granny square?",
          "answer": "Approximately 4.1 × 4.1 inches when worked in DK-weight yarn with a 3.00 mm hook. Your result will vary with tension and yarn choice — worsted weight with a 4 mm hook produces a square closer to 5 inches",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "Why is the round after the head worked in back loops only?",
          "value": "Working in back loops only leaves the front loops free, which creates a ridge around the head and pushes it forward off the fabric. It's what gives the giraffe its dimensional, almost appliqué look without sewing on a separate circle",
          "raw_text": "Working in back loops only leaves the front loops free, which creates a ridge around the head and pushes it forward off the fabric. It's what gives the giraffe its dimensional, almost appliqué look without sewing on a separate circle",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Why is the round after the head worked in back loops only?",
          "answer": "Working in back loops only leaves the front loops free, which creates a ridge around the head and pushes it forward off the fabric. It's what gives the giraffe its dimensional, almost appliqué look without sewing on a separate circle",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "Do I really need three colors of yarn?",
          "value": "You need a head color, a background color (cream in the sample), and yellow for the neck, plus small scraps for details like the eyes. If you'd rather avoid mid-round color changes, you can work the neck stitches in cream and surface-crochet a yellow neck on top afterward, though the worked-in version looks cleaner",
          "raw_text": "You need a head color, a background color (cream in the sample), and yellow for the neck, plus small scraps for details like the eyes. If you'd rather avoid mid-round color changes, you can work the neck stitches in cream and surface-crochet a yellow neck on top afterward, though the worked-in version looks cleaner",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Do I really need three colors of yarn?",
          "answer": "You need a head color, a background color (cream in the sample), and yellow for the neck, plus small scraps for details like the eyes. If you'd rather avoid mid-round color changes, you can work the neck stitches in cream and surface-crochet a yellow neck on top afterward, though the worked-in version looks cleaner",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "How is the snout attached to the square?",
          "value": "The snout is made separately: ch 3, work a (dc, 3tr, dc) fan into the first chain, ch 2, and slip stitch to close. Then use the long starting tail you left and a darning needle to sew it right at the meeting point of the head and neck",
          "raw_text": "The snout is made separately: ch 3, work a (dc, 3tr, dc) fan into the first chain, ch 2, and slip stitch to close. Then use the long starting tail you left and a darning needle to sew it right at the meeting point of the head and neck",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How is the snout attached to the square?",
          "answer": "The snout is made separately: ch 3, work a (dc, 3tr, dc) fan into the first chain, ch 2, and slip stitch to close. Then use the long starting tail you left and a darning needle to sew it right at the meeting point of the head and neck",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/giraffe-granny-square-free-pattern-hero.webp",
    "data/images/giraffe-granny-square-free-pattern-step-2.webp",
    "data/images/giraffe-granny-square-free-pattern-step-3.webp",
    "data/images/giraffe-granny-square-free-pattern-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/giraffe-granny-square-free-pattern-hero.webp",
      "alt": "Giraffe Granny Square: Free Crochet Pattern — photo 1",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/giraffe-granny-square-free-pattern-hero.webp",
      "alt": "Giraffe Granny Square: Free Crochet Pattern — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/giraffe-granny-square-free-pattern-step-2.webp",
      "alt": "Giraffe Granny Square: Free Crochet Pattern — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/giraffe-granny-square-free-pattern-step-3.webp",
      "alt": "Giraffe Granny Square: Free Crochet Pattern — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/giraffe-granny-square-free-pattern-step-4.webp",
      "alt": "Giraffe Granny Square: Free Crochet Pattern — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 1
}