{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "dog-single-crochet-granny-square",
  "title": "Dog Single Crochet Granny Square - Free Crochet Pattern",
  "meta_description": "Free dog granny square crochet pattern with sc-dec, sc3tog and hdc-inc shaping. Make a 4.7\" x 5\" puppy square for blankets and bags",
  "published_at": "2026-07-25",
  "updated_at": "2026-07-25",
  "author": "Ruby",
  "thumbnail_url": "data/images/dog-single-crochet-granny-square-hero.webp",
  "meta": {
    "title": "Dog Single Crochet Granny Square - Free Crochet Pattern",
    "pattern_name": "Dog Single Crochet Granny Square - Free Crochet Pattern",
    "difficulty": "Intermediate",
    "time_needed": "2-3 Hours",
    "rating": 4.7,
    "made_count": "1.2K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "DK",
      "tags": [
        "granny square",
        "dog granny square",
        "free pattern",
        "single crochet",
        "animal granny square",
        "dk yarn",
        "colorwork",
        "blanket square",
        "sc3tog",
        "back loop only",
        "puppy crochet",
        "intermediate crochet"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Dog Single Crochet 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 sc-dec, sc3tog, hdc-inc and working in back loops only",
          "raw_text": "Comfortable with sc-dec, sc3tog, hdc-inc and working in back loops only",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "hero-info-2",
          "label": "Afternoon Project",
          "value": "2-3 hours across three worked pieces plus finishing",
          "raw_text": "2-3 hours across three worked pieces plus finishing",
          "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": "Dog Lover's Square",
          "value": "A 4.7\" x 5\" puppy face for blankets, bags and gifts",
          "raw_text": "A 4.7\" x 5\" puppy face for blankets, bags and gifts",
          "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 single crochet square into a soft-eared puppy portrait, complete with a shaped muzzle, a little inverted-trapezoid nose and a rounded head worked over four colors. It starts from a simple chain-6 foundation and grows outward in short, purposeful rows rather than the usual round-and-round granny method, so the finished piece reads as a real dog face instead of a flat motif. It's perfect for anyone who wants their granny square blanket to have personality",
          "raw_text": "This pattern turns a humble single crochet square into a soft-eared puppy portrait, complete with a shaped muzzle, a little inverted-trapezoid nose and a rounded head worked over four colors. It starts from a simple chain-6 foundation and grows outward in short, purposeful rows rather than the usual round-and-round granny method, so the finished piece reads as a real dog face instead of a flat motif. It's perfect for anyone who wants their granny square blanket to have personality",
          "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 be working single crochet, single crochet decreases, sc3tog, slip stitches, half double crochet and hdc increases, plus a back-loop-only join that creates the crisp ridge separating the nose from the head. There are three separate parts to make, each just four or five rounds, then a small amount of seaming. Anyone who can decrease neatly and count stitches confidently will manage it. Set aside roughly two to three hours from first chain to woven-in ends",
          "raw_text": "You'll be working single crochet, single crochet decreases, sc3tog, slip stitches, half double crochet and hdc increases, plus a back-loop-only join that creates the crisp ridge separating the nose from the head. There are three separate parts to make, each just four or five rounds, then a small amount of seaming. Anyone who can decrease neatly and count stitches confidently will manage it. Set aside roughly two to three hours from first chain to woven-in ends",
          "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 about 4.7 inches wide by 5.0 inches tall, which sits comfortably alongside standard granny squares in a blanket layout. In DK weight it comes out dense and slightly firm, with enough structure to hold the muzzle shape without stuffing. The face is unmistakably doggy from across the room, which makes it a wonderful gift front for a tote bag, a cushion panel, or a whole puppy-themed baby blanket for a dog-loving family",
          "raw_text": "The finished square measures about 4.7 inches wide by 5.0 inches tall, which sits comfortably alongside standard granny squares in a blanket layout. In DK weight it comes out dense and slightly firm, with enough structure to hold the muzzle shape without stuffing. The face is unmistakably doggy from across the room, which makes it a wonderful gift front for a tote bag, a cushion panel, or a whole puppy-themed baby blanket for a dog-loving family",
          "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 have made an embarrassing number of plain granny squares in my life, so the first time I finished this dog's nose I actually laughed out loud. That little sc3tog and the sc-inc worked into the sixth skipped chain create a tiny inverted trapezoid that looks nothing special on the hook and then suddenly reads as a wet puppy nose the moment you turn it the right way up. That transformation is the best part of the whole make. I also love how honest the construction is. There is no stuffing, no wire, no fiddly embroidery to fake the shape. The muzzle is built by decreasing, the head curve comes from those five hdc increases in a row, and joining the new yarn into the back loops only gives you a crisp little ridge where the nose meets the face. It is real shaping doing real work. And because each part is only four or five rounds, you get that finished-something feeling three times in a single afternoon. It is the rare pattern that is genuinely fun to make and genuinely cute when it's done",
          "raw_text": "I have made an embarrassing number of plain granny squares in my life, so the first time I finished this dog's nose I actually laughed out loud. That little sc3tog and the sc-inc worked into the sixth skipped chain create a tiny inverted trapezoid that looks nothing special on the hook and then suddenly reads as a wet puppy nose the moment you turn it the right way up. That transformation is the best part of the whole make. I also love how honest the construction is. There is no stuffing, no wire, no fiddly embroidery to fake the shape. The muzzle is built by decreasing, the head curve comes from those five hdc increases in a row, and joining the new yarn into the back loops only gives you a crisp little ridge where the nose meets the face. It is real shaping doing real work. And because each part is only four or five rounds, you get that finished-something feeling three times in a single afternoon. It is the rare pattern that is genuinely fun to make and genuinely cute when it's done",
          "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": "Counting the chain-1 standing stitch as a real stitch at the start of the rows",
          "value": "The pattern uses ch1 as a standing stitch, which means it stands in place of the first sc rather than adding an extra one. If you then work another sc into the same spot, your row grows by one stitch every single row and the muzzle stops tapering. Work your first sc into the stitch the ch1 sits on top of, and recount at the end of each row against the pattern's stitch total",
          "raw_text": "The pattern uses ch1 as a standing stitch, which means it stands in place of the first sc rather than adding an extra one. If you then work another sc into the same spot, your row grows by one stitch every single row and the muzzle stops tapering. Work your first sc into the stitch the ch1 sits on top of, and recount at the end of each row against the pattern's stitch total",
          "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 sc3tog too loosely so the nose tip flares instead of pointing",
          "value": "The sc3tog is what pulls the muzzle down to its narrow tip. If the three loops are pulled through with a loose yarn over, the tip stays wide and the nose reads as a blob. Keep the working yarn snug as you draw through all four loops, and give the stitch a gentle downward tug after completing it to settle the shape",
          "raw_text": "The sc3tog is what pulls the muzzle down to its narrow tip. If the three loops are pulled through with a loose yarn over, the tip stays wide and the nose reads as a blob. Keep the working yarn snug as you draw through all four loops, and give the stitch a gentle downward tug after completing it to settle the shape",
          "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": "Missing the sc-inc that goes into the 6th skipped chain of the foundation",
          "value": "That sixth chain is easy to lose because it sits at the very end of the foundation row and looks like part of the turning edge. Before you start the slip stitch travel, put a stitch marker in that chain so you can find it instantly. Skipping it leaves the nose lopsided and the following four slip stitches will not reach the sc3tog",
          "raw_text": "That sixth chain is easy to lose because it sits at the very end of the foundation row and looks like part of the turning edge. Before you start the slip stitch travel, put a stitch marker in that chain so you can find it instantly. Skipping it leaves the nose lopsided and the following four slip stitches will not reach the sc3tog",
          "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": "Joining the new yarn into both loops instead of back loops only after turning",
          "value": "The pattern specifically says turn over and work BLO for the join. Working through both loops removes the ridge that visually separates the nose from the head, and the two colors blur into each other. Turn the piece first, then pick up only the back loop of that first sc of the sc-inc on the right before joining",
          "raw_text": "The pattern specifically says turn over and work BLO for the join. Working through both loops removes the ridge that visually separates the nose from the head, and the two colors blur into each other. Turn the piece first, then pick up only the back loop of that first sc of the sc-inc on the right before joining",
          "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": "Bunching or fanning the run of five hdc-inc stitches on the head round",
          "value": "Five increases in a row is a lot of extra fabric at once, and worked too tightly it cups while worked too loosely it ruffles. Keep your hdc height consistent by yarning over before inserting the hook every time, and lay the piece flat every couple of stitches. If it still ruffles, go down half a hook size for that section only",
          "raw_text": "Five increases in a row is a lot of extra fabric at once, and worked too tightly it cups while worked too loosely it ruffles. Keep your hdc height consistent by yarning over before inserting the hook every time, and lay the piece flat every couple of stitches. If it still ruffles, go down half a hook size for that section only",
          "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": "Carrying all four colors loosely across the back of the work",
          "value": "Long floats behind the square snag on fingers and show through the lighter colors, especially the cream muzzle. Cut and rejoin at each color change instead of carrying, leaving a six-inch tail. Weave those tails in along same-color stitches so they disappear rather than shadowing through the front",
          "raw_text": "Long floats behind the square snag on fingers and show through the lighter colors, especially the cream muzzle. Cut and rejoin at each color change instead of carrying, leaving a six-inch tail. Weave those tails in along same-color stitches so they disappear rather than shadowing through the front",
          "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, the sample is made with DK sports",
              "raw_text": "Yarn of your choice- 4 colors, the sample is made with DK sports"
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "A crochet hook, we are using a 3.00mm hook",
              "raw_text": "A 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-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": 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-hdc",
          "label": "hdc",
          "value": "half double crochet",
          "raw_text": "hdc = half double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "hdc",
          "meaning": "half double crochet"
        },
        {
          "order": 5,
          "row_type": "abbrev",
          "code": "abbrev-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": 6,
          "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": 7,
          "row_type": "abbrev",
          "code": "abbrev-sl-st",
          "label": "Sl St",
          "value": "slip stitch for joining to different rounds.",
          "raw_text": "Sl St = slip stitch for joining to different rounds.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "Sl St",
          "meaning": "slip stitch for joining to different rounds."
        },
        {
          "order": 8,
          "row_type": "abbrev",
          "code": "abbrev-sc3tog",
          "label": "sc3tog",
          "value": "single crochet 3 stitches together",
          "raw_text": "sc3tog = single crochet 3 stitches together",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sc3tog",
          "meaning": "single crochet 3 stitches together"
        },
        {
          "order": 9,
          "row_type": "abbrev",
          "code": "abbrev-yo",
          "label": "yo",
          "value": "yarn over",
          "raw_text": "yo = yarn over",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "yo",
          "meaning": "yarn over"
        },
        {
          "order": 10,
          "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": 11,
          "row_type": "abbrev",
          "code": "abbrev-dec",
          "label": "dec",
          "value": "decrease",
          "raw_text": "dec = decrease",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "dec",
          "meaning": "decrease"
        },
        {
          "order": 12,
          "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": 13,
          "row_type": "abbrev",
          "code": "abbrev-bl",
          "label": "BL",
          "value": "back loop",
          "raw_text": "BL = back loop",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "BL",
          "meaning": "back loop"
        },
        {
          "order": 14,
          "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": 15,
          "row_type": "abbrev",
          "code": "abbrev-tl",
          "label": "tl",
          "value": "third loop",
          "raw_text": "tl = third loop",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "tl",
          "meaning": "third loop"
        }
      ]
    },
    {
      "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": "Turn over  and  BLO . Join new yarn into the first sc of the sc-inc on the right. ch1 as a standing st, 1sc in this st, 1sc, 4 sc-inc, 2sc, 5 hdc-inc, sl st to the first sc.",
          "raw_text": "Round 1 Turn over  and  BLO . Join new yarn into the first sc of the sc-inc on the right. ch1 as a standing st, 1sc in this st, 1sc, 4 sc-inc, 2sc, 5 hdc-inc, sl st to the first sc.",
          "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": "Turn over . ch1 as a standing st, 1sc in this st, 1sc, 1hdc, 1 hdc-inc, 2hdc, 1 hdc-inc, 1hdc, 2sc, sl st to the next st.",
          "raw_text": "Row 2 Turn over . ch1 as a standing st, 1sc in this st, 1sc, 1hdc, 1 hdc-inc, 2hdc, 1 hdc-inc, 1hdc, 2sc, sl st to the next st.",
          "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": "Turn over . ch1 as a standing st, 1sc in this st, 1 sc-inc, 1 hdc-inc, 6hdc, 1 hdc-inc, 1 sc-inc, 1sc, sl st to the next st.",
          "raw_text": "Row 3 Turn over . ch1 as a standing st, 1sc in this st, 1 sc-inc, 1 hdc-inc, 6hdc, 1 hdc-inc, 1 sc-inc, 1sc, sl st to the next st.",
          "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": "Turn over . ch2 as a standing st(count as 1hdc), 1hdc, 3 hdc-inc, 6hdc, 3 hdc-inc, 2hdc, 1 dc-inc, (1dc+1hdc), (1hdc+1sc), 6sc, (1sc+1hdc), (1hdc+1dc), 1 dc-inc, sl st to the top of the first ch2.",
          "raw_text": "Round 4 Turn over . ch2 as a standing st(count as 1hdc), 1hdc, 3 hdc-inc, 6hdc, 3 hdc-inc, 2hdc, 1 dc-inc, (1dc+1hdc), (1hdc+1sc), 6sc, (1sc+1hdc), (1hdc+1dc), 1 dc-inc, sl st to the top of the first ch2.",
          "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": "make 2 slst, 1sc, ch2, 2sc, make 10 slst, 2sc, ch2, 1sc, make 20 slst, join to the first slst, fasten off.",
          "raw_text": "Round 5 make 2 slst, 1sc, ch2, 2sc, make 10 slst, 2sc, ch2, 1sc, make 20 slst, join to the first slst, 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": "subhead",
          "code": "main-pattern-info-1",
          "label": "",
          "value": "The Head",
          "raw_text": "The Head",
          "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-2",
          "label": "Info",
          "value": "All color changes use the same technique: make the final stitch incomplete, join your new yarn, yarn over and pull through to complete the stitch and finish the color change seamlessly.",
          "raw_text": "All color changes use the same technique: make the final stitch incomplete, join your new yarn, yarn over and pull through to complete the stitch and finish the color change seamlessly.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 9,
      "card_type": "part",
      "code": "part-2",
      "title": "Part 2",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "round",
          "code": "part-2-round-1",
          "label": "Round 1",
          "value": "Rotate it 180 degrees  and  BLO  for this row. Join new yarn in the slst which made into the  1st dc of the last dc-inc from Snout's Round4.  ch4 as a standing st (count as 1 tr), 1dc, 1hdc, 3sc(make the  3rd sc an incomplete sc , yo with  white yarn , then pull through to finish this sc and color changing)4sc (make the  4th sc an incomplete sc , yo with  yellow yarn , then pull through to finish this sc and color changing), 3sc, 1hdc, 1dc, 1tr.",
          "raw_text": "Row 1 Rotate it 180 degrees  and  BLO  for this row. Join new yarn in the slst which made into the  1st dc of the last dc-inc from Snout's Round4.  ch4 as a standing st (count as 1 tr), 1dc, 1hdc, 3sc(make the  3rd sc an incomplete sc , yo with  white yarn , then pull through to finish this sc and color changing)4sc (make the  4th sc an incomplete sc , yo with  yellow yarn , then pull through to finish this sc and color changing), 3sc, 1hdc, 1dc, 1tr.",
          "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": "part-2-round-2",
          "label": "Round 2",
          "value": "Turn over.  sk the tr, ch1 and make 1sc in next st, 4sc( do color change when make 4th sc ), 4sc( do color change when make 4th sc ), 4sc, sk the next dc, 1sc in the top of the ch4.",
          "raw_text": "Row 2 Turn over.  sk the tr, ch1 and make 1sc in next st, 4sc( do color change when make 4th sc ), 4sc( do color change when make 4th sc ), 4sc, sk the next dc, 1sc in the top of the ch4.",
          "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": "part-2-round-3",
          "label": "Round 3",
          "value": "Turn over.  ch1+1sc in this st, 4sc( do color change when make 4th sc ), 4sc( do color change when make 4th sc ), 5sc.",
          "raw_text": "Row 3 Turn over.  ch1+1sc in this st, 4sc( do color change when make 4th sc ), 4sc( do color change when make 4th sc ), 5sc.",
          "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": "part-2-round-4",
          "label": "Round 4",
          "value": "Turn over . sk the sc, ch1 and make 1sc in next st, 3sc( do color change when make 3rd sc ), 4sc( do color change when make 4th sc ), 3sc, sl st to the next ch1.",
          "raw_text": "Row 4 Turn over . sk the sc, ch1 and make 1sc in next st, 3sc( do color change when make 3rd sc ), 4sc( do color change when make 4th sc ), 3sc, sl st to the next ch1.",
          "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": "part-2-info-1",
          "label": "Rows 5-9",
          "value": "For each row : Work 1sc in each st  back and forth , continuing with the same color as the previous round. Fasten off after Row 8.",
          "raw_text": "Row 5-9 For each row : Work 1sc in each st  back and forth , continuing with the same color as the previous round. Fasten off after Row 8.",
          "round_start": 5,
          "round_end": 9,
          "is_range": true,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "subhead",
          "code": "part-2-info-2",
          "label": "",
          "value": "The Square",
          "raw_text": "The Square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 10,
      "card_type": "part",
      "code": "part-3",
      "title": "Part 3",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "round",
          "code": "part-3-round-1",
          "label": "Round 1",
          "value": "TLO for this round except otherwise noted.  Choosing the Snout Part, join to the right, add new yarn to the sc after ch2.",
          "raw_text": "Round 1 TLO for this round except otherwise noted.  Choosing the Snout Part, join to the right, add new yarn to the sc after ch2.",
          "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": "part-3-info-1",
          "label": "Steps",
          "value": "(ch1+1sc) in this st, 4hdc, 1sc in BL of each ch of the next ch-4 group.  Next 7 sts all work in the outer loops: 2sc, 4hdc, 1 sc-inc.  12sc.  Next 11 sts all work in the outer loops: 1 sc-inc, 4hdc, 2sc, 4sc(work around the post of the tr from Head's Row 1).  4hdc, 1sc, (1sc+ch2+1dc) in next ch-2 sp, 3hdc, 8sc, 3hdc, (1dc+ch2+1sc)in next ch-2 sp, sl st to the first sc.",
          "raw_text": "(ch1+1sc) in this st, 4hdc, 1sc in BL of each ch of the next ch-4 group.  Next 7 sts all work in the outer loops: 2sc, 4hdc, 1 sc-inc.  12sc.  Next 11 sts all work in the outer loops: 1 sc-inc, 4hdc, 2sc, 4sc(work around the post of the tr from Head's Row 1).  4hdc, 1sc, (1sc+ch2+1dc) in next ch-2 sp, 3hdc, 8sc, 3hdc, (1dc+ch2+1sc)in next ch-2 sp, sl st to the first 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": "round",
          "code": "part-3-round-2",
          "label": "Round 2",
          "value": "ch1+1sc in this st, 13sc, 1 sc-inc, ch2, 1 sc-inc, 14sc, 1 sc-inc, ch2, 1 sc-inc, 15sc, (1sc+ch2+1hdc)in next ch-2 sp, 3hdc, 10sc, 3hdc, (1hdc+ch2+1sc)in next ch-2 sp, 1sc, sl st to the first sc.",
          "raw_text": "Round 2 ch1+1sc in this st, 13sc, 1 sc-inc, ch2, 1 sc-inc, 14sc, 1 sc-inc, ch2, 1 sc-inc, 15sc, (1sc+ch2+1hdc)in next ch-2 sp, 3hdc, 10sc, 3hdc, (1hdc+ch2+1sc)in next ch-2 sp, 1sc, sl st to the first sc.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "round",
          "code": "part-3-round-3-6",
          "label": "Round 3-6",
          "value": "For Each Round : ch1 to start, 1sc in each st, while (1sc+ch2+1sc) in each corner sp, sl st to the first sc.",
          "raw_text": "Round 3-6 For Each Round : ch1 to start, 1sc in each st, while (1sc+ch2+1sc) in each corner sp, sl st to the first sc.",
          "round_start": 3,
          "round_end": 6,
          "is_range": true,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "round",
          "code": "part-3-round-7",
          "label": "Round 7",
          "value": "ch1 to start, 1sc in each st, while (3sc) in each corner sp, sl st to the first sc, fasten off.",
          "raw_text": "Round 7 ch1 to start, 1sc in each st, while (3sc) in each corner sp, sl st to the first sc, fasten off.",
          "round_start": 7,
          "round_end": 7,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "subhead",
          "code": "part-3-info-2",
          "label": "",
          "value": "Floppy Ears",
          "raw_text": "Floppy Ears",
          "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": "part-3-info-3",
          "label": "Info",
          "value": "Leave long yarn tails at both ends for attaching.  knot, ch10. sk2. Work 7 sts in  BL  of next 7 chs  from back to beginning . 1hdc in the 8th ch, 3dc, 2hdc, 1sc, Work 7 sts in  FL  of next 7 chs  from beginning to back . (3sc) in first ch. , 1sc, 2hdc, 3dc, 1 hdc-inc, sl st to the first hdc.",
          "raw_text": "Leave long yarn tails at both ends for attaching.  knot, ch10. sk2. Work 7 sts in  BL  of next 7 chs  from back to beginning . 1hdc in the 8th ch, 3dc, 2hdc, 1sc, Work 7 sts in  FL  of next 7 chs  from beginning to back . (3sc) in first ch. , 1sc, 2hdc, 3dc, 1 hdc-inc, sl st to the first hdc.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "info",
          "code": "part-3-info-4",
          "label": "Info",
          "value": "Make a second ear in the same way. Using the long yarn tails, sew both ears to the two sides of the head part. Sew only the top and one-side edge of the ear. Leave the other edges free to move naturally.",
          "raw_text": "Make a second ear in the same way. Using the long yarn tails, sew both ears to the two sides of the head part. Sew only the top and one-side edge of the ear. Leave the other edges free to move naturally.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "subhead",
          "code": "part-3-info-5",
          "label": "",
          "value": "Two Eyes",
          "raw_text": "Two Eyes",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "info",
          "code": "part-3-info-6",
          "label": "Info",
          "value": "Leave long yarn tails at both ends for attaching.  Start with a magic ring. ch1 as a standing st(count as an incomplete hdc), make the other 2 incomplete hdc in this ring, yo and pull through all loops on your hook to form a 3-hdc-puff, pull the tail tightly, ch1.",
          "raw_text": "Leave long yarn tails at both ends for attaching.  Start with a magic ring. ch1 as a standing st(count as an incomplete hdc), make the other 2 incomplete hdc in this ring, yo and pull through all loops on your hook to form a 3-hdc-puff, pull the tail tightly, ch1.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 11,
          "row_type": "info",
          "code": "part-3-info-7",
          "label": "Info",
          "value": "Make another eye. Place one eye on each orange section, centered horizontally and positioned just above the middle of the head. With black yarn, create a vertical  line  extending down from the nose to signify the mouth.",
          "raw_text": "Make another eye. Place one eye on each orange section, centered horizontally and positioned just above the middle of the head. With black yarn, create a vertical  line  extending down from the nose to signify the mouth.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 11,
      "card_type": "important_notes",
      "code": "important-notes",
      "title": "Important Notes",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "note-1",
          "label": "Note",
          "value": "💡 The sample uses a 3.00mm hook with DK sports yarn, which is deliberately smaller than the yarn band suggests. That tight gauge is what keeps the muzzle firm and stops the square from stretching out of its 4.7 x 5.0 inch shape. If your square comes out noticeably larger, drop to a 2.75mm rather than changing yarn",
          "raw_text": "💡 The sample uses a 3.00mm hook with DK sports yarn, which is deliberately smaller than the yarn band suggests. That tight gauge is what keeps the muzzle firm and stops the square from stretching out of its 4.7 x 5.0 inch shape. If your square comes out noticeably larger, drop to a 2.75mm rather than changing yarn",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "note-2",
          "label": "Note",
          "value": "💡 Place a stitch marker in the 6th skipped chain of the foundation before you begin Step 5. You need to return to it much later for the sc-inc, and hunting for it in a tapered piece of fabric is genuinely frustrating",
          "raw_text": "💡 Place a stitch marker in the 6th skipped chain of the foundation before you begin Step 5. You need to return to it much later for the sc-inc, and hunting for it in a tapered piece of fabric is genuinely frustrating",
          "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": "💡 This square is not stuffed. All the dimension in the nose comes from the sc3tog and the slip stitch travel, so resist the urge to pad it — stuffing will distort the flat back and make the square impossible to seam evenly into a blanket",
          "raw_text": "💡 This square is not stuffed. All the dimension in the nose comes from the sc3tog and the slip stitch travel, so resist the urge to pad it — stuffing will distort the flat back and make the square impossible to seam evenly into a blanket",
          "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": "💡 Because the piece is turned over several times, keep a small safety pin on the right side of the work from the very first row. Turning is easy to lose track of, and working a color round on the wrong side is the most common reason a finished dog looks mirrored",
          "raw_text": "💡 Because the piece is turned over several times, keep a small safety pin on the right side of the work from the very first row. Turning is easy to lose track of, and working a color round on the wrong side is the most common reason a finished dog looks mirrored",
          "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": "💡 Wind small bobbins or butterfly bundles of each of the four colors before you start rather than working from four full balls. The color sections are short, and untangling four DK balls halfway through the head round costs more time than the winding does",
          "raw_text": "💡 Wind small bobbins or butterfly bundles of each of the four colors before you start rather than working from four full balls. The color sections are short, and untangling four DK balls halfway through the head round costs more time than the winding does",
          "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": "💡 Block the finished square gently with steam or a damp towel before assembling. The hdc increase section wants to curl slightly on the first day and settles into a clean edge once blocked, which matters a lot if you are joining many squares into a grid",
          "raw_text": "💡 Block the finished square gently with steam or a damp towel before assembling. The hdc increase section wants to curl slightly on the first day and settles into a clean edge once blocked, which matters a lot if you are joining many squares into a grid",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 12,
      "card_type": "faq",
      "code": "faq",
      "title": "FAQ",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "faq",
          "code": "faq-1",
          "label": "Can I make this dog granny square in worsted weight instead of DK?",
          "value": "Yes, worsted on a 4.0mm hook works well and gives you a square around 6 inches instead of 4.7 x 5.0 inches. Just be aware that the sc3tog nose tip becomes chunkier at that scale, so keep your decreases extra snug to preserve the shape",
          "raw_text": "Yes, worsted on a 4.0mm hook works well and gives you a square around 6 inches instead of 4.7 x 5.0 inches. Just be aware that the sc3tog nose tip becomes chunkier at that scale, so keep your decreases extra snug to preserve the shape",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I make this dog granny square in worsted weight instead of DK?",
          "answer": "Yes, worsted on a 4.0mm hook works well and gives you a square around 6 inches instead of 4.7 x 5.0 inches. Just be aware that the sc3tog nose tip becomes chunkier at that scale, so keep your decreases extra snug to preserve the shape",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "Why does my nose look flat instead of like an inverted trapezoid?",
          "value": "Nine times out of ten it's the sc3tog being worked too loosely, or the sc-inc into the 6th skipped chain being missed entirely. Lay the finished nose piece down and check that it has a wide top edge narrowing to a point — if both sides aren't symmetrical, one of the sc-inc stitches is in the wrong place",
          "raw_text": "Nine times out of ten it's the sc3tog being worked too loosely, or the sc-inc into the 6th skipped chain being missed entirely. Lay the finished nose piece down and check that it has a wide top edge narrowing to a point — if both sides aren't symmetrical, one of the sc-inc stitches is in the wrong place",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Why does my nose look flat instead of like an inverted trapezoid?",
          "answer": "Nine times out of ten it's the sc3tog being worked too loosely, or the sc-inc into the 6th skipped chain being missed entirely. Lay the finished nose piece down and check that it has a wide top edge narrowing to a point — if both sides aren't symmetrical, one of the sc-inc stitches is in the wrong place",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "Do the three pattern parts get sewn together or crocheted together?",
          "value": "They're joined with a darning needle after all three are complete, which gives you the flexibility to position the ears and muzzle exactly where they look right on your particular square. Use a length of the head color and small whip stitches along the back so the seam disappears from the front",
          "raw_text": "They're joined with a darning needle after all three are complete, which gives you the flexibility to position the ears and muzzle exactly where they look right on your particular square. Use a length of the head color and small whip stitches along the back so the seam disappears from the front",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Do the three pattern parts get sewn together or crocheted together?",
          "answer": "They're joined with a darning needle after all three are complete, which gives you the flexibility to position the ears and muzzle exactly where they look right on your particular square. Use a length of the head color and small whip stitches along the back so the seam disappears from the front",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "How many of these squares do I need for a baby blanket?",
          "value": "roughly 4.7 x 5.0 inches each, a 6 by 7 grid gives you about 28 x 35 inches, which is a good stroller blanket size. Most people alternate dog squares with plain solid squares so the faces have breathing room and the blanket doesn't take forever",
          "raw_text": "roughly 4.7 x 5.0 inches each, a 6 by 7 grid gives you about 28 x 35 inches, which is a good stroller blanket size. Most people alternate dog squares with plain solid squares so the faces have breathing room and the blanket doesn't take forever",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many of these squares do I need for a baby blanket?",
          "answer": "roughly 4.7 x 5.0 inches each, a 6 by 7 grid gives you about 28 x 35 inches, which is a good stroller blanket size. Most people alternate dog squares with plain solid squares so the faces have breathing room and the blanket doesn't take forever",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "What does BLO mean in this pattern and why does it matter here?",
          "value": "BLO means back loops only — you insert your hook under just the back loop of the stitch instead of both loops. In this pattern it creates the visible ridge where the nose meets the head, which is what makes the muzzle look like it sits forward instead of being painted flat onto the square",
          "raw_text": "BLO means back loops only — you insert your hook under just the back loop of the stitch instead of both loops. In this pattern it creates the visible ridge where the nose meets the head, which is what makes the muzzle look like it sits forward instead of being painted flat onto the square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What does BLO mean in this pattern and why does it matter here?",
          "answer": "BLO means back loops only — you insert your hook under just the back loop of the stitch instead of both loops. In this pattern it creates the visible ridge where the nose meets the head, which is what makes the muzzle look like it sits forward instead of being painted flat onto the square",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/dog-single-crochet-granny-square-hero.webp",
    "data/images/dog-single-crochet-granny-square-step-2.webp",
    "data/images/dog-single-crochet-granny-square-step-3.webp",
    "data/images/dog-single-crochet-granny-square-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/dog-single-crochet-granny-square-hero.webp",
      "alt": "Dog Single Crochet Granny Square - Free Crochet Pattern — photo 1",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/dog-single-crochet-granny-square-hero.webp",
      "alt": "Dog Single Crochet Granny Square - Free Crochet Pattern — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/dog-single-crochet-granny-square-step-2.webp",
      "alt": "Dog Single Crochet Granny Square - Free Crochet Pattern — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/dog-single-crochet-granny-square-step-3.webp",
      "alt": "Dog Single Crochet Granny Square - Free Crochet Pattern — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/dog-single-crochet-granny-square-step-4.webp",
      "alt": "Dog Single Crochet Granny Square - Free Crochet Pattern — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 2
}