{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "double-heart-granny-square-free-crochet-pattern",
  "title": "Double Heart Granny Square — Free Crochet Pattern",
  "meta_description": "Free double heart granny square pattern with BLO and FLO texture rounds. Make a 3.2-inch textured heart square in DK yarn — perfect for blankets",
  "published_at": "2026-08-20",
  "updated_at": "2026-08-20",
  "author": "Nora",
  "thumbnail_url": "data/images/double-heart-granny-square-free-crochet-pattern-hero.webp",
  "meta": {
    "title": "Double Heart Granny Square — Free Crochet Pattern",
    "pattern_name": "Double Heart Granny Square — Free Crochet Pattern",
    "difficulty": "Intermediate",
    "time_needed": "1-2 Hours",
    "rating": 4.8,
    "made_count": "3.4K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "DK / Sport",
      "tags": [
        "granny square",
        "heart granny square",
        "free pattern",
        "BLO crochet",
        "FLO crochet",
        "textured square",
        "dk yarn",
        "magic loop",
        "colorwork square",
        "blanket square",
        "beginner friendly intermediate"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Double Heart Granny Square — Free Crochet Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Confident Beginner to Intermediate",
          "value": "You'll need a magic loop, mixed stitch heights in one round, and a comfortable hand with BLO and FLO",
          "raw_text": "You'll need a magic loop, mixed stitch heights in one round, and a comfortable hand with BLO and FLO",
          "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-90 minutes for your first one, then closer to 35 minutes once the rhythm clicks",
          "raw_text": "About 45-90 minutes for your first one, then closer to 35 minutes 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": "hero-info-3",
          "label": "Sculpted Heart Texture",
          "value": "Four colors and ridged rounds turn a flat square into a heart you can feel with your fingertips",
          "raw_text": "Four colors and ridged rounds turn a flat square into a heart you can feel with your fingertips",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 2,
      "card_type": "about",
      "code": "about",
      "title": "About",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "about-info-1",
          "label": "",
          "value": "This pattern turns a humble granny square into a sculpted double heart — a plump, symmetrical heart shape that sits proud of its own background thanks to a stack of ridge-building rounds. It starts in a magic loop with a ch3 standing stitch, then fans out through 3tr, 4dc, tr, 4dc, 3tr to shape the two rounded lobes in a single pass. It's ideal for anyone who loves motif crochet but wants something with more personality than the classic three-double-crochet cluster",
          "raw_text": "This pattern turns a humble granny square into a sculpted double heart — a plump, symmetrical heart shape that sits proud of its own background thanks to a stack of ridge-building rounds. It starts in a magic loop with a ch3 standing stitch, then fans out through 3tr, 4dc, tr, 4dc, 3tr to shape the two rounded lobes in a single pass. It's ideal for anyone who loves motif crochet but wants something with more personality than the classic three-double-crochet cluster",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "about-info-2",
          "label": "",
          "value": "You'll work through six rounds that lean on a few specific techniques: the magic loop, a ch3 used as a standing stitch to start each round cleanly, an unusual hdc decrease worked across the beginning and ending ch3 to pinch the V at the heart's base, and alternating BLO and FLO rounds that create the raised outline. Increases like 2 dc inc, hdc inc, and runs of 5 sc inc handle the corner shaping. Expect around an hour for your first square while you learn the stitch map",
          "raw_text": "You'll work through six rounds that lean on a few specific techniques: the magic loop, a ch3 used as a standing stitch to start each round cleanly, an unusual hdc decrease worked across the beginning and ending ch3 to pinch the V at the heart's base, and alternating BLO and FLO rounds that create the raised outline. Increases like 2 dc inc, hdc inc, and runs of 5 sc inc handle the corner shaping. Expect around an hour for your first square while you learn the stitch map",
          "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": "The finished square measures roughly 3.2 by 3.2 inches in DK or sport weight yarn with a 3.00 mm hook — small enough to be addictive, large enough to show off the texture. The heart reads clearly from across a room, and the ridged BLO and FLO transitions give it a quilted, almost embossed feel. Four colors means every square can be a different mood, which makes these wonderful for blankets, coasters, sachets, pocket tokens, and anniversary gifts",
          "raw_text": "The finished square measures roughly 3.2 by 3.2 inches in DK or sport weight yarn with a 3.00 mm hook — small enough to be addictive, large enough to show off the texture. The heart reads clearly from across a room, and the ridged BLO and FLO transitions give it a quilted, almost embossed feel. Four colors means every square can be a different mood, which makes these wonderful for blankets, coasters, sachets, pocket tokens, and anniversary gifts",
          "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 fell for this square the moment Round 1 came off the hook. You're working into a magic loop, and those 3tr, 4dc, tr, 4dc, 3tr stitches bloom into two little lobes almost before you realize what's happening — it feels like the heart draws itself. Then comes my favorite trick in the whole pattern: that hdc decrease worked across the second chains of the beginning and ending ch3. It cinches the bottom of the heart into a crisp V instead of the mushy dip you get from most heart motifs, and it makes the transition into the next round completely seamless. I also love how the alternating BLO and FLO rounds do the heavy lifting for texture. Working BLO leaves the front loop sitting there as a visible ridge, and when you come back around in FLO on the next round, you get a second ridge running the other way. Run your thumb across a finished square and you can feel the heart outline without looking. Add four colors and suddenly you have a tiny, satisfying, thirty-five-minute project that looks like it took all afternoon",
          "raw_text": "I fell for this square the moment Round 1 came off the hook. You're working into a magic loop, and those 3tr, 4dc, tr, 4dc, 3tr stitches bloom into two little lobes almost before you realize what's happening — it feels like the heart draws itself. Then comes my favorite trick in the whole pattern: that hdc decrease worked across the second chains of the beginning and ending ch3. It cinches the bottom of the heart into a crisp V instead of the mushy dip you get from most heart motifs, and it makes the transition into the next round completely seamless. I also love how the alternating BLO and FLO rounds do the heavy lifting for texture. Working BLO leaves the front loop sitting there as a visible ridge, and when you come back around in FLO on the next round, you get a second ridge running the other way. Run your thumb across a finished square and you can feel the heart outline without looking. Add four colors and suddenly you have a tiny, satisfying, thirty-five-minute project that looks like it took all afternoon",
          "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": "Pulling the magic loop closed before the whole of Round 1 is worked, which crowds the 3tr, 4dc, tr, 4dc, 3tr sequence",
          "value": "Leave the loop loose enough to see daylight through it until every stitch of Round 1 is on the hook side of the ring. Those tall treble crochets need room to spread into lobes. Only after the final ch3 do you gently pull the tail — and pull in small stages, checking that the heart lobes stay rounded rather than folding in on themselves. If it puckers, back the tail off slightly and re-shape with your fingers before you fasten off",
          "raw_text": "Leave the loop loose enough to see daylight through it until every stitch of Round 1 is on the hook side of the ring. Those tall treble crochets need room to spread into lobes. Only after the final ch3 do you gently pull the tail — and pull in small stages, checking that the heart lobes stay rounded rather than folding in on themselves. If it puckers, back the tail off slightly and re-shape with your fingers before you fasten off",
          "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": "Working the hdc decrease into the wrong chains at the base of the heart",
          "value": "The decrease is specifically worked over the SECOND chain of the beginning ch3 and the second chain of the ending ch3 — not the third, and not into the space between them. Count from the base of each ch3 outward. If you use the third chains instead, the V flattens and the heart looks like a lumpy circle. Mark both second chains with a stitch marker at the end of Round 1 so you can find them instantly when you rejoin yarn",
          "raw_text": "The decrease is specifically worked over the SECOND chain of the beginning ch3 and the second chain of the ending ch3 — not the third, and not into the space between them. Count from the base of each ch3 outward. If you use the third chains instead, the V flattens and the heart looks like a lumpy circle. Mark both second chains with a stitch marker at the end of Round 1 so you can find them instantly when you rejoin yarn",
          "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": "Losing track of which rounds are BLO and which are FLO",
          "value": "This pattern alternates deliberately, and the whole texture depends on it. Write the sequence on a sticky note and keep it beside you. If you accidentally work a BLO round through both loops, the ridge for that round simply vanishes and the heart outline loses a layer of definition — there's no way to fake it back in later, so unfortunately that round needs frogging. Check after your first three stitches of every round rather than at the end",
          "raw_text": "This pattern alternates deliberately, and the whole texture depends on it. Write the sequence on a sticky note and keep it beside you. If you accidentally work a BLO round through both loops, the ridge for that round simply vanishes and the heart outline loses a layer of definition — there's no way to fake it back in later, so unfortunately that round needs frogging. Check after your first three stitches of every round rather than at the end",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "mistake",
          "code": "mistake-4",
          "label": "Starting a new round in the wrong chain when joining new yarn",
          "value": "Each round tells you to join into the 3rd ch of the FIRST ch3 from the last round, then ch as a standing stitch. Crocheters often join into the nearest convenient chain instead, which rotates the whole design and throws the heart off-center by a stitch or two. Before you fasten off each round, place a locking marker in the third chain of that first ch3. When you pick the square back up with a new color, the entry point is already flagged",
          "raw_text": "Each round tells you to join into the 3rd ch of the FIRST ch3 from the last round, then ch as a standing stitch. Crocheters often join into the nearest convenient chain instead, which rotates the whole design and throws the heart off-center by a stitch or two. Before you fasten off each round, place a locking marker in the third chain of that first ch3. When you pick the square back up with a new color, the entry point is already flagged",
          "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": "Treating the standing stitch as a regular turning chain and then adding a stitch on top of it",
          "value": "The ch3 here functions as the standing stitch itself — it IS the first stitch of the round, not a placeholder you crochet into. If you chain and then work a full stitch into the same place without the pattern calling for it, you'll gain one stitch per round and the square will start to ruffle at the corners. When the pattern says sc+hdc in this st, that's the complete instruction for that position — nothing extra",
          "raw_text": "The ch3 here functions as the standing stitch itself — it IS the first stitch of the round, not a placeholder you crochet into. If you chain and then work a full stitch into the same place without the pattern calling for it, you'll gain one stitch per round and the square will start to ruffle at the corners. When the pattern says sc+hdc in this st, that's the complete instruction for that position — nothing extra",
          "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": "Running the runs of increases together — 5 sc inc, 6sc, sc inc, 6sc, 5sc inc",
          "value": "Round 5 has long stretches of plain stitches sandwiched between increase clusters, and it's very easy to miscount the 6sc runs. Count them out loud or drop a removable marker after each cluster of increases. If a 6sc run becomes a 5sc or 7sc, one side of the square grows longer than the other and the finished motif won't sit flat or join squarely to its neighbors. Compare opposite sides against each other before fastening off",
          "raw_text": "Round 5 has long stretches of plain stitches sandwiched between increase clusters, and it's very easy to miscount the 6sc runs. Count them out loud or drop a removable marker after each cluster of increases. If a 6sc run becomes a 5sc or 7sc, one side of the square grows longer than the other and the finished motif won't sit flat or join squarely to its neighbors. Compare opposite sides against each other before fastening off",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "mistake",
          "code": "mistake-7",
          "label": "Leaving short tails at every color change on a four-color square",
          "value": "You fasten off at the end of every round here, which means eight tails on a single 3.2-inch square. Cut each tail at least 6 inches long — anything shorter is miserable to weave through a dense DK fabric with a darning needle. Weave each one into the back of the ridge rounds where the extra bulk hides completely, and split the yarn ply on the last inch so it locks in and won't work loose in a blanket that gets washed",
          "raw_text": "You fasten off at the end of every round here, which means eight tails on a single 3.2-inch square. Cut each tail at least 6 inches long — anything shorter is miserable to weave through a dense DK fabric with a darning needle. Weave each one into the back of the ridge rounds where the extra bulk hides completely, and split the yarn ply on the last inch so it locks in and won't work loose in a blanket that gets washed",
          "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- 4 colors",
              "raw_text": "Yarn of your choice- 4 colors"
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "Crochet hook",
              "raw_text": "Crochet 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-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": 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-hdc",
          "label": "hdc",
          "value": "half double crochet",
          "raw_text": "hdc = half double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "hdc",
          "meaning": "half double crochet"
        },
        {
          "order": 6,
          "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": 7,
          "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": 8,
          "row_type": "abbrev",
          "code": "abbrev-flo",
          "label": "FLO",
          "value": "front loop only",
          "raw_text": "FLO = front loop only",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "FLO",
          "meaning": "front loop only"
        },
        {
          "order": 9,
          "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": 10,
          "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": 11,
          "row_type": "abbrev",
          "code": "abbrev-slst",
          "label": "slst",
          "value": "slip stitch for joining for different round",
          "raw_text": "slst = slip stitch for joining for different round",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "slst",
          "meaning": "slip stitch for joining for different round"
        },
        {
          "order": 12,
          "row_type": "abbrev",
          "code": "abbrev-blo",
          "label": "BLO",
          "value": "back loop only",
          "raw_text": "BLO = back loop only",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "BLO",
          "meaning": "back loop only"
        },
        {
          "order": 13,
          "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": 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": "The First Heart Magic loop, ch3 as standing st, 3tr, 4dc, tr, 4dc, 3tr, ch3, sl st to the original loop, fasten off.",
          "raw_text": "Round 1 – The First Heart Magic loop, ch3 as standing st, 3tr, 4dc, tr, 4dc, 3tr, ch3, sl st to the original loop, fasten off.",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "round",
          "code": "main-pattern-round-2",
          "label": "Round 2",
          "value": "The Second Heart BLO for this round.  Join the new yarn into the 3rd ch of the first ch3 from the last round, ch as a standing st. sc+hdc in this st, 2 dc inc, hdc inc, 4hdc, hdc+dc+hdc, 4hdc, hdc inc, 2 dc inc, hdc+sc, hdc dec over the 2nd chains of the beginning and ending ch3, join to the first st, fasten off.",
          "raw_text": "Round 2 – The Second Heart BLO for this round.  Join the new yarn into the 3rd ch of the first ch3 from the last round, ch as a standing st. sc+hdc in this st, 2 dc inc, hdc inc, 4hdc, hdc+dc+hdc, 4hdc, hdc inc, 2 dc inc, hdc+sc, hdc dec over the 2nd chains of the beginning and ending ch3, join to the first st, fasten off.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "round",
          "code": "main-pattern-round-3",
          "label": "Round 3",
          "value": "FLO for this round . Add new yarn into the first sc from the last round, ch+sc in this st, sc, 5 sc inc, 6sc, sc inc, 6sc, 5sc inc, 2sc, sk1 and join to the first sc, fasten off.",
          "raw_text": "Round 3 FLO for this round . Add new yarn into the first sc from the last round, ch+sc in this st, sc, 5 sc inc, 6sc, sc inc, 6sc, 5sc inc, 2sc, sk1 and join to the first sc, fasten off.",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "round",
          "code": "main-pattern-round-4",
          "label": "Round 4",
          "value": "Background Work this entire round in BLO of Round 2 stitches.  Join new yarn into the first st of Round 2, ch3 as a standing st(count as dc). hdc, hdc inc, ch3, dc inc, hdc, 2sc, hdc, dc, dc inc, ch3, tr inc, dc, 3hdc, dc, tr inc, ch3, dc inc, dc, hdc, 2sc, hdc, dc inc, ch3, hdc inc, hdc, 2dc, sl st to the top of the first ch3.",
          "raw_text": "Round 4 – Background Work this entire round in BLO of Round 2 stitches.  Join new yarn into the first st of Round 2, ch3 as a standing st(count as dc). hdc, hdc inc, ch3, dc inc, hdc, 2sc, hdc, dc, dc inc, ch3, tr inc, dc, 3hdc, dc, tr inc, ch3, dc inc, dc, hdc, 2sc, hdc, dc inc, ch3, hdc inc, hdc, 2dc, sl st to the top of the first ch3.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "round",
          "code": "main-pattern-round-5",
          "label": "Round 5",
          "value": "ch2(count as hdc) to start, hdc in remaining sts, while (2hdc+ch2+2hdc) in the corner sp, finally sl st to the top of the first ch2, fasten off.",
          "raw_text": "Round 5 ch2(count as hdc) to start, hdc in remaining sts, while (2hdc+ch2+2hdc) in the corner sp, finally sl st to the top of the first ch2, fasten off.",
          "round_start": 5,
          "round_end": 5,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "round",
          "code": "main-pattern-round-6",
          "label": "Round 6",
          "value": "The Border Add new yarn in any corner sp, ch to start, (sc+ch+sc) in each corner sp, sc in the remaining sts, finally sl st to the top of the first sc, fasten off.",
          "raw_text": "Round 6 – The Border Add new yarn in any corner sp, ch to start, (sc+ch+sc) in each corner sp, sc in the remaining sts, finally sl st to the top of 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": 9,
      "card_type": "important_notes",
      "code": "important-notes",
      "title": "Important Notes",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "note-1",
          "label": "Note",
          "value": "💡 A 3.00 mm hook with DK or sport weight yarn gives the 3.2-inch square listed in the pattern. If your stitches naturally run loose, drop to a 2.75 mm — this design looks best worked firmly, because tight stitches make the BLO and FLO ridges stand up sharply instead of slumping. Make one test square before committing to a whole blanket's worth",
          "raw_text": "💡 A 3.00 mm hook with DK or sport weight yarn gives the 3.2-inch square listed in the pattern. If your stitches naturally run loose, drop to a 2.75 mm — this design looks best worked firmly, because tight stitches make the BLO and FLO ridges stand up sharply instead of slumping. Make one test square before committing to a whole blanket's worth",
          "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": "💡 Use four locking stitch markers as permanent helpers: one in the third chain of each round's first ch3 (your next join point), and one in each of the second chains of the beginning and ending ch3 from Round 1 for the hdc decrease. Setting these before you fasten off saves genuine hunting time later",
          "raw_text": "💡 Use four locking stitch markers as permanent helpers: one in the third chain of each round's first ch3 (your next join point), and one in each of the second chains of the beginning and ending ch3 from Round 1 for the hdc decrease. Setting these before you fasten off saves genuine hunting time later",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "note-3",
          "label": "Note",
          "value": "💡 Wind all four colors into small centre-pull balls before you start rather than working from full skeins. Every round ends with a fasten off and a fresh join, so you'll be picking up and setting down yarn constantly — small balls keep the four colors from tangling into a knot on your lap",
          "raw_text": "💡 Wind all four colors into small centre-pull balls before you start rather than working from full skeins. Every round ends with a fasten off and a fresh join, so you'll be picking up and setting down yarn constantly — small balls keep the four colors from tangling into a knot on your lap",
          "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": "💡 Blocking transforms this square. Wet-block or steam-block each one to exactly 3.2 by 3.2 inches on a blocking board with pins at all four corners. Because the BLO and FLO ridges create uneven tension, unblocked squares can look slightly trapezoidal — blocking squares them up and makes joining vastly easier",
          "raw_text": "💡 Blocking transforms this square. Wet-block or steam-block each one to exactly 3.2 by 3.2 inches on a blocking board with pins at all four corners. Because the BLO and FLO ridges create uneven tension, unblocked squares can look slightly trapezoidal — blocking squares them up and makes joining vastly easier",
          "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": "💡 If you're making a batch, work Round 1 on all of your squares first, then Round 2 on all of them, and so on. Assembly-line style saves you re-reading the stitch sequence every time, and it keeps your tension consistent across the whole set, which matters far more in a blanket than in a single square",
          "raw_text": "💡 If you're making a batch, work Round 1 on all of your squares first, then Round 2 on all of them, and so on. Assembly-line style saves you re-reading the stitch sequence every time, and it keeps your tension consistent across the whole set, which matters far more in a blanket than in a single square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "info",
          "code": "note-6",
          "label": "Note",
          "value": "💡 Choose your color placement with contrast in mind. The heart from Round 1 needs to be noticeably darker or brighter than the round that outlines it, or the shape gets lost. Hold the two yarns side by side and squint — if they blur together, swap one out before you invest six rounds into it",
          "raw_text": "💡 Choose your color placement with contrast in mind. The heart from Round 1 needs to be noticeably darker or brighter than the round that outlines it, or the shape gets lost. Hold the two yarns side by side and squint — if they blur together, swap one out before you invest six rounds into it",
          "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": "💡 Keep the ends of your treble crochets in Round 1 even in height. Because trebles, doubles, and a single centered tr all appear in one round, an uneven yarn-over pull will make one lobe taller than the other. Aim for the same loop height on every yarn over and the two halves will mirror each other",
          "raw_text": "💡 Keep the ends of your treble crochets in Round 1 even in height. Because trebles, doubles, and a single centered tr all appear in one round, an uneven yarn-over pull will make one lobe taller than the other. Aim for the same loop height on every yarn over and the two halves will mirror each other",
          "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": "How big is the finished double heart granny square?",
          "value": "It comes out at approximately 3.2 by 3.2 inches when worked in DK or sport weight yarn with a 3.00 mm hook. Your exact size will shift with your tension and yarn choice, so make one square first and measure before you plan a full project",
          "raw_text": "It comes out at approximately 3.2 by 3.2 inches when worked in DK or sport weight yarn with a 3.00 mm hook. Your exact size will shift with your tension and yarn choice, so make one square first and measure before you plan a full project",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How big is the finished double heart granny square?",
          "answer": "It comes out at approximately 3.2 by 3.2 inches when worked in DK or sport weight yarn with a 3.00 mm hook. Your exact size will shift with your tension and yarn choice, so make one square first and measure before you plan a full project",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "Do I really need four different colors?",
          "value": "No — four colors show off the layered ridge structure best, but the pattern works beautifully in one or two colors too. A single-color version relies entirely on the BLO and FLO texture to show the heart, which looks stunning in a light, smooth yarn where the ridges catch the light",
          "raw_text": "No — four colors show off the layered ridge structure best, but the pattern works beautifully in one or two colors too. A single-color version relies entirely on the BLO and FLO texture to show the heart, which looks stunning in a light, smooth yarn where the ridges catch the light",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Do I really need four different colors?",
          "answer": "No — four colors show off the layered ridge structure best, but the pattern works beautifully in one or two colors too. A single-color version relies entirely on the BLO and FLO texture to show the heart, which looks stunning in a light, smooth yarn where the ridges catch the light",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "Can I make this square bigger for a blanket?",
          "value": "Yes. The easiest route is to move up to worsted weight with a 4.00 mm hook, which brings you to roughly 4.25 inches. Alternatively, add a seventh round of plain half double crochet with 2 hdc, ch2, 2 hdc in each corner to gain about half an inch per side",
          "raw_text": "Yes. The easiest route is to move up to worsted weight with a 4.00 mm hook, which brings you to roughly 4.25 inches. Alternatively, add a seventh round of plain half double crochet with 2 hdc, ch2, 2 hdc in each corner to gain about half an inch per side",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I make this square bigger for a blanket?",
          "answer": "Yes. The easiest route is to move up to worsted weight with a 4.00 mm hook, which brings you to roughly 4.25 inches. Alternatively, add a seventh round of plain half double crochet with 2 hdc, ch2, 2 hdc in each corner to gain about half an inch per side",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "Why does my heart look lopsided at the bottom?",
          "value": "That's almost always the hdc decrease at the base. It has to be worked across the second chains of both the beginning and the ending ch3 from Round 1 — using different chains or skipping the decrease entirely will flatten the V. Mark those two chains before you fasten off Round 1",
          "raw_text": "That's almost always the hdc decrease at the base. It has to be worked across the second chains of both the beginning and the ending ch3 from Round 1 — using different chains or skipping the decrease entirely will flatten the V. Mark those two chains before you fasten off Round 1",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Why does my heart look lopsided at the bottom?",
          "answer": "That's almost always the hdc decrease at the base. It has to be worked across the second chains of both the beginning and the ending ch3 from Round 1 — using different chains or skipping the decrease entirely will flatten the V. Mark those two chains before you fasten off Round 1",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "faq",
          "code": "faq-6",
          "label": "How do I join these squares together?",
          "value": "Because every round ends with a fasten off, these squares are finished as individual motifs rather than joined as you go. Block them all to the same size first, then use a whip stitch or slip stitch join through the back loops for a flat seam, or a single crochet join if you want a raised ridge between squares",
          "raw_text": "Because every round ends with a fasten off, these squares are finished as individual motifs rather than joined as you go. Block them all to the same size first, then use a whip stitch or slip stitch join through the back loops for a flat seam, or a single crochet join if you want a raised ridge between squares",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How do I join these squares together?",
          "answer": "Because every round ends with a fasten off, these squares are finished as individual motifs rather than joined as you go. Block them all to the same size first, then use a whip stitch or slip stitch join through the back loops for a flat seam, or a single crochet join if you want a raised ridge between squares",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/double-heart-granny-square-free-crochet-pattern-hero.webp",
    "data/images/double-heart-granny-square-free-crochet-pattern-step-2.webp",
    "data/images/double-heart-granny-square-free-crochet-pattern-step-3.webp",
    "data/images/double-heart-granny-square-free-crochet-pattern-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/double-heart-granny-square-free-crochet-pattern-hero.webp",
      "alt": "Double Heart Granny Square — Free Crochet Pattern — photo 1",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/double-heart-granny-square-free-crochet-pattern-hero.webp",
      "alt": "Double Heart Granny Square — Free Crochet Pattern — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/double-heart-granny-square-free-crochet-pattern-step-2.webp",
      "alt": "Double Heart Granny Square — Free Crochet Pattern — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/double-heart-granny-square-free-crochet-pattern-step-3.webp",
      "alt": "Double Heart Granny Square — Free Crochet Pattern — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/double-heart-granny-square-free-crochet-pattern-step-4.webp",
      "alt": "Double Heart Granny Square — Free Crochet Pattern — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 4
}