{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "willow-granny-square-classic-pattern",
  "title": "Willow Granny Square: A Classic Textured Motif in 7 Rounds",
  "meta_description": "Crochet the Willow Granny Square, a 7-round lacy motif with ch-1 mesh, dc clusters and chain-loop shells. Free pattern, DK yarn, 3.00mm hook, 5.5in finished",
  "published_at": "2026-07-29",
  "updated_at": "2026-07-29",
  "author": "Ruby",
  "thumbnail_url": "data/images/willow-granny-square-classic-pattern-hero.webp",
  "meta": {
    "title": "Willow Granny Square: A Classic Textured Motif in 6 Rounds",
    "pattern_name": "Willow Granny Square: A Classic Textured Motif in 6 Rounds",
    "difficulty": "Intermediate",
    "time_needed": "1-2 Hours",
    "rating": 4.8,
    "made_count": "3.4K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "DK",
      "tags": [
        "granny square",
        "free pattern",
        "textured square",
        "blanket square",
        "dk yarn",
        "magic ring",
        "double crochet",
        "join as you go",
        "afghan motif",
        "stash buster",
        "5 color pattern",
        "beginner friendly motif"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Willow Granny Square: A Classic Textured Motif in 7 Rounds",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Confident Beginner",
          "value": "You need a magic ring, dc, sc and chain spaces — nothing fancier",
          "raw_text": "You need a magic ring, dc, sc and chain spaces — nothing fancier",
          "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": "One Evening Square",
          "value": "About 45-75 minutes per square once you find your rhythm",
          "raw_text": "About 45-75 minutes per square once you find your rhythm",
          "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": "Blanket Building Block",
          "value": "Stack five colors into a heirloom afghan, cushion or bag panel",
          "raw_text": "Stack five colors into a heirloom afghan, cushion or bag panel",
          "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": "The Willow Granny Square is a seven-round motif that grows from a magic ring into a soft, airy 5.5-inch square with real personality. It starts life as a solid disc of 16 double crochet, opens up into a round of delicate (1dc + ch1) mesh, firms back up with a round of 2dc groups worked into those chain spaces, and then builds its lacework: a round of ch-5, ch-3 and ch-2 loops, a round of dc shells worked into those loops, a round of open chain arches, and a final shell round with (3dc+ch3+3dc) corners that gives the square its willow-branch drape. The definition of a willow granny square differs among crocheters, but the idea is always the same — open spaces and plenty of texture from different combinations of stitches. It's perfect for anyone who finds the classic granny square a little too plain but isn't ready for bobbles and post stitches",
          "raw_text": "The Willow Granny Square is a seven-round motif that grows from a magic ring into a soft, airy 5.5-inch square with real personality. It starts life as a solid disc of 16 double crochet, opens up into a round of delicate (1dc + ch1) mesh, firms back up with a round of 2dc groups worked into those chain spaces, and then builds its lacework: a round of ch-5, ch-3 and ch-2 loops, a round of dc shells worked into those loops, a round of open chain arches, and a final shell round with (3dc+ch3+3dc) corners that gives the square its willow-branch drape. The definition of a willow granny square differs among crocheters, but the idea is always the same — open spaces and plenty of texture from different combinations of stitches. It's perfect for anyone who finds the classic granny square a little too plain but isn't ready for bobbles and post stitches",
          "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": "Technique-wise you'll use a magic ring, ch-3 standing double crochets at the start of most rounds, chain spaces, single crochet, and a fair amount of joining and fastening off. The pattern calls for five colors: fresh yarn is joined at rounds 2, 3, 4 and 6, while rounds 5 and 7 carry straight on from the round before, and you fasten off at the end of rounds 1, 2, 3, 5 and 7. That structure is what makes it so friendly to color changes. A confident beginner who can already work a basic granny square will manage this comfortably, and most crocheters finish a square in 45 to 75 minutes, with the first one running longer while you get used to counting the ch-1 spaces",
          "raw_text": "Technique-wise you'll use a magic ring, ch-3 standing double crochets at the start of most rounds, chain spaces, single crochet, and a fair amount of joining and fastening off. The pattern calls for five colors: fresh yarn is joined at rounds 2, 3, 4 and 6, while rounds 5 and 7 carry straight on from the round before, and you fasten off at the end of rounds 1, 2, 3, 5 and 7. That structure is what makes it so friendly to color changes. A confident beginner who can already work a basic granny square will manage this comfortably, and most crocheters finish a square in 45 to 75 minutes, with the first one running longer while you get used to counting the ch-1 spaces",
          "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 sport-weight yarn on a 3.00mm hook, the finished square measures about 5.5 inches by 5.5 inches — a genuinely useful size. Sixteen of them make a generous baby blanket, four make a cushion front, and a single one makes a lovely coaster, which is the designer's own favorite use for it. It is equally at home in blankets and pillows, and even in bags and clothes. The open chain-space rounds keep it light and breathable while the dc groups give it enough body to hold its shape after blocking. Squares like this are the reason handmade blankets get passed down; they photograph beautifully and gift even better",
          "raw_text": "Worked in DK sport-weight yarn on a 3.00mm hook, the finished square measures about 5.5 inches by 5.5 inches — a genuinely useful size. Sixteen of them make a generous baby blanket, four make a cushion front, and a single one makes a lovely coaster, which is the designer's own favorite use for it. It is equally at home in blankets and pillows, and even in bags and clothes. The open chain-space rounds keep it light and breathable while the dc groups give it enough body to hold its shape after blocking. Squares like this are the reason handmade blankets get passed down; they photograph beautifully and gift even better",
          "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": "Because the pattern joins fresh yarn four times across its seven rounds and calls for five colors, this square is a color playground. My favorite palette is a soft ombré: cream center, then dusty sage, then deeper forest, with an oatmeal border to tie a whole blanket together. For a bolder look, try a rust magic-ring center with mustard mesh, teal clusters and a charcoal edge — the dark border makes the middle rounds pop. And the pattern's own color note is worth repeating: as willow granny squares have enough texture and detail themselves, they can be beautiful even in one solid color, while changing colors across rounds creates a creative look too. A cream-on-cream version looks genuinely expensive. For size changes, the math is friendly. Bump to worsted weight with a 4.00mm hook and you'll land around 6.5 to 7 inches. Go to 4-ply cotton with a 2.5mm hook and you'll shrink to about 4.5 inches — lovely for coasters, which is the designer's own ideal project for this square. Yarn-wise, Paintbox Simply DK and Scheepjes Stone Washed both give crisp stitch definition here, while Drops Safran cotton makes a firmer, more structured square for bags and baskets. Seasonally, work it in warm spice tones for autumn throws, or icy blue-and-white for a winter garland where each square hangs from a corner ch-3 space. A set of four in kitchen cottons makes a sweet housewarming gift, and the same square scales happily into blankets, pillows, bags and even clothes",
          "raw_text": "Because the pattern joins fresh yarn four times across its seven rounds and calls for five colors, this square is a color playground. My favorite palette is a soft ombré: cream center, then dusty sage, then deeper forest, with an oatmeal border to tie a whole blanket together. For a bolder look, try a rust magic-ring center with mustard mesh, teal clusters and a charcoal edge — the dark border makes the middle rounds pop. And the pattern's own color note is worth repeating: as willow granny squares have enough texture and detail themselves, they can be beautiful even in one solid color, while changing colors across rounds creates a creative look too. A cream-on-cream version looks genuinely expensive. For size changes, the math is friendly. Bump to worsted weight with a 4.00mm hook and you'll land around 6.5 to 7 inches. Go to 4-ply cotton with a 2.5mm hook and you'll shrink to about 4.5 inches — lovely for coasters, which is the designer's own ideal project for this square. Yarn-wise, Paintbox Simply DK and Scheepjes Stone Washed both give crisp stitch definition here, while Drops Safran cotton makes a firmer, more structured square for bags and baskets. Seasonally, work it in warm spice tones for autumn throws, or icy blue-and-white for a winter garland where each square hangs from a corner ch-3 space. A set of four in kitchen cottons makes a sweet housewarming gift, and the same square scales happily into blankets, pillows, bags and even clothes",
          "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": "Losing the magic ring center — the",
          "value": "After you slip stitch into the top of the ch-3 and before you fasten off round 1, give the magic ring tail a firm tug to close it completely, then weave that tail in a full three inches, splitting the yarn plies as you go. A magic ring that is only tightened, not secured, will always creep open. If you're nervous about it, thread the tail and stitch two tiny anchoring stitches across the center before weaving",
          "raw_text": "After you slip stitch into the top of the ch-3 and before you fasten off round 1, give the magic ring tail a firm tug to close it completely, then weave that tail in a full three inches, splitting the yarn plies as you go. A magic ring that is only tightened, not secured, will always creep open. If you're nervous about it, thread the tail and stitch two tiny anchoring stitches across the center before weaving",
          "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": "Ending up with 15 or 17 double crochet",
          "value": "Remember the ch-3 counts as your first dc, so you work 15 more double crochet into the ring, not 16. Count before you slip stitch to join: you should have 16 posts total including the ch-3. This number matters enormously because round 2 works one (1dc + ch1) into each stitch and round 3 builds directly on the chain spaces round 2 creates, so a miscount here compounds into a lopsided square by the border rounds",
          "raw_text": "Remember the ch-3 counts as your first dc, so you work 15 more double crochet into the ring, not 16. Count before you slip stitch to join: you should have 16 posts total including the ch-3. This number matters enormously because round 2 works one (1dc + ch1) into each stitch and round 3 builds directly on the chain spaces round 2 creates, so a miscount here compounds into a lopsided square by the border rounds",
          "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": "Working the cluster round into the",
          "value": "Round 3 places 2dc into each ch-1 space created by round 2, with a single dc into the stitch between. It's easy to accidentally poke your hook into the top of the dc post instead of the gap beside it. Slow down and look for the visible hole — if your fabric is stiffening and refusing to lie flat, you're stitching into the wrong place. Frogging this one round is far quicker than trying to block out the error",
          "raw_text": "Round 3 places 2dc into each ch-1 space created by round 2, with a single dc into the stitch between. It's easy to accidentally poke your hook into the top of the dc post instead of the gap beside it. Slow down and look for the visible hole — if your fabric is stiffening and refusing to lie flat, you're stitching into the wrong place. Frogging this one round is far quicker than trying to block out the error",
          "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": "Losing count during round 4's ch-5",
          "value": "Round 4 has a rhythm of sk2 between every single crochet, and the chain lengths change in a set order: 5, then 2, then 3, then 2. Say it out loud as you go, or place a stitch marker at the start of each of the four repeats. The ch-5 loops become the corners once round 5 works (4dc+ch3+5dc) into them, so if those loops land in the wrong place the square won't be square. Check after the first repeat that you can see one long loop and one medium loop before committing to the other three",
          "raw_text": "Round 4 has a rhythm of sk2 between every single crochet, and the chain lengths change in a set order: 5, then 2, then 3, then 2. Say it out loud as you go, or place a stitch marker at the start of each of the four repeats. The ch-5 loops become the corners once round 5 works (4dc+ch3+5dc) into them, so if those loops land in the wrong place the square won't be square. Check after the first repeat that you can see one long loop and one medium loop before committing to the other three",
          "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": "Five color sections leaving lumpy knots",
          "value": "Never knot new yarn on. Join by pulling a loop through a stitch and beginning your ch-3 standing double crochet directly, leaving a six-inch tail. Weave each tail in a different direction along the back of a dc post so the bulk is distributed rather than stacked in one corner. Ten tails per square sounds like a lot, but weaving them as you finish each color section takes thirty seconds and saves a miserable session at the end",
          "raw_text": "Never knot new yarn on. Join by pulling a loop through a stitch and beginning your ch-3 standing double crochet directly, leaving a six-inch tail. Weave each tail in a different direction along the back of a dc post so the bulk is distributed rather than stacked in one corner. Ten tails per square sounds like a lot, but weaving them as you finish each color section takes thirty seconds and saves a miserable session at the end",
          "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": "Squares that come out different sizes across a blanket",
          "value": "The ch-3 standing stitch is the usual culprit — some crocheters pull it tight, others leave it loose, and tension drifts across a long project. Make your first square, block it, measure it, and then measure every fifth square against it. If they're growing, drop to a 2.75mm hook; if shrinking, move up to 3.25mm. Blocking all squares to the same 5.5-inch template before joining will rescue small variations",
          "raw_text": "The ch-3 standing stitch is the usual culprit — some crocheters pull it tight, others leave it loose, and tension drifts across a long project. Make your first square, block it, measure it, and then measure every fifth square against it. If they're growing, drop to a 2.75mm hook; if shrinking, move up to 3.25mm. Blocking all squares to the same 5.5-inch template before joining will rescue small variations",
          "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- 5 colors, the sample is made with DK sports and finished at size 5.5 inches by 5.5 inches.",
              "raw_text": "Yarn of your choice- 5 colors, the sample is made with DK sports and finished at size 5.5 inches by 5.5 inches."
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "Crochet hook – 3.00mm hook",
              "raw_text": "Crochet hook – 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-rep",
          "label": "rep",
          "value": "repeat",
          "raw_text": "rep = repeat",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "rep",
          "meaning": "repeat"
        },
        {
          "order": 2,
          "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": 3,
          "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": 4,
          "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": 5,
          "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": 6,
          "row_type": "abbrev",
          "code": "abbrev-yo",
          "label": "yo",
          "value": "yarn over",
          "raw_text": "yo = yarn over",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "yo",
          "meaning": "yarn over"
        },
        {
          "order": 7,
          "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": 8,
          "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": 9,
          "row_type": "abbrev",
          "code": "abbrev-sl-st",
          "label": "sl st",
          "value": "slip stitch for joining to different rounds.",
          "raw_text": "sl st = slip stitch for joining to different rounds.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sl st",
          "meaning": "slip stitch for joining to different rounds."
        }
      ]
    },
    {
      "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-intro",
          "label": "Info",
          "value": "To create the willow granny square's signature lacework, we will work from the following aspects:\nChain Spaces: Work generous chain loops (ch-3 to ch-5) between stitch clusters instead of solid stitches. These create the open, airy fabric.\nTall Stitches: Use double or even treble crochets that naturally create vertical space and enhance the flowing effect.\nStrategic Placement: Skip stitches between clusters, leaving deliberate gaps that form the lacy pattern.\nCorner Construction: Work (dc, ch-3, dc) in corners rather than solid clusters, maintaining openness throughout.\nJoining Rounds: Connect rounds with chain arches instead of continuous stitches, preserving that see-through quality.",
          "raw_text": "To create the willow granny square's signature lacework, we will work from the following aspects:\nChain Spaces: Work generous chain loops (ch-3 to ch-5) between stitch clusters instead of solid stitches. These create the open, airy fabric.\nTall Stitches: Use double or even treble crochets that naturally create vertical space and enhance the flowing effect.\nStrategic Placement: Skip stitches between clusters, leaving deliberate gaps that form the lacy pattern.\nCorner Construction: Work (dc, ch-3, dc) in corners rather than solid clusters, maintaining openness throughout.\nJoining Rounds: Connect rounds with chain arches instead of continuous stitches, preserving that see-through quality.",
          "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": "main-pattern-info-r1",
          "label": "Info",
          "value": "Round 1 is the willow center. Step by step: start with a magic ring; make ch3 as the standing stitch, which counts as the first dc; work 15dc into the ring so there are 16 dc posts in total; sl st into the top of the ch3 to join, then fasten off.",
          "raw_text": "Round 1 is the willow center. Step by step: start with a magic ring; make ch3 as the standing stitch, which counts as the first dc; work 15dc into the ring so there are 16 dc posts in total; sl st into the top of the ch3 to join, then fasten off.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "round",
          "code": "main-pattern-round-1",
          "label": "Round 1",
          "value": "magic ring, ch3 as standing st(count as dc), 15dc, slst into top of ch3, fasten off.",
          "raw_text": "Round 1 magic ring, ch3 as standing st(count as dc), 15dc, slst into top of ch3, fasten off.",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "info",
          "code": "main-pattern-info-r2",
          "label": "Info",
          "value": "Round 2 is the first layer of ray. Step by step: join new yarn into any st; make ch3 as a standing stitch (counts as 1dc) and ch1; then work (1dc + ch1) in the next st and repeat that 15 times all the way around; sl st to the top of the first ch3, then fasten off. This opens the solid center into evenly spaced chain spaces.",
          "raw_text": "Round 2 is the first layer of ray. Step by step: join new yarn into any st; make ch3 as a standing stitch (counts as 1dc) and ch1; then work (1dc + ch1) in the next st and repeat that 15 times all the way around; sl st to the top of the first ch3, then fasten off. This opens the solid center into evenly spaced chain spaces.",
          "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-2",
          "label": "Round 2",
          "value": "Join new yarn into any st, ch3 as a standing st(count as 1dc), ch1. *(1dc+ch1) in next st* rep 15 times, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 2 Join new yarn into any st, ch3 as a standing st(count as 1dc), ch1. *(1dc+ch1) in next st* rep 15 times, 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": 6,
          "row_type": "info",
          "code": "main-pattern-info-r3",
          "label": "Info",
          "value": "Round 3 is a round of a combination of dc. Step by step: join new yarn into any st; make ch3 as a standing stitch (counts as 1dc) and work 2dc in the next ch-sp; then repeat 1dc in the next st followed by 2dc in the next ch-sp, 15 times around; sl st to the top of the first ch3, then fasten off. The 2dc go into the chain spaces made by round 2, never into the tops of the dc posts.",
          "raw_text": "Round 3 is a round of a combination of dc. Step by step: join new yarn into any st; make ch3 as a standing stitch (counts as 1dc) and work 2dc in the next ch-sp; then repeat 1dc in the next st followed by 2dc in the next ch-sp, 15 times around; sl st to the top of the first ch3, then fasten off. The 2dc go into the chain spaces made by round 2, never into the tops of the dc posts.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "round",
          "code": "main-pattern-round-3",
          "label": "Round 3",
          "value": "Join new yarn into any st, ch3 as a standing st(count as 1dc), 2dc in next ch-sp. *1dc in next st, 2dc in next ch-sp* rep 15 times, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 3 Join new yarn into any st, ch3 as a standing st(count as 1dc), 2dc in next ch-sp. *1dc in next st, 2dc in next ch-sp* rep 15 times, sl st to the top of the first ch3, fasten off.",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "info",
          "code": "main-pattern-info-r4",
          "label": "Info",
          "value": "Round 4 builds the lacework skeleton: single crochet anchors with chain loops between them, skipping 2 stitches each time. Step by step: join new yarn into any st and make ch1 as a standing stitch; 1sc in this same st; then ch5, sk2, 1sc in the next st, ch2, sk2, 1sc in the next st, ch3, sk2, 1sc in the next st, ch2; work the starred repeat 3 more times and sl st to the top of the first sc. This round is not fastened off — the ch-5 loops become the four corners of the square in round 5.",
          "raw_text": "Round 4 builds the lacework skeleton: single crochet anchors with chain loops between them, skipping 2 stitches each time. Step by step: join new yarn into any st and make ch1 as a standing stitch; 1sc in this same st; then ch5, sk2, 1sc in the next st, ch2, sk2, 1sc in the next st, ch3, sk2, 1sc in the next st, ch2; work the starred repeat 3 more times and sl st to the top of the first sc. This round is not fastened off — the ch-5 loops become the four corners of the square in round 5.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "round",
          "code": "main-pattern-round-4",
          "label": "Round 4",
          "value": "Join new yarn into any st, ch1 as a standing st. 1sc in this st, ch5, sk2, 1sc in next st, ch2, sk2, 1sc in next st, ch3, sk2, 1sc in next st, ch2. *sk2, 1sc in next st, ch5, sk2, 1sc in next st, ch2, sk2, 1sc in next st, ch3, sk2, 1sc in next st, ch2* rep 3 times, sl st to the top of the first sc.",
          "raw_text": "Round 4 Join new yarn into any st, ch1 as a standing st. 1sc in this st, ch5, sk2, 1sc in next st, ch2, sk2, 1sc in next st, ch3, sk2, 1sc in next st, ch2. *sk2, 1sc in next st, ch5, sk2, 1sc in next st, ch2, sk2, 1sc in next st, ch3, sk2, 1sc in next st, ch2* rep 3 times, sl st to the top of the first sc.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "info",
          "code": "main-pattern-info-r5",
          "label": "Info",
          "value": "Round 5 fills the loops with dc shells. Step by step: all stitches work in ch-sp only for this round; sl st across to the next ch-5 space to begin; ch3 as a standing stitch (counts as 1dc), which is why the first corner reads (4dc+ch3+5dc) while every later corner is a full (5dc+ch3+5dc); then 1sc, 5dc, 1sc in the following spaces; work the starred repeat 3 more times, sl st to the top of the first ch3 and fasten off.",
          "raw_text": "Round 5 fills the loops with dc shells. Step by step: all stitches work in ch-sp only for this round; sl st across to the next ch-5 space to begin; ch3 as a standing stitch (counts as 1dc), which is why the first corner reads (4dc+ch3+5dc) while every later corner is a full (5dc+ch3+5dc); then 1sc, 5dc, 1sc in the following spaces; work the starred repeat 3 more times, sl st to the top of the first ch3 and fasten off.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 11,
          "row_type": "round",
          "code": "main-pattern-round-5",
          "label": "Round 5",
          "value": "All stitches work in ch-sp only for this round.  sl st to the next ch-sp, ch3 as a standing st(count as 1dc), (4dc+ch3+5dc), 1sc, 5dc, 1sc. *(5dc+ch3+5dc), 1sc, 5dc, 1sc* rep 3 times, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 5 All stitches work in ch-sp only for this round.  sl st to the next ch-sp, ch3 as a standing st(count as 1dc), (4dc+ch3+5dc), 1sc, 5dc, 1sc. *(5dc+ch3+5dc), 1sc, 5dc, 1sc* rep 3 times, sl st to the top of the first ch3, fasten off.",
          "round_start": 5,
          "round_end": 5,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 12,
          "row_type": "info",
          "code": "main-pattern-info-r6",
          "label": "Info",
          "value": "Round 6 opens the fabric back up with chain arches instead of continuous stitches. Step by step: join new yarn to the top of the first ch3 from the last round; ch3 as a standing stitch (counts as 1dc), ch5, then (1sc+ch3+1sc) in the next ch-sp for the corner, ch5, sk5, 1dc in the next sc, ch3, sk2, 1sc in the next dc, ch3; work the starred repeat 3 more times and sl st to the top of the ch3. This round is not fastened off.",
          "raw_text": "Round 6 opens the fabric back up with chain arches instead of continuous stitches. Step by step: join new yarn to the top of the first ch3 from the last round; ch3 as a standing stitch (counts as 1dc), ch5, then (1sc+ch3+1sc) in the next ch-sp for the corner, ch5, sk5, 1dc in the next sc, ch3, sk2, 1sc in the next dc, ch3; work the starred repeat 3 more times and sl st to the top of the ch3. This round is not fastened off.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 13,
          "row_type": "round",
          "code": "main-pattern-round-6",
          "label": "Round 6",
          "value": "Join new yarn to the top of the first ch3 from the last round. ch3 as a standing st(count as 1dc), ch5, (1sc+ch3+1sc) in next ch-sp, ch5,  sk5, 1dc in next sc, ch3, sk2, 1sc in next dc, ch3. *1dc in next sc, ch5,(1sc+ch3+1sc) in next ch-sp, ch5, sk5, 1dc in next sc, ch3, sk2, 1sc in next dc, ch3* rep 3 times, sl st to the top of the ch3.",
          "raw_text": "Round 6 Join new yarn to the top of the first ch3 from the last round. ch3 as a standing st(count as 1dc), ch5, (1sc+ch3+1sc) in next ch-sp, ch5,  sk5, 1dc in next sc, ch3, sk2, 1sc in next dc, ch3. *1dc in next sc, ch5,(1sc+ch3+1sc) in next ch-sp, ch5, sk5, 1dc in next sc, ch3, sk2, 1sc in next dc, ch3* rep 3 times, sl st to the top of the ch3.",
          "round_start": 6,
          "round_end": 6,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 14,
          "row_type": "info",
          "code": "main-pattern-info-r7",
          "label": "Info",
          "value": "Round 7 is the final shell round and, like round 5, is worked into the chain spaces only. Step by step: sl st across to the next ch-sp; ch3 as a standing stitch (counts as 1dc) plus 4dc in that same ch-sp, so the opening group is 5dc; then (3dc+ch3+3dc) in the corner space, followed by (5dc), (3dc) and (3dc) in the next spaces; work the starred repeat 3 more times, sl st to the top of the first ch3 and fasten off. The ch-3 in each (3dc+ch3+3dc) is the finished corner of the square.",
          "raw_text": "Round 7 is the final shell round and, like round 5, is worked into the chain spaces only. Step by step: sl st across to the next ch-sp; ch3 as a standing stitch (counts as 1dc) plus 4dc in that same ch-sp, so the opening group is 5dc; then (3dc+ch3+3dc) in the corner space, followed by (5dc), (3dc) and (3dc) in the next spaces; work the starred repeat 3 more times, sl st to the top of the first ch3 and fasten off. The ch-3 in each (3dc+ch3+3dc) is the finished corner of the square.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 15,
          "row_type": "round",
          "code": "main-pattern-round-7",
          "label": "Round 7",
          "value": "All stitches work in ch-sp only for this Round. sl st to the next ch-sp,  ch3 as a standing st(count as 1dc), 4dc in this ch-sp, (3dc+ch3+3dc) , (5dc), (3dc), (3dc). *(5dc), (3dc+ch3+3dc), (5dc), (3dc), (3dc)* rep 3 times, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 7 All stitches work in ch-sp only for this Round. sl st to the next ch-sp,  ch3 as a standing st(count as 1dc), 4dc in this ch-sp, (3dc+ch3+3dc) , (5dc), (3dc), (3dc). *(5dc), (3dc+ch3+3dc), (5dc), (3dc), (3dc)* rep 3 times, sl st to the top of the first ch3, fasten off.",
          "round_start": 7,
          "round_end": 7,
          "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": "💡 The sample uses DK sport-weight yarn with a 3.00mm hook and finishes at 5.5 inches by 5.5 inches. That's a slightly tighter combination than the ball band suggests, and it's intentional — it keeps the open chain-space rounds from gaping. If your fabric feels stiff rather than firm, go up to 3.25mm before you change yarn",
          "raw_text": "💡 The sample uses DK sport-weight yarn with a 3.00mm hook and finishes at 5.5 inches by 5.5 inches. That's a slightly tighter combination than the ball band suggests, and it's intentional — it keeps the open chain-space rounds from gaping. If your fabric feels stiff rather than firm, go up to 3.25mm before you change yarn",
          "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": "💡 Rounds 2, 3 and 4 all begin with fresh yarn joined into any stitch, which means you can start those rounds in a different position each time. Deliberately rotating your starting point a quarter turn distributes the join seam so it never forms a visible vertical line up one side of the square. Round 6 is the exception — it joins to the top of the first ch3 of round 5",
          "raw_text": "💡 Rounds 2, 3 and 4 all begin with fresh yarn joined into any stitch, which means you can start those rounds in a different position each time. Deliberately rotating your starting point a quarter turn distributes the join seam so it never forms a visible vertical line up one side of the square. Round 6 is the exception — it joins to the top of the first ch3 of round 5",
          "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": "💡 Place a stitch marker in the top of the ch-3 as soon as you make it. On rounds 2 and 3 the ch-3 blends into the surrounding stitches and it's genuinely hard to spot when you come back around to slip stitch into it",
          "raw_text": "💡 Place a stitch marker in the top of the ch-3 as soon as you make it. On rounds 2 and 3 the ch-3 blends into the surrounding stitches and it's genuinely hard to spot when you come back around to slip stitch into it",
          "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": "💡 Block every square before you join them. Pin to 5.5 inches square, spray with water, and let dry completely. The open chain-space rounds relax dramatically with blocking and the difference between a blocked and unblocked willow square is night and day",
          "raw_text": "💡 Block every square before you join them. Pin to 5.5 inches square, spray with water, and let dry completely. The open chain-space rounds relax dramatically with blocking and the difference between a blocked and unblocked willow square is night and day",
          "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": "💡 For a five-color square, wind small 10-gram mini-balls of each color before you start rather than working from full skeins. You'll only use a few yards per color, and mini-balls stop five full skeins from tangling in your lap",
          "raw_text": "💡 For a five-color square, wind small 10-gram mini-balls of each color before you start rather than working from full skeins. You'll only use a few yards per color, and mini-balls stop five full skeins from tangling in your lap",
          "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 making a blanket, work all your round-1 centers first, then all your round-2s, and so on in production-line fashion. It's much faster than finishing squares one at a time, and it keeps your tension consistent within each round across the whole project",
          "raw_text": "💡 If you're making a blanket, work all your round-1 centers first, then all your round-2s, and so on in production-line fashion. It's much faster than finishing squares one at a time, and it keeps your tension consistent within each round across the whole project",
          "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": "Color Suggestion",
          "value": "💡 As willow granny squares have enough texture and details themselves, they can be beautiful even in one solid color. Changing colors across rounds can also create a creative look too",
          "raw_text": "💡 As willow granny squares have enough texture and details themselves, they can be beautiful even in one solid color. Changing colors across rounds can also create a creative look too",
          "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": "Do I have to fasten off and rejoin new yarn between rounds?",
          "value": "The pattern fastens off at the end of rounds 1, 2, 3, 5 and 7 and joins fresh yarn at rounds 2, 3, 4 and 6, so each color band can be worked separately without carrying yarn — that's what gives the square its crisp bands. If you're working in one solid color, you can absolutely carry on without cutting: just slip stitch to join, then ch-3 to begin the next round as usual",
          "raw_text": "The pattern fastens off at the end of rounds 1, 2, 3, 5 and 7 and joins fresh yarn at rounds 2, 3, 4 and 6, so each color band can be worked separately without carrying yarn — that's what gives the square its crisp bands. If you're working in one solid color, you can absolutely carry on without cutting: just slip stitch to join, then ch-3 to begin the next round as usual",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Do I have to fasten off and rejoin new yarn between rounds?",
          "answer": "The pattern fastens off at the end of rounds 1, 2, 3, 5 and 7 and joins fresh yarn at rounds 2, 3, 4 and 6, so each color band can be worked separately without carrying yarn — that's what gives the square its crisp bands. If you're working in one solid color, you can absolutely carry on without cutting: just slip stitch to join, then ch-3 to begin the next round as usual",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "How many squares do I need for a baby blanket?",
          "value": "5.5 inches finished, a 6 by 7 layout of 42 squares gives you roughly a 33 by 38.5 inch blanket before joining and border, which is a good pram or crib size. Add a couple of inches for your joining method and edging",
          "raw_text": "5.5 inches finished, a 6 by 7 layout of 42 squares gives you roughly a 33 by 38.5 inch blanket before joining and border, which is a good pram or crib size. Add a couple of inches for your joining method and edging",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many squares do I need for a baby blanket?",
          "answer": "5.5 inches finished, a 6 by 7 layout of 42 squares gives you roughly a 33 by 38.5 inch blanket before joining and border, which is a good pram or crib size. Add a couple of inches for your joining method and edging",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "Can I make this square in worsted weight yarn instead of DK?",
          "value": "Yes, and it's a popular substitution. Use a 4.00mm or 4.5mm hook and expect a finished square around 6.5 to 7 inches, which means you'll need fewer squares for the same blanket size. Make one test square and measure before committing to a full palette",
          "raw_text": "Yes, and it's a popular substitution. Use a 4.00mm or 4.5mm hook and expect a finished square around 6.5 to 7 inches, which means you'll need fewer squares for the same blanket size. Make one test square and measure before committing to a full palette",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I make this square in worsted weight yarn instead of DK?",
          "answer": "Yes, and it's a popular substitution. Use a 4.00mm or 4.5mm hook and expect a finished square around 6.5 to 7 inches, which means you'll need fewer squares for the same blanket size. Make one test square and measure before committing to a full palette",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "Which joining method works best for these squares?",
          "value": "Round 7 finishes with (3dc+ch3+3dc) corners and firm 5dc and 3dc groups along each side, so a flat slip-stitch or whip-stitch join through the back loops keeps the lacy edge visible and undistorted, with the ch-3 corner spaces marking where squares meet. For a more decorative finish, a single crochet join in a contrasting color adds a defined grid line between squares",
          "raw_text": "Round 7 finishes with (3dc+ch3+3dc) corners and firm 5dc and 3dc groups along each side, so a flat slip-stitch or whip-stitch join through the back loops keeps the lacy edge visible and undistorted, with the ch-3 corner spaces marking where squares meet. For a more decorative finish, a single crochet join in a contrasting color adds a defined grid line between squares",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Which joining method works best for these squares?",
          "answer": "Round 7 finishes with (3dc+ch3+3dc) corners and firm 5dc and 3dc groups along each side, so a flat slip-stitch or whip-stitch join through the back loops keeps the lacy edge visible and undistorted, with the ch-3 corner spaces marking where squares meet. For a more decorative finish, a single crochet join in a contrasting color adds a defined grid line between squares",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "My square is ruffling at the edges",
          "value": "Ruffling almost always means extra stitches crept in during round 3 — check that you worked exactly 2dc in each ch-1 space and 1dc in the stitch between, with no doubling up. It can also come from working round 5 or round 7 into stitches instead of chain spaces only. If your stitch counts are correct and it still ripples slightly, wet blocking will usually settle it completely",
          "raw_text": "Ruffling almost always means extra stitches crept in during round 3 — check that you worked exactly 2dc in each ch-1 space and 1dc in the stitch between, with no doubling up. It can also come from working round 5 or round 7 into stitches instead of chain spaces only. If your stitch counts are correct and it still ripples slightly, wet blocking will usually settle it completely",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "My square is ruffling at the edges instead of lying flat. What went wrong?",
          "answer": "Ruffling almost always means extra stitches crept in during round 3 — check that you worked exactly 2dc in each ch-1 space and 1dc in the stitch between, with no doubling up. It can also come from working round 5 or round 7 into stitches instead of chain spaces only. If your stitch counts are correct and it still ripples slightly, wet blocking will usually settle it completely",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/willow-granny-square-classic-pattern-hero.webp",
    "data/images/willow-granny-square-classic-pattern-step-2.webp",
    "data/images/willow-granny-square-classic-pattern-step-3.webp",
    "data/images/willow-granny-square-classic-pattern-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/willow-granny-square-classic-pattern-hero.webp",
      "alt": "Willow Granny Square: A Classic Textured Motif in 7 Rounds — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/willow-granny-square-classic-pattern-step-2.webp",
      "alt": "Willow Granny Square: A Classic Textured Motif in 7 Rounds — photo 2",
      "is_featured": false
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/willow-granny-square-classic-pattern-hero.webp",
      "alt": "Willow Granny Square: A Classic Textured Motif in 7 Rounds — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/willow-granny-square-classic-pattern-step-2.webp",
      "alt": "Willow Granny Square: A Classic Textured Motif in 7 Rounds — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/willow-granny-square-classic-pattern-step-3.webp",
      "alt": "Willow Granny Square: A Classic Textured Motif in 7 Rounds — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/willow-granny-square-classic-pattern-step-4.webp",
      "alt": "Willow Granny Square: A Classic Textured Motif in 7 Rounds — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 2
}