{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "window-flower-granny-square",
  "title": "Unique Window Flower Granny Square – Free Crochet Pattern",
  "meta_description": "Crochet this window flower granny square free pattern with airy openwork and treble bobbles — a quick 6-round square for shawls, runners & décor",
  "published_at": "2026-07-11",
  "updated_at": "2026-07-11",
  "author": "Ruby",
  "thumbnail_url": "data/images/window-flower-granny-square-hero.webp",
  "meta": {
    "title": "Unique Window Flower Granny Square – Free Crochet Pattern",
    "pattern_name": "Unique Window Flower Granny Square – Free Crochet Pattern",
    "difficulty": "Intermediate",
    "time_needed": "1-2 Hours",
    "rating": 4.8,
    "made_count": "1.1K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "Sport",
      "tags": [
        "granny square",
        "free crochet pattern",
        "flower granny square",
        "openwork crochet",
        "treble bobble",
        "lace crochet",
        "crochet motif",
        "summer crochet",
        "blanket square",
        "crochet flower",
        "one color crochet",
        "crochet square"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Unique Window Flower 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 treble crochet and simple bobble stitches",
          "raw_text": "Comfortable with treble crochet and simple bobble 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": "hero-info-2",
          "label": "Quick Make",
          "value": "1-2 hours of relaxing hook time per square",
          "raw_text": "1-2 hours of relaxing hook time per 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": "hero-info-3",
          "label": "Airy Elegance",
          "value": "Lacy window openwork perfect for shawls, runners, and wall art",
          "raw_text": "Lacy window openwork perfect for shawls, runners, and wall art",
          "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 Window Flower Granny Square takes the classic granny motif and turns it into something that looks like stained glass in yarn. A bobble-petaled flower blooms at the center, and around it the openwork rounds form delicate little windows of chain-space mesh that let light pass right through the fabric. The intricate combination of chain spaces and cluster stitches creates elegant oval openings throughout, and the double crochet clusters alternating with chain loops give it that delicate, almost vintage doily-like appearance that's absolutely stunning when light filters through. Worked in a single color with a 3.00mm hook, it's perfect for crocheters who are a bit tired of dense, solid squares and want something with real breathing room",
          "raw_text": "The Window Flower Granny Square takes the classic granny motif and turns it into something that looks like stained glass in yarn. A bobble-petaled flower blooms at the center, and around it the openwork rounds form delicate little windows of chain-space mesh that let light pass right through the fabric. The intricate combination of chain spaces and cluster stitches creates elegant oval openings throughout, and the double crochet clusters alternating with chain loops give it that delicate, almost vintage doily-like appearance that's absolutely stunning when light filters through. Worked in a single color with a 3.00mm hook, it's perfect for crocheters who are a bit tired of dense, solid squares and want something with real breathing room",
          "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": "The heart of this design is the bobble stitch, in two sizes: the 2-dc-bo — two incomplete double crochets closed together with one final yarn over — forms the flower petals, while its taller cousin the 2-tr-bo, built the same way from two incomplete treble crochets, sits at the corners of the window rounds. If you can chain, treble, and count your stitches, you can absolutely manage both — each bobble is built from moves you already know, just paused one step early. Across six rounds you'll combine those bobbles with chain-space lattice work, which puts this square comfortably at an intermediate level. Expect roughly one to two hours per square once the rhythm clicks",
          "raw_text": "The heart of this design is the bobble stitch, in two sizes: the 2-dc-bo — two incomplete double crochets closed together with one final yarn over — forms the flower petals, while its taller cousin the 2-tr-bo, built the same way from two incomplete treble crochets, sits at the corners of the window rounds. If you can chain, treble, and count your stitches, you can absolutely manage both — each bobble is built from moves you already know, just paused one step early. Across six rounds you'll combine those bobbles with chain-space lattice work, which puts this square comfortably at an intermediate level. Expect roughly one to two hours per square once the rhythm clicks",
          "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": "Finished, the square measures approximately 4.72 by 4.72 inches — a tidy 12cm motif with beautiful drape and a light, airy hand thanks to all that openwork. It looks stunning held up against a window. Join a batch into a lightweight summer shawl or a table runner, frame a single square as wall art, or gift a set of coasters-turned-heirlooms. Because it uses just one color and modest yardage, it's also a lovely way to showcase a single precious skein",
          "raw_text": "Finished, the square measures approximately 4.72 by 4.72 inches — a tidy 12cm motif with beautiful drape and a light, airy hand thanks to all that openwork. It looks stunning held up against a window. Join a batch into a lightweight summer shawl or a table runner, frame a single square as wall art, or gift a set of coasters-turned-heirlooms. Because it uses just one color and modest yardage, it's also a lovely way to showcase a single precious skein",
          "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": "I'll be honest — the first time I read '2-tr-bo' I braced myself, and then it turned out to be one of the most satisfying stitches I've made all year. You work two trebles almost to the end, hold those three loops on the hook, and close them with one yarn over — and suddenly there's this plump little bobble sitting on your square. Six rounds later you're holding a motif that genuinely looks like a flower framed in a lattice window. What I love most is how forgiving the single-color design is: no ends from color changes, no tension shifts between yarns, just you, one skein, and a 3.00mm hook. The openwork rounds fly by faster than solid granny clusters, so each square finishes in an evening episode or two. And when you block it — oh, when you block it — those chain-space windows snap open and the whole thing transforms from crumpled doily to crisp lacework. It's the kind of square you make one of 'just to try,' and then somehow there are fourteen on your table",
          "raw_text": "I'll be honest — the first time I read '2-tr-bo' I braced myself, and then it turned out to be one of the most satisfying stitches I've made all year. You work two trebles almost to the end, hold those three loops on the hook, and close them with one yarn over — and suddenly there's this plump little bobble sitting on your square. Six rounds later you're holding a motif that genuinely looks like a flower framed in a lattice window. What I love most is how forgiving the single-color design is: no ends from color changes, no tension shifts between yarns, just you, one skein, and a 3.00mm hook. The openwork rounds fly by faster than solid granny clusters, so each square finishes in an evening episode or two. And when you block it — oh, when you block it — those chain-space windows snap open and the whole thing transforms from crumpled doily to crisp lacework. It's the kind of square you make one of 'just to try,' and then somehow there are fourteen on your table",
          "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": "Completing each stitch fully inside a",
          "value": "The bobble only works if each stitch is left incomplete. After the final 'yo and pull through 2 loops' of that stitch, STOP — one loop from it stays on your hook. After two incomplete stitches you should have exactly 3 loops on the hook; only then do the final yarn over and pull through all 3. If your bobble lies flat instead of popping, you closed the stitches individually",
          "raw_text": "The bobble only works if each stitch is left incomplete. After the final 'yo and pull through 2 loops' of that stitch, STOP — one loop from it stays on your hook. After two incomplete stitches you should have exactly 3 loops on the hook; only then do the final yarn over and pull through all 3. If your bobble lies flat instead of popping, you closed the stitches individually",
          "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": "Mixing up the yarn overs on the two bobbles",
          "value": "This pattern uses two bobbles: the 2-dc-bo (the flower petals, Rounds 2-3) starts each stitch with ONE yarn over, while the 2-tr-bo (the window corners, Rounds 3-4) needs a yarn over TWICE before inserting the hook. Use single yarn overs in a 2-tr-bo and the corner bobbles come out short and sit sunken below the window rounds; double up in a 2-dc-bo and the petals grow too tall. If a bobble looks off, count your starting yarn overs",
          "raw_text": "This pattern uses two bobbles: the 2-dc-bo (the flower petals, Rounds 2-3) starts each stitch with ONE yarn over, while the 2-tr-bo (the window corners, Rounds 3-4) needs a yarn over TWICE before inserting the hook. Use single yarn overs in a 2-tr-bo and the corner bobbles come out short and sit sunken below the window rounds; double up in a 2-dc-bo and the petals grow too tall. If a bobble looks off, count your starting yarn overs",
          "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": "Closing the final 'yo, pull through all",
          "value": "A strangled closing loop pinches the petal and skews the top of the bobble sideways. Keep that last pull-through relaxed, then give the bobble a gentle pinch from behind to plump it forward. Consistent, loose closings are what make all the petals look like siblings",
          "raw_text": "A strangled closing loop pinches the petal and skews the top of the bobble sideways. Keep that last pull-through relaxed, then give the bobble a gentle pinch from behind to plump it forward. Consistent, loose closings are what make all the petals look like siblings",
          "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": "Miscounting chains in the window spaces",
          "value": "The lattice rounds depend on every chain-space having the same count — one missing chain and the square starts to cup; one extra and the edge ruffles. Count each chain-space as you complete it rather than at the end of the round, and if a side looks shorter than its neighbors, recount before moving to the next round",
          "raw_text": "The lattice rounds depend on every chain-space having the same count — one missing chain and the square starts to cup; one extra and the edge ruffles. Count each chain-space as you complete it rather than at the end of the round, and if a side looks shorter than its neighbors, recount before moving to the next round",
          "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": "Losing track of where the round begins",
          "value": "Openwork makes it surprisingly easy to crochet past your join. Clip a stitch marker into the first stitch of every round (move it up as you go), and remember that your starting stitch usually counts as the first dc — work your final stitches into it or you'll be one stitch short every round",
          "raw_text": "Openwork makes it surprisingly easy to crochet past your join. Clip a stitch marker into the first stitch of every round (move it up as you go), and remember that your starting stitch usually counts as the first dc — work your final stitches into it or you'll be one stitch short every round",
          "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": "Skipping blocking and wondering why the windows won't open",
          "value": "Straight off the hook this square looks rumpled — that's normal for lace. Wet or steam block it, pinning firmly to 4.72 x 4.72 inches with square corners, and the chain-space windows will open into crisp, even panes. Never skip this step before joining squares together",
          "raw_text": "Straight off the hook this square looks rumpled — that's normal for lace. Wet or steam block it, pinning firmly to 4.72 x 4.72 inches with square corners, and the chain-space windows will open into crisp, even panes. Never skip this step before joining squares together",
          "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- 1 color",
              "raw_text": "Yarn of your choice- 1 color"
            },
            {
              "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-tr",
          "label": "tr",
          "value": "treble crochet",
          "raw_text": "tr = treble crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "tr",
          "meaning": "treble 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-sl-st",
          "label": "Sl St",
          "value": "slip stitch for joining for different round.",
          "raw_text": "Sl St = slip stitch for joining for different round.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "Sl St",
          "meaning": "slip stitch for joining for different round."
        },
        {
          "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-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": 10,
          "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": 8,
      "card_type": "part",
      "code": "main-pattern",
      "title": "Main Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "round",
          "code": "main-pattern-round-1",
          "label": "Round 1",
          "value": "Magic loop, ch1, invisible standing st(count as dc), ch2, tr, ch2, [dc, ch2, tr, ch2] repeat 3 times, sl st to the top of the invisible standing st.",
          "raw_text": "Round 1 Magic loop, ch1, invisible standing st(count as dc), ch2, tr, ch2, [dc, ch2, tr, ch2] repeat 3 times, sl st to the top of the invisible standing st.",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "instruction",
          "code": "main-pattern-info-1",
          "label": "Steps",
          "value": "Start with a magic loop. ch1 as a standing st. sc in the loop; Insert the hook into the left vertical loop of the previous sc.",
          "raw_text": "Step by step: Start with a magic loop. ch1 as a standing st. sc in the loop; Insert the hook into the left vertical loop of the previous sc.",
          "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-2",
          "label": "Info",
          "value": "Then, complete another sc, and this is an invisible standing st (count as 1dc). ch2. tr in the loop. ch2.",
          "raw_text": "Then, complete another sc, and this is an invisible standing st (count as 1dc). ch2. tr in the loop. ch2.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "instruction",
          "code": "main-pattern-info-3",
          "label": "Steps",
          "value": "[dc, ch2, tr, ch2] repeat 3 times; Pull the tail tightly; Sl st to the top of the invisible standing st. Round 1 finished.",
          "raw_text": "Step by step: [dc, ch2, tr, ch2] repeat 3 times; Pull the tail tightly; Sl st to the top of the invisible standing st. Round 1 finished.",
          "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": "ch1+invisible standing st(count as dc), ch3, 2-dc-bo ch5 2-dc-bo in next st, ch3,  [dc, ch3, 2-dc-bo ch5 2-dc-bo, ch3] repeat 3 times, sl st to the top of the invisible standing st.",
          "raw_text": "Round 2 ch1+invisible standing st(count as dc), ch3, 2-dc-bo ch5 2-dc-bo in next st, ch3,  [dc, ch3, 2-dc-bo ch5 2-dc-bo, ch3] repeat 3 times, sl st to the top of the invisible standing st.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "instruction",
          "code": "main-pattern-info-4",
          "label": "Steps",
          "value": "Work 1 invisible standing st (count as dc). ch3; 2-dc-bo in the next tr st. ch5; How to make a 2 double crochet bobble stitch [2-dc-bo]; 2-dc-bo is made based on 2 incomplete dc.",
          "raw_text": "Step by step: Work 1 invisible standing st (count as dc). ch3; 2-dc-bo in the next tr st. ch5; How to make a 2 double crochet bobble stitch [2-dc-bo]; 2-dc-bo is made based on 2 incomplete dc.",
          "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": "main-pattern-info-5",
          "label": "Info",
          "value": "Firstly, let’s make the first incomplete dc, yo, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops  to complete the first incomplete dc, and now you have  2 loops  on the hook. (in this case, the invisible standing st count as 1 incomplete dc, so you only have  1 loop  on the hook).",
          "raw_text": "Firstly, let’s make the first incomplete dc, yo, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops  to complete the first incomplete dc, and now you have  2 loops  on the hook. (in this case, the invisible standing st count as 1 incomplete dc, so you only have  1 loop  on the hook).",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "instruction",
          "code": "main-pattern-info-6",
          "label": "Steps",
          "value": "[yo, insert hook in the same stitch, yo and pull up a loop, yo and pull through 2 loops] repeat one more time, once finished, there are  3 loops  on your hook.",
          "raw_text": "[yo, insert hook in the same stitch, yo and pull up a loop, yo and pull through 2 loops] repeat one more time, once finished, there are  3 loops  on your hook.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "instruction",
          "code": "main-pattern-info-7",
          "label": "Steps",
          "value": "Finally, yo and pull through all  3 loops  to finish the 2-dc-bo stitch; 2-dc-bo in the same st. ch3.",
          "raw_text": "Step by step: Finally, yo and pull through all  3 loops  to finish the 2-dc-bo stitch; 2-dc-bo in the same st. ch3.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "instruction",
          "code": "main-pattern-info-8",
          "label": "Steps",
          "value": "[dc in the next dc st, ch3, 2-dc-bo  ch5  2-dc-bo in the next tr st, ch3] repeat 3 times, sl st to the top of the invisible standing st. Round 2 finished.",
          "raw_text": "[dc in the next dc st, ch3, 2-dc-bo  ch5  2-dc-bo in the next tr st, ch3] repeat 3 times, sl st to the top of the invisible standing st. Round 2 finished.",
          "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-3",
          "label": "Round 3",
          "value": "ch1+incomplete invisible standing st(count as incomplete dc)+ another incomplete dc to finish 2-dc-bo, tr, ch4, dc ch2 2-tr-bo ch2 dc in corner, ch4, tr. [2-dc-bo, tr, ch4, dc ch2 2-tr-bo ch2 dc in corner, ch4, tr] repeat 3 times, sl st to the top of the first bo.",
          "raw_text": "Round 3 ch1+incomplete invisible standing st(count as incomplete dc)+ another incomplete dc to finish 2-dc-bo, tr, ch4, dc ch2 2-tr-bo ch2 dc in corner, ch4, tr. [2-dc-bo, tr, ch4, dc ch2 2-tr-bo ch2 dc in corner, ch4, tr] repeat 3 times, sl st to the top of the first bo.",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 12,
          "row_type": "subhead",
          "code": "main-pattern-info-9",
          "label": "",
          "value": "How to make a 2 Treble Crochet Bobble Stitch [2-tr-bo]",
          "raw_text": "How to make a 2 Treble Crochet Bobble Stitch [2-tr-bo]: 2-tr-bo is made based on 2 incomplete tr. Firstly, let’s make the first incomplete tr, yo twice, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops , yo and pull through  2 loops  to complete the first incomplete tr, and now you have  2 loops  on the hook.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 13,
          "row_type": "instruction",
          "code": "main-pattern-info-9",
          "label": "Steps",
          "value": "2-tr-bo is made based on 2 incomplete tr. Firstly, let’s make the first incomplete tr, yo twice, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops , yo and pull through  2 loops  to complete the first incomplete tr, and now you have  2 loops  on the hook.",
          "raw_text": "How to make a 2 Treble Crochet Bobble Stitch [2-tr-bo]: 2-tr-bo is made based on 2 incomplete tr. Firstly, let’s make the first incomplete tr, yo twice, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops , yo and pull through  2 loops  to complete the first incomplete tr, and now you have  2 loops  on the hook.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 14,
          "row_type": "instruction",
          "code": "main-pattern-info-10",
          "label": "Steps",
          "value": "[yo twice, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops , yo and pull through  2 loops ] repeat one more time, once finished, there are  3 loops  on your hook. Finally, yo and pull through all  3 loops  to finish the 2-tr-bo stitch.",
          "raw_text": "[yo twice, insert the hook into the st, yo and pull up a loop, yo and pull through  2 loops , yo and pull through  2 loops ] repeat one more time, once finished, there are  3 loops  on your hook. Finally, yo and pull through all  3 loops  to finish the 2-tr-bo stitch.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 15,
          "row_type": "instruction",
          "code": "main-pattern-info-11",
          "label": "Steps",
          "value": "ch1 as a standing st; sc in the same st; Insert the hook into the left vertical loop of the previous sc; Yo, and pull up a loop, now you have 2 loops on the hook, this is an incomplete invisible standing st (count as incomplete dc); Another incomplete dc in the same st to finish 2-dc-bo; tr in the next st; ch4; dc ch2 2-tr-bo ch2 dc in the next corner space, ch4, tr in the next st.",
          "raw_text": "Step by step: ch1 as a standing st; sc in the same st; Insert the hook into the left vertical loop of the previous sc; Yo, and pull up a loop, now you have 2 loops on the hook, this is an incomplete invisible standing st (count as incomplete dc); Another incomplete dc in the same st to finish 2-dc-bo; tr in the next st; ch4; dc ch2 2-tr-bo ch2 dc in the next corner space, ch4, tr in the next st.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 16,
          "row_type": "instruction",
          "code": "main-pattern-info-12",
          "label": "Steps",
          "value": "[2-dc-bo in the next st, tr in next st, ch4, dc ch2 2-tr-bo ch2 dc in the next corner space, ch4, tr in the next st] repeat 3 times, sl st to the top of the first bo. Round 3 finished.",
          "raw_text": "[2-dc-bo in the next st, tr in next st, ch4, dc ch2 2-tr-bo ch2 dc in the next corner space, ch4, tr in the next st] repeat 3 times, sl st to the top of the first bo. Round 3 finished.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 17,
          "row_type": "round",
          "code": "main-pattern-round-4",
          "label": "Round 4",
          "value": "ch1+invisible standing st(count as dc)+ch2+tr, dc, ch2, dc ch2 2-tr-bo ch2 dc, ch2, dc, tr, ch2. [dc+ch2+tr, dc, ch2, dc ch2 2-tr-bo ch2 dc, ch2, dc, tr, ch2] repeat 3 times, sl st to the first invisible standing st.",
          "raw_text": "Round 4 ch1+invisible standing st(count as dc)+ch2+tr, dc, ch2, dc ch2 2-tr-bo ch2 dc, ch2, dc, tr, ch2. [dc+ch2+tr, dc, ch2, dc ch2 2-tr-bo ch2 dc, ch2, dc, tr, ch2] repeat 3 times, sl st to the first invisible standing st.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 18,
          "row_type": "instruction",
          "code": "main-pattern-info-13",
          "label": "Steps",
          "value": "ch1+invisible standing st(count as dc); ch2; tr in the same st; dc in the next st, ch2; dc ch2 2-tr-bo ch2 dc in the next st, ch2; dc, tr, ch2.",
          "raw_text": "Step by step: ch1+invisible standing st(count as dc); ch2; tr in the same st; dc in the next st, ch2; dc ch2 2-tr-bo ch2 dc in the next st, ch2; dc, tr, ch2.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 19,
          "row_type": "instruction",
          "code": "main-pattern-info-14",
          "label": "Steps",
          "value": "[dc+ch2+tr in next st, dc, ch2, dc ch2 2-tr-bo ch2 dc, ch2, dc, tr, ch2] repeat 3 times, sl st to the first invisible standing st. Round 4 finished.",
          "raw_text": "[dc+ch2+tr in next st, dc, ch2, dc ch2 2-tr-bo ch2 dc, ch2, dc, tr, ch2] repeat 3 times, sl st to the first invisible standing st. Round 4 finished.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 20,
          "row_type": "round",
          "code": "main-pattern-round-5",
          "label": "Round 5",
          "value": "ch1+sc inc, 9sc(ch-sp for 2, st for 1), 3sc in next bo st, 9sc, [sc inc, 9sc, 3sc in the bo st, 9sc] repeat 3 times, sl st to the first sc.",
          "raw_text": "Round 5 ch1+sc inc, 9sc(ch-sp for 2, st for 1), 3sc in next bo st, 9sc, [sc inc, 9sc, 3sc in the bo st, 9sc] repeat 3 times, sl st to the first sc.",
          "round_start": 5,
          "round_end": 5,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 21,
          "row_type": "instruction",
          "code": "main-pattern-info-15",
          "label": "Steps",
          "value": "ch1 as a standing st; sc in the same st; Another sc in the same st; 9sc, ch-sp for 2sc, st for 1sc; 3sc in the next bo st at the corner; 9sc, ch-sp for 2, st for 1.",
          "raw_text": "Step by step: ch1 as a standing st; sc in the same st; Another sc in the same st; 9sc, ch-sp for 2sc, st for 1sc; 3sc in the next bo st at the corner; 9sc, ch-sp for 2, st for 1.",
          "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-16",
          "label": "Steps",
          "value": "[2sc in the next dc st, 9sc, 3sc in the bo st, 9sc] repeat 3 times, sl st to the first sc. Round 5 finished.",
          "raw_text": "[2sc in the next dc st, 9sc, 3sc in the bo st, 9sc] repeat 3 times, sl st to the first sc. Round 5 finished.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 23,
          "row_type": "round",
          "code": "main-pattern-round-6",
          "label": "Round 6",
          "value": "Sl st to the previous st, ch1+sc, ch4, [sk2, sc, ch4] repeat 4 times, sk1, [sc, ch4, sk2] repeat 3 times. [sc, ch4, *sk2, sc, ch4* repeat 4 times, sk1, *sc, ch4, sk2* repeat 3 times] repeat 3 times, sl st to the first sc, fasten off.",
          "raw_text": "Round 6 Sl st to the previous st, ch1+sc, ch4, [sk2, sc, ch4] repeat 4 times, sk1, [sc, ch4, sk2] repeat 3 times. [sc, ch4, *sk2, sc, ch4* repeat 4 times, sk1, *sc, ch4, sk2* repeat 3 times] repeat 3 times, sl st to the first sc, fasten off.",
          "round_start": 6,
          "round_end": 6,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 24,
          "row_type": "instruction",
          "code": "main-pattern-info-17",
          "label": "Steps",
          "value": "sl st backwards to the previous st to begin from the ch-sp; ch1 as a standing st; sc in the same st; ch4, [sk2, sc, ch4] repeat 4 times; sk1, [sc, ch4, sk2] repeat 3 times.",
          "raw_text": "Step by step: sl st backwards to the previous st to begin from the ch-sp; ch1 as a standing st; sc in the same st; ch4, [sk2, sc, ch4] repeat 4 times; sk1, [sc, ch4, sk2] repeat 3 times.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 25,
          "row_type": "instruction",
          "code": "main-pattern-info-18",
          "label": "Steps",
          "value": "[sc, ch4, *sk2, sc, ch4* repeat 4 times, sk1, *sc, ch4, sk2* repeat 3 times] repeat 3 times, sl st to the first sc, fasten off. Round 6 finished.",
          "raw_text": "[sc, ch4, *sk2, sc, ch4* repeat 4 times, sk1, *sc, ch4, sk2* repeat 3 times] repeat 3 times, sl st to the first sc, fasten off. Round 6 finished.",
          "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": "💡 Gauge: the completed unique window flower square measures approximately 4.72 x 4.72 inches. Swatch the first two rounds before committing: with a 3.00mm hook and fine cotton, if your bobbles look loose or gappy, drop to a 2.75mm hook — the flower center sets the tension for the whole square",
          "raw_text": "💡 Gauge: the completed unique window flower square measures approximately 4.72 x 4.72 inches. Swatch the first two rounds before committing: with a 3.00mm hook and fine cotton, if your bobbles look loose or gappy, drop to a 2.75mm hook — the flower center sets the tension for the whole square",
          "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": "💡 Choose a smooth, tightly-plied yarn (mercerized cotton is ideal) — fuzzy or splitty yarns swallow the bobble texture and make it hard to see the 3 loops you need to keep on the hook",
          "raw_text": "💡 Choose a smooth, tightly-plied yarn (mercerized cotton is ideal) — fuzzy or splitty yarns swallow the bobble texture and make it hard to see the 3 loops you need to keep on the hook",
          "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": "💡 Trebles unravel fast: whenever you set the square down mid-round, slip a locking stitch marker into your working loop so an accidental tug doesn't undo half a lattice round",
          "raw_text": "💡 Trebles unravel fast: whenever you set the square down mid-round, slip a locking stitch marker into your working loop so an accidental tug doesn't undo half a lattice round",
          "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": "💡 Count your stitches and chain-spaces at the end of every one of the 6 rounds — in openwork, an error hides easily and only reveals itself two rounds later when a corner refuses to turn",
          "raw_text": "💡 Count your stitches and chain-spaces at the end of every one of the 6 rounds — in openwork, an error hides easily and only reveals itself two rounds later when a corner refuses to turn",
          "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": "💡 Weave your ends with the darning needle through the solid backs of the bobbles, not through the open mesh — in a see-through square, a tail woven through a window is visible from across the room",
          "raw_text": "💡 Weave your ends with the darning needle through the solid backs of the bobbles, not through the open mesh — in a see-through square, a tail woven through a window is visible from across the room",
          "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 multiples for a shawl or runner, block every square to exactly 4.72 inches before joining — matching corner-to-corner on openwork motifs is nearly impossible if the squares vary even a quarter inch",
          "raw_text": "💡 If you're making multiples for a shawl or runner, block every square to exactly 4.72 inches before joining — matching corner-to-corner on openwork motifs is nearly impossible if the squares vary even a quarter inch",
          "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": "💡 The designer worked this square in a rich forest green that recalls summer garden leaves, but feel free to use any color that speaks to your heart — soft pastels would be dreamy, or bright jewel tones for a bold statement piece",
          "raw_text": "💡 The designer worked this square in a rich forest green that recalls summer garden leaves, but feel free to use any color that speaks to your heart — soft pastels would be dreamy, or bright jewel tones for a bold statement piece",
          "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 exactly is the 2-tr-bo stitch in this pattern?",
          "value": "It's a two-treble bobble: you work two treble crochets into the same stitch but leave each one incomplete, so you end with 3 loops on the hook. A final yarn over pulled through all 3 loops closes them into one plump bobble. It sits at the corners of the window rounds; the flower petals at the center are made the same way with double crochets (the 2-dc-bo)",
          "raw_text": "It's a two-treble bobble: you work two treble crochets into the same stitch but leave each one incomplete, so you end with 3 loops on the hook. A final yarn over pulled through all 3 loops closes them into one plump bobble. It sits at the corners of the window rounds; the flower petals at the center are made the same way with double crochets (the 2-dc-bo)",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What exactly is the 2-tr-bo stitch in this pattern?",
          "answer": "It's a two-treble bobble: you work two treble crochets into the same stitch but leave each one incomplete, so you end with 3 loops on the hook. A final yarn over pulled through all 3 loops closes them into one plump bobble. It sits at the corners of the window rounds; the flower petals at the center are made the same way with double crochets (the 2-dc-bo)",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "Can I use a thicker yarn than the pattern suggests?",
          "value": "Absolutely — the stitch pattern scales beautifully. DK weight with a 4.00mm hook gives roughly a 6-inch square, and worsted with a 5.00mm hook lands around 7 inches. Just keep the airy tension; if the windows close up, go up a hook size",
          "raw_text": "Absolutely — the stitch pattern scales beautifully. DK weight with a 4.00mm hook gives roughly a 6-inch square, and worsted with a 5.00mm hook lands around 7 inches. Just keep the airy tension; if the windows close up, go up a hook size",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I use a thicker yarn than the pattern suggests?",
          "answer": "Absolutely — the stitch pattern scales beautifully. DK weight with a 4.00mm hook gives roughly a 6-inch square, and worsted with a 5.00mm hook lands around 7 inches. Just keep the airy tension; if the windows close up, go up a hook size",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "How many squares do I need for a project?",
          "value": "the original 4.72-inch size, a table runner takes about 8-10 squares in a single row, a generous lap-size throw around 48-56, and a lightweight triangular-style summer shawl can be arranged from 15-21 squares. Block them all to the same size before joining",
          "raw_text": "the original 4.72-inch size, a table runner takes about 8-10 squares in a single row, a generous lap-size throw around 48-56, and a lightweight triangular-style summer shawl can be arranged from 15-21 squares. Block them all to the same size before joining",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many squares do I need for a project?",
          "answer": "the original 4.72-inch size, a table runner takes about 8-10 squares in a single row, a generous lap-size throw around 48-56, and a lightweight triangular-style summer shawl can be arranged from 15-21 squares. Block them all to the same size before joining",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "Why does my square refuse to lie flat?",
          "value": "The usual culprits are miscounted chains in the window spaces or bobbles closed too tightly, both of which pull the fabric inward. Recount your chain-spaces on each side, loosen that final pull-through on the bobbles, and always block the finished square — openwork almost never lies perfectly flat straight off the hook",
          "raw_text": "The usual culprits are miscounted chains in the window spaces or bobbles closed too tightly, both of which pull the fabric inward. Recount your chain-spaces on each side, loosen that final pull-through on the bobbles, and always block the finished square — openwork almost never lies perfectly flat straight off the hook",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Why does my square refuse to lie flat?",
          "answer": "The usual culprits are miscounted chains in the window spaces or bobbles closed too tightly, both of which pull the fabric inward. Recount your chain-spaces on each side, loosen that final pull-through on the bobbles, and always block the finished square — openwork almost never lies perfectly flat straight off the hook",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "Is this pattern suitable for beginners?",
          "value": "It's best for confident beginners and up. You'll want to be comfortable with chains, treble crochet, and working in joined rounds; both bobble stitches are fully explained step by step, so it's a lovely first bobble project. Take the openwork rounds slowly and count as you go",
          "raw_text": "It's best for confident beginners and up. You'll want to be comfortable with chains, treble crochet, and working in joined rounds; both bobble stitches are fully explained step by step, so it's a lovely first bobble project. Take the openwork rounds slowly and count as you go",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Is this pattern suitable for beginners?",
          "answer": "It's best for confident beginners and up. You'll want to be comfortable with chains, treble crochet, and working in joined rounds; both bobble stitches are fully explained step by step, so it's a lovely first bobble project. Take the openwork rounds slowly and count as you go",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/window-flower-granny-square-hero.webp",
    "data/images/window-flower-granny-square-step-2.webp",
    "data/images/window-flower-granny-square-step-3.webp",
    "data/images/window-flower-granny-square-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/window-flower-granny-square-hero.webp",
      "alt": "Unique Window Flower Granny Square – Free Crochet Pattern — photo 1",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/window-flower-granny-square-hero.webp",
      "alt": "Unique Window Flower Granny Square – Free Crochet Pattern — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/window-flower-granny-square-step-2.webp",
      "alt": "Unique Window Flower Granny Square – Free Crochet Pattern — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/window-flower-granny-square-step-3.webp",
      "alt": "Unique Window Flower Granny Square – Free Crochet Pattern — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/window-flower-granny-square-step-4.webp",
      "alt": "Unique Window Flower Granny Square – Free Crochet Pattern — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 2
}