{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "cloud-granny-square-crochet-pattern",
  "title": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud",
  "meta_description": "Free cloud granny square crochet pattern with a dimensional 3D cloud motif on a detachable base. DK yarn, 3mm hook, modular sky-scene squares",
  "published_at": "2026-07-25",
  "updated_at": "2026-07-25",
  "author": "Ruby",
  "thumbnail_url": "data/images/cloud-granny-square-crochet-pattern-hero.webp",
  "meta": {
    "title": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud",
    "pattern_name": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud",
    "difficulty": "Intermediate",
    "time_needed": "1-2 Hours",
    "rating": 4.8,
    "made_count": "1.2K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "DK / Sport",
      "tags": [
        "granny square",
        "cloud granny square",
        "free crochet pattern",
        "modular crochet",
        "front loop only",
        "back loop only",
        "magic loop",
        "dk yarn",
        "3d crochet motif",
        "sky theme",
        "nursery crochet",
        "blanket square"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Intermediate Level",
          "value": "Comfortable with magic loops, FLO/BLO work, and mixed-height stitches",
          "raw_text": "Comfortable with magic loops, FLO/BLO work, and mixed-height stitches",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "hero-info-2",
          "label": "Quick Evening Make",
          "value": "1-2 hours per square once the cloud rhythm clicks",
          "raw_text": "1-2 hours per square once the cloud 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": "Dreamy Modular Motif",
          "value": "Detachable clouds that turn any blanket, bag, or pillow into a sky scene",
          "raw_text": "Detachable clouds that turn any blanket, bag, or pillow into a sky scene",
          "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 makes a small, wonderfully dimensional cloud granny square built from two separate attachable pieces: a puffy layered cloud motif and a structured base square. Because the cloud is worked on its own and stitched down afterward, you are never locked into the traditional flat granny format. You can leave the clouds loose and scatter them across a finished blanket, or seat them on the base for a tidy 2.9-inch square. It is a joy for crocheters who love motifs with actual depth instead of flat surface texture",
          "raw_text": "This pattern makes a small, wonderfully dimensional cloud granny square built from two separate attachable pieces: a puffy layered cloud motif and a structured base square. Because the cloud is worked on its own and stitched down afterward, you are never locked into the traditional flat granny format. You can leave the clouds loose and scatter them across a finished blanket, or seat them on the base for a tidy 2.9-inch square. It is a joy for crocheters who love motifs with actual depth instead of flat surface texture",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "about-info-2",
          "label": "",
          "value": "The techniques here are the fun kind of fiddly. You begin with a magic loop and a chain-1 standing stitch, then work a run of mixed-height stitches — 1sc, 3hdc, 1sc, ch2, 4dc, ch2, 1dc, 2tr, 1dc — straight into that loop to shape the first cloud bumps. Round 3 is worked in the front loops only and Round 4 in the back loops only, which is exactly what separates the leading cloud from the shadow cloud behind it. Expect intermediate comfort with stitch heights and loop placement; each square takes roughly one to two hours",
          "raw_text": "The techniques here are the fun kind of fiddly. You begin with a magic loop and a chain-1 standing stitch, then work a run of mixed-height stitches — 1sc, 3hdc, 1sc, ch2, 4dc, ch2, 1dc, 2tr, 1dc — straight into that loop to shape the first cloud bumps. Round 3 is worked in the front loops only and Round 4 in the back loops only, which is exactly what separates the leading cloud from the shadow cloud behind it. Expect intermediate comfort with stitch heights and loop placement; each square takes roughly one to two hours",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "about-info-3",
          "label": "",
          "value": "Finished in DK or sport weight on a 3.00mm hook, the completed cloud granny square measures about 2.9 inches by 2.9 inches — small, dense, and satisfyingly firm in the hand. The cloud sits proud of the base, catching light along its upper edge and casting a soft shadow from the second layer beneath. Worked in four colors it reads instantly as sky, and a small stack of them makes a charming baby shower gift, a nursery garland, or a set of coasters for someone who loves quiet, dreamy things",
          "raw_text": "Finished in DK or sport weight on a 3.00mm hook, the completed cloud granny square measures about 2.9 inches by 2.9 inches — small, dense, and satisfyingly firm in the hand. The cloud sits proud of the base, catching light along its upper edge and casting a soft shadow from the second layer beneath. Worked in four colors it reads instantly as sky, and a small stack of them makes a charming baby shower gift, a nursery garland, or a set of coasters for someone who loves quiet, dreamy things",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 4,
      "card_type": "switch_things_up",
      "code": "switch-things-up",
      "title": "Switch Things Up",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "switch-1",
          "label": "",
          "value": "The four-color structure is where this pattern gets playful, and the source designer is right that color contrast in the base square is the whole trick — combining light and dark sky tones is what makes the cloud appear to float. For a classic daytime sky, try a cornflower base with a bright white leading cloud and a soft dove grey shadow layer; the grey is doing real work, so do not skip it or the depth flattens. For sunset, swap the base to a peach or dusty coral and make the leading cloud cream with a lavender shadow. For a nighttime version, go navy or deep indigo on the base, pale silver-grey clouds, and add a metallic thread held alongside your DK for a faint starlight shimmer. Size is easy to change because the base is independent of the cloud. Add one extra round to the base to jump from 2.9 inches to roughly 4 inches, or add two to three rounds for a 6-inch blanket square that gives your cloud plenty of open sky above it. Working the base rounds in standard granny clusters keeps the growth predictable. Yarn swaps work beautifully: a cotton DK gives crisp stitch definition for coasters, a budget acrylic DK is friendly for a full blanket, and a soft merino DK makes a squishier nursery version. For themed sets, make clouds only and pair them with a crocheted moon, stars, or sun for a dawn-to-dusk wall hanging. A moody storm version wants charcoal clouds on a burnt-orange base; a spring version wants pale mint with white. Scatter loose clouds across a finished cardigan yoke or a tote bag and let them be pure decoration",
          "raw_text": "The four-color structure is where this pattern gets playful, and the source designer is right that color contrast in the base square is the whole trick — combining light and dark sky tones is what makes the cloud appear to float. For a classic daytime sky, try a cornflower base with a bright white leading cloud and a soft dove grey shadow layer; the grey is doing real work, so do not skip it or the depth flattens. For sunset, swap the base to a peach or dusty coral and make the leading cloud cream with a lavender shadow. For a nighttime version, go navy or deep indigo on the base, pale silver-grey clouds, and add a metallic thread held alongside your DK for a faint starlight shimmer. Size is easy to change because the base is independent of the cloud. Add one extra round to the base to jump from 2.9 inches to roughly 4 inches, or add two to three rounds for a 6-inch blanket square that gives your cloud plenty of open sky above it. Working the base rounds in standard granny clusters keeps the growth predictable. Yarn swaps work beautifully: a cotton DK gives crisp stitch definition for coasters, a budget acrylic DK is friendly for a full blanket, and a soft merino DK makes a squishier nursery version. For themed sets, make clouds only and pair them with a crocheted moon, stars, or sun for a dawn-to-dusk wall hanging. A moody storm version wants charcoal clouds on a burnt-orange base; a spring version wants pale mint with white. Scatter loose clouds across a finished cardigan yoke or a tote bag and let them be pure decoration",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 5,
      "card_type": "common_mistakes",
      "code": "common-mistakes",
      "title": "Common Mistakes & How to Fix Them",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "mistake",
          "code": "mistake-1",
          "label": "Working Round 3 into both loops instead",
          "value": "FLO in Round 3 is what leaves the back loops free for Round 4 to grab. If you work through both loops, the shadow cloud has nothing to sit on and the motif stays flat. Before starting Round 3, tilt the work toward you and confirm you can clearly see the front loop as a separate strand — if you cannot, your tension is too tight. Go up a quarter hook size or loosen your yarn hand for that round",
          "raw_text": "FLO in Round 3 is what leaves the back loops free for Round 4 to grab. If you work through both loops, the shadow cloud has nothing to sit on and the motif stays flat. Before starting Round 3, tilt the work toward you and confirm you can clearly see the front loop as a separate strand — if you cannot, your tension is too tight. Go up a quarter hook size or loosen your yarn hand for that round",
          "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": "Losing count in the magic loop run of",
          "value": "That is thirteen stitches plus two chain-2 spaces crammed into one small loop, and the mixed heights make miscounts easy to miss. Place a removable stitch marker after each height change — after the 3hdc group, after the 4dc group, and after the 2tr. If your cloud looks lopsided at the end, count each group individually rather than the total; the 3hdc and 4dc groups are the usual culprits",
          "raw_text": "That is thirteen stitches plus two chain-2 spaces crammed into one small loop, and the mixed heights make miscounts easy to miss. Place a removable stitch marker after each height change — after the 3hdc group, after the 4dc group, and after the 2tr. If your cloud looks lopsided at the end, count each group individually rather than the total; the 3hdc and 4dc groups are the usual culprits",
          "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": "Pulling the magic loop closed before",
          "value": "Once you cinch that loop tight, adjusting stitch spacing is nearly impossible. Work all the stitches, lay the piece flat, and check that the cloud bumps sit in a natural uneven line before you tug the tail. If a group looks crowded, ease the stitches around the loop with your fingertips first, then close it. Only after the shape looks right should you pull firmly and weave the tail in",
          "raw_text": "Once you cinch that loop tight, adjusting stitch spacing is nearly impossible. Work all the stitches, lay the piece flat, and check that the cloud bumps sit in a natural uneven line before you tug the tail. If a group looks crowded, ease the stitches around the loop with your fingertips first, then close it. Only after the shape looks right should you pull firmly and weave the tail in",
          "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": "Treating Round 4's BLO as optional decoration",
          "value": "Round 4 worked in back loops only — and only on the left side of the main cloud from Round 2 — is the entire reason the leading cloud reads as being in front. Worked through both loops, the two layers merge and you lose the shadow effect the pattern is built around. Keep the front loops from Round 3 pushed toward you and out of the way, and insert your hook only under the single back strand. If you catch a front loop by accident, frog back — this is not one to fudge",
          "raw_text": "Round 4 worked in back loops only — and only on the left side of the main cloud from Round 2 — is the entire reason the leading cloud reads as being in front. Worked through both loops, the two layers merge and you lose the shadow effect the pattern is built around. Keep the front loops from Round 3 pushed toward you and out of the way, and insert your hook only under the single back strand. If you catch a front loop by accident, frog back — this is not one to fudge",
          "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": "Sewing the cloud to the base with tight, visible stitches",
          "value": "A dimensional cloud flattened by aggressive seaming defeats the whole design, and the pattern specifically asks you to leave the brims of both cloud layers unsewn. Use your darning needle with a matching-color yarn and take small stitches under the outer edge loops of the cloud only, keeping the tension loose enough that the cloud still domes slightly. Pin or clip the cloud in position first, check the placement from a distance, then sew. Never pull the seaming yarn taut between stitches",
          "raw_text": "A dimensional cloud flattened by aggressive seaming defeats the whole design, and the pattern specifically asks you to leave the brims of both cloud layers unsewn. Use your darning needle with a matching-color yarn and take small stitches under the outer edge loops of the cloud only, keeping the tension loose enough that the cloud still domes slightly. Pin or clip the cloud in position first, check the placement from a distance, then sew. Never pull the seaming yarn taut between stitches",
          "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": "Using a hook too large for DK, so the",
          "value": "The 3.00mm hook is deliberately small for DK weight — it creates the dense, firm fabric that holds the 2.9-inch dimension and keeps the cloud from sagging through the base. If your square comes out noticeably larger or feels loose and drapey, drop to a 2.75mm rather than adding rounds to compensate. Make one test square and measure before committing to a full blanket's worth",
          "raw_text": "The 3.00mm hook is deliberately small for DK weight — it creates the dense, firm fabric that holds the 2.9-inch dimension and keeps the cloud from sagging through the base. If your square comes out noticeably larger or feels loose and drapey, drop to a 2.75mm rather than adding rounds to compensate. Make one test square and measure before committing to a full blanket's worth",
          "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. The finished cloud granny square is about 2.9 inches by 2.9 inches.",
              "raw_text": "Yarn of your choice —4 colors; the sample is made with DK Sports. The finished cloud granny square is about 2.9 inches by 2.9 inches."
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "Crochet hook- we are using a 3.00mm hook",
              "raw_text": "Crochet hook- we are using a 3.00mm hook"
            },
            {
              "order": 3,
              "row_type": "item",
              "code": "mat-1-3",
              "label": "",
              "value": "Darning Needle",
              "raw_text": "Darning Needle"
            },
            {
              "order": 4,
              "row_type": "item",
              "code": "mat-1-4",
              "label": "",
              "value": "Scissors",
              "raw_text": "Scissors"
            }
          ]
        }
      ],
      "rows": []
    },
    {
      "order": 7,
      "card_type": "abbreviations",
      "code": "abbreviations",
      "title": "Abbreviations",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "abbrev",
          "code": "abbrev-ch",
          "label": "ch",
          "value": "chain stitch",
          "raw_text": "ch = chain stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "ch",
          "meaning": "chain stitch"
        },
        {
          "order": 2,
          "row_type": "abbrev",
          "code": "abbrev-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-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": 8,
          "row_type": "abbrev",
          "code": "abbrev-fl",
          "label": "FL",
          "value": "front loop",
          "raw_text": "FL = front loop",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "FL",
          "meaning": "front loop"
        },
        {
          "order": 9,
          "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": 10,
          "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": 11,
          "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": 12,
          "row_type": "abbrev",
          "code": "abbrev-slst-/-sl-st",
          "label": "slst / sl st",
          "value": "slip stitch for joining for different round",
          "raw_text": "slst / sl st = slip stitch for joining for different round",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "slst / sl st",
          "meaning": "slip stitch for joining for different round"
        },
        {
          "order": 13,
          "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": 14,
          "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": "Crochet the Cloud",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "main-pattern-info-2",
          "label": "Info",
          "value": "By working stitches at varying heights and using specific loops only — FLO (Round 3) and BLO (Round 4) — we will create dimensional cloud layers. In Round 4, the leading cloud with its subtle shadow behind emerges naturally, giving this design realistic depth and visual interest.",
          "raw_text": "By working stitches at varying heights and using specific loops only — FLO (Round 3) and BLO (Round 4) — we will create dimensional cloud layers. In Round 4, the leading cloud with its subtle shadow behind emerges naturally, giving this design realistic depth and visual interest.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "main-pattern-info-3",
          "label": "Info",
          "value": "Round 1 — the white piece of cloud.",
          "raw_text": "Round 1 — the white piece of cloud.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "round",
          "code": "main-pattern-round-1",
          "label": "Round 1",
          "value": "Start with a magic loop, ch1 as a standing st. work in this loop, 1sc, 3hdc, 1sc, ch2, 4dc, ch2, 1dc, 2tr, 1dc, sl st to the top of the first sc.",
          "raw_text": "Round 1 Start with a magic loop, ch1 as a standing st. work in this loop, 1sc, 3hdc, 1sc, ch2, 4dc, ch2, 1dc, 2tr, 1dc, sl st to the top of the first sc.",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "instruction",
          "code": "main-pattern-info-4",
          "label": "Steps",
          "value": "start with a magic loop, ch1 as a standing st; then work 1sc, 3hdc, 1sc, ch2, 4dc, ch2, 1dc, 2tr, 1dc, sl st to the top of the first sc.",
          "raw_text": "Step by step: start with a magic loop, ch1 as a standing st; then work 1sc, 3hdc, 1sc, ch2, 4dc, ch2, 1dc, 2tr, 1dc, sl st to the top of the first sc.",
          "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": "main-pattern-info-5",
          "label": "Info",
          "value": "Round 2 — enlarge the cloud with another round.",
          "raw_text": "Round 2 — enlarge the cloud with another round.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "round",
          "code": "main-pattern-round-2",
          "label": "Round 2",
          "value": "sc-inc in each of next 3 hdc, sl st to the next sc, (1sc+1hdc+2dc)in next ch-2 sp, (1hdc+1sc), 2sc, (1sc+1hdc), 4dc in next ch-2 sp, 1sc, hdc-inc in each of next 2 st, 1sc, sl st to the final slst from Round 1.",
          "raw_text": "Round 2 sc-inc in each of next 3 hdc, sl st to the next sc, (1sc+1hdc+2dc)in next ch-2 sp, (1hdc+1sc), 2sc, (1sc+1hdc), 4dc in next ch-2 sp, 1sc, hdc-inc in each of next 2 st, 1sc, sl st to the final slst from Round 1.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "info",
          "code": "main-pattern-info-6",
          "label": "Info",
          "value": "Round 3 — shape the cloud edges. This round is worked in the front loops only, which leaves the back loops free for the shadow cloud in Round 4.",
          "raw_text": "Round 3 — shape the cloud edges. This round is worked in the front loops only, which leaves the back loops free for the shadow cloud in Round 4.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "round",
          "code": "main-pattern-round-3",
          "label": "Round 3",
          "value": "FLO for this round . sl st to the FL of the current slst, sl st in next sc, 4sc, make 2 slst, 2sc, (hdc-inc)×2, 6sc, 1hdc, (1hdc+1dc), dc-inc, (1dc+1hdc), 1sc, slst. (1hdc+1dc), dc-inc, (1hdc+1sc), sl st in the final sc from Round 2, join to the first slst. fasten off.",
          "raw_text": "Round 3 FLO for this round . sl st to the FL of the current slst, sl st in next sc, 4sc, make 2 slst, 2sc, (hdc-inc)×2, 6sc, 1hdc, (1hdc+1dc), dc-inc, (1dc+1hdc), 1sc, slst. (1hdc+1dc), dc-inc, (1hdc+1sc), sl st in the final sc from Round 2, join to the first slst. fasten off.",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "info",
          "code": "main-pattern-info-7",
          "label": "Info",
          "value": "Round 4 — add the bottom layer of cloud. Work only on the left side of the main cloud in Round 2, using back loop only (BLO) for every stitch. This strategic loop selection creates a perfectly hidden effect that allows your shadow cloud to emerge seamlessly, adding dimension without disrupting the main cloud's shape.",
          "raw_text": "Round 4 — add the bottom layer of cloud. Work only on the left side of the main cloud in Round 2, using back loop only (BLO) for every stitch. This strategic loop selection creates a perfectly hidden effect that allows your shadow cloud to emerge seamlessly, adding dimension without disrupting the main cloud's shape.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "round",
          "code": "main-pattern-round-4",
          "label": "Round 4",
          "value": "BLO . Join new yarn to the first sc of the first sc-inc from Round 2. ch2 as a standing st(count as 1hdc), 1hdc in the same st to form a hdc-inc, (dc-inc)×2, (1dc+1hdc), 1sc, make 1 slst, (1hdc+1dc), dc-inc, (1hdc+1sc), sl st to the next st, fasten off.",
          "raw_text": "Round 4 BLO . Join new yarn to the first sc of the first sc-inc from Round 2. ch2 as a standing st(count as 1hdc), 1hdc in the same st to form a hdc-inc, (dc-inc)×2, (1dc+1hdc), 1sc, make 1 slst, (1hdc+1dc), dc-inc, (1hdc+1sc), sl st to the next st, fasten off.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 11,
          "row_type": "instruction",
          "code": "main-pattern-info-8",
          "label": "Steps",
          "value": "BLO — join the new yarn to the first sc of the first sc-inc from Round 2; then ch2 as a standing st (count as 1hdc), 1hdc in the same st to form a hdc-inc, (dc-inc)×2, (1dc+1hdc), 1sc, make 1 slst, (1hdc+1dc), dc-inc, (1hdc+1sc), sl st to the next st, fasten off.",
          "raw_text": "Step by step: BLO — join the new yarn to the first sc of the first sc-inc from Round 2; then ch2 as a standing st (count as 1hdc), 1hdc in the same st to form a hdc-inc, (dc-inc)×2, (1dc+1hdc), 1sc, make 1 slst, (1hdc+1dc), dc-inc, (1hdc+1sc), sl st to the next st, fasten off.",
          "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": "Base Solid Granny Square",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "part-2-info-6",
          "label": "Info",
          "value": "The key to harmonizing but specializing this cloud granny square is the color contrast in the base solid granny square. Combining light and dark sky tones makes your cloud appear to float realistically.",
          "raw_text": "The key to harmonizing but specializing this cloud granny square is the color contrast in the base solid granny square. Combining light and dark sky tones makes your cloud appear to float realistically.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "round",
          "code": "part-2-round-1",
          "label": "Round 1",
          "value": "Start with a magic ring, ch3 as a standing st(count as 1dc), 3dc, ch3. *4dc, ch3* rep 2 times,   4dc, ch1, make 1hdc connects back to the first ch3 .",
          "raw_text": "Round 1 Start with a magic ring, ch3 as a standing st(count as 1dc), 3dc, ch3. *4dc, ch3* rep 2 times,   4dc, ch1, make 1hdc connects back to the first ch3 .",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "round",
          "code": "part-2-round-2",
          "label": "Round 2",
          "value": "Ch3(count as 1dc), 1dc in same corner sp, 4dc, (2dc, ch3) in next corner sp, 2dc in current corner sp,  4dc(Make the last dc an incomplete st, join new color yarn, yo and pull through to complete the st and the color change ). (2dc, ch3, 2dc) in next corner sp, 4dc, (2dc, ch3, 2dc) in next corner sp:  change color when final yo of final dc . 4dc, 2dc in next corner sp,  ch1, 1hdc connects back to the first ch3.",
          "raw_text": "Round 2 Ch3(count as 1dc), 1dc in same corner sp, 4dc, (2dc, ch3) in next corner sp, 2dc in current corner sp,  4dc(Make the last dc an incomplete st, join new color yarn, yo and pull through to complete the st and the color change ). (2dc, ch3, 2dc) in next corner sp, 4dc, (2dc, ch3, 2dc) in next corner sp:  change color when final yo of final dc . 4dc, 2dc in next corner sp,  ch1, 1hdc connects back to the first ch3.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "info",
          "code": "part-2-info-2",
          "label": "Info",
          "value": "Note: The way to change the color of the yarn is the same.",
          "raw_text": "Note: The way to change the color of the yarn is the same.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "round",
          "code": "part-2-round-3",
          "label": "Round 3",
          "value": "ch3 to start(count as a dc), make another dc in the same corner sp, 8dc. *(2dc+ch3+2dc)in next corner sp, 8dc* rep 3 times, 2dc in next corner sp,  ch1, 1hdc connects back to your starting ch3 .",
          "raw_text": "Round 3 ch3 to start(count as a dc), make another dc in the same corner sp, 8dc. *(2dc+ch3+2dc)in next corner sp, 8dc* rep 3 times, 2dc in next corner sp,  ch1, 1hdc connects back to your starting ch3 .",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "info",
          "code": "part-2-info-3",
          "label": "Info",
          "value": "Note: Perform your yarn color change exactly as you did in Round 2—same position, same technique.",
          "raw_text": "Note: Perform your yarn color change exactly as you did in Round 2—same position, same technique.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "round",
          "code": "part-2-round-4",
          "label": "Round 4",
          "value": "ch1 to start, 1sc in the same corner sp, 1sc in each remaining st, 3sc in each remaining corner sp. finish with 2sc in the original corner, sl st to the first sc.",
          "raw_text": "Round 4 ch1 to start, 1sc in the same corner sp, 1sc in each remaining st, 3sc in each remaining corner sp. finish with 2sc in the original corner, sl st to the first sc.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "info",
          "code": "part-2-info-5",
          "label": "Assemble",
          "value": "Sew the cloud piece to the center of the base square, leaving the brims of both cloud layers unsewn so the textured edges remain open and dimensional.",
          "raw_text": "Sew the cloud piece to the center of the base square, leaving the brims of both cloud layers unsewn so the textured edges remain open and dimensional.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 10,
      "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 ch1 at the start is a standing stitch, not a turning chain — it does not count as a stitch and you should not work into it at the end of the round. Slip stitching to the top of that first sc is your closing point, so mark that sc with a contrasting stitch marker the moment you make it",
          "raw_text": "💡 The ch1 at the start is a standing stitch, not a turning chain — it does not count as a stitch and you should not work into it at the end of the round. Slip stitching to the top of that first sc is your closing point, so mark that sc with a contrasting stitch marker the moment you make it",
          "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": "💡 Wind your four colors onto separate bobbins or small butterfly bundles before you start. With a motif this small you are changing colors within a few rounds, and loose skeins tangle fast — bobbins also make it easy to keep tail lengths short so you are not weaving in six inches of yarn on a 2.9-inch square",
          "raw_text": "💡 Wind your four colors onto separate bobbins or small butterfly bundles before you start. With a motif this small you are changing colors within a few rounds, and loose skeins tangle fast — bobbins also make it easy to keep tail lengths short so you are not weaving in six inches of yarn on a 2.9-inch square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "note-3",
          "label": "Note",
          "value": "💡 Block the base square before attaching the cloud, not after. A quick spray block and pin to a 2.9-inch measurement squares up the corners while you still have flat access to the fabric — once the dimensional cloud is sewn on, you cannot press the piece without crushing it",
          "raw_text": "💡 Block the base square before attaching the cloud, not after. A quick spray block and pin to a 2.9-inch measurement squares up the corners while you still have flat access to the fabric — once the dimensional cloud is sewn on, you cannot press the piece without crushing it",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "info",
          "code": "note-4",
          "label": "Note",
          "value": "💡 Use a stitch marker in the free front loops after Round 3 if you tend to lose track. Slip one marker into the first free front loop so you can instantly find your Round 4 starting point, and so you have a visual reference for which strand you are meant to skip",
          "raw_text": "💡 Use a stitch marker in the free front loops after Round 3 if you tend to lose track. Slip one marker into the first free front loop so you can instantly find your Round 4 starting point, and so you have a visual reference for which strand you are meant to skip",
          "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": "💡 Leave a generous 8-10 inch tail when fastening off the cloud piece — that tail becomes your seaming yarn, which means no extra color-matched thread and no additional ends to weave in. Thread it straight onto the darning needle when you are ready to attach",
          "raw_text": "💡 Leave a generous 8-10 inch tail when fastening off the cloud piece — that tail becomes your seaming yarn, which means no extra color-matched thread and no additional ends to weave in. Thread it straight onto the darning needle when you are ready to attach",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "info",
          "code": "note-6",
          "label": "Note",
          "value": "💡 If you are making a batch for a blanket, make all the base squares first in one sitting, then all the clouds. Working in production runs keeps your tension consistent across the set, which matters enormously when the squares are this small and any size drift shows up immediately when you join them",
          "raw_text": "💡 If you are making a batch for a blanket, make all the base squares first in one sitting, then all the clouds. Working in production runs keeps your tension consistent across the set, which matters enormously when the squares are this small and any size drift shows up immediately when you join them",
          "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": "💡 Finished size: the sample measures about 2.9 inches by 2.9 inches worked in DK sport weight on a 3.00mm hook. You can easily enlarge the pattern by adding more rounds of the solid granny square background — the cloud motif itself stays exactly as written",
          "raw_text": "💡 Finished size: the sample measures about 2.9 inches by 2.9 inches worked in DK sport weight on a 3.00mm hook. You can easily enlarge the pattern by adding more rounds of the solid granny square background — the cloud motif itself stays exactly as written",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 11,
      "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 the cloud without the base square?",
          "value": "Absolutely — that is one of the best features of this modular design. Work only the cloud piece and sew it directly onto a finished blanket, pillow, bag, or garment as a dimensional appliqué. Each cloud becomes a portable design element you can place wherever it looks best",
          "raw_text": "Absolutely — that is one of the best features of this modular design. Work only the cloud piece and sew it directly onto a finished blanket, pillow, bag, or garment as a dimensional appliqué. Each cloud becomes a portable design element you can place wherever it looks best",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I make the cloud without the base square?",
          "answer": "Absolutely — that is one of the best features of this modular design. Work only the cloud piece and sew it directly onto a finished blanket, pillow, bag, or garment as a dimensional appliqué. Each cloud becomes a portable design element you can place wherever it looks best",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "What does FLO and BLO mean, and why",
          "value": "FLO means front loop only and BLO means back loop only — you insert your hook under just one strand of the stitch top rather than both. Round 3 uses FLO and Round 4 uses BLO, which leaves the unused loops free to form a second layer. That layering is exactly what creates the leading cloud with its shadow behind it",
          "raw_text": "FLO means front loop only and BLO means back loop only — you insert your hook under just one strand of the stitch top rather than both. Round 3 uses FLO and Round 4 uses BLO, which leaves the unused loops free to form a second layer. That layering is exactly what creates the leading cloud with its shadow behind it",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What does FLO and BLO mean, and why does this pattern use them?",
          "answer": "FLO means front loop only and BLO means back loop only — you insert your hook under just one strand of the stitch top rather than both. Round 3 uses FLO and Round 4 uses BLO, which leaves the unused loops free to form a second layer. That layering is exactly what creates the leading cloud with its shadow behind it",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "Can I use worsted weight yarn instead of DK?",
          "value": "Yes, though your square will finish noticeably larger than 2.9 inches — expect closer to 3.5 to 4 inches with a 4.00mm or 4.5mm hook. Worsted also softens the fine detail in the mixed-height cloud stitches slightly, so if you want crisp definition, stick with DK or sport. Make one test square either way before starting a full project",
          "raw_text": "Yes, though your square will finish noticeably larger than 2.9 inches — expect closer to 3.5 to 4 inches with a 4.00mm or 4.5mm hook. Worsted also softens the fine detail in the mixed-height cloud stitches slightly, so if you want crisp definition, stick with DK or sport. Make one test square either way before starting a full project",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I use worsted weight yarn instead of DK?",
          "answer": "Yes, though your square will finish noticeably larger than 2.9 inches — expect closer to 3.5 to 4 inches with a 4.00mm or 4.5mm hook. Worsted also softens the fine detail in the mixed-height cloud stitches slightly, so if you want crisp definition, stick with DK or sport. Make one test square either way before starting a full project",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "How do I make a bigger square for a blanket?",
          "value": "Keep the cloud motif exactly as written and simply add extra rounds to the base square — the designer notes you can easily enlarge the pattern this way. One additional round brings you to roughly 4 inches and two or three rounds gets you to a standard 6-inch blanket square with generous sky around the cloud. The cloud stays the same size, which actually looks lovely against a larger background",
          "raw_text": "Keep the cloud motif exactly as written and simply add extra rounds to the base square — the designer notes you can easily enlarge the pattern this way. One additional round brings you to roughly 4 inches and two or three rounds gets you to a standard 6-inch blanket square with generous sky around the cloud. The cloud stays the same size, which actually looks lovely against a larger background",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How do I make a bigger square for a blanket?",
          "answer": "Keep the cloud motif exactly as written and simply add extra rounds to the base square — the designer notes you can easily enlarge the pattern this way. One additional round brings you to roughly 4 inches and two or three rounds gets you to a standard 6-inch blanket square with generous sky around the cloud. The cloud stays the same size, which actually looks lovely against a larger background",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "Will the cloud stay dimensional after washing?",
          "value": "It holds up well because the dimension comes from stitch structure rather than stuffing. Hand wash gently in cool water and lay flat to dry without pressing the cloud area — never machine dry, and never iron the cloud itself. If it looks slightly relaxed after drying, gently reshape the layers with your fingers while damp",
          "raw_text": "It holds up well because the dimension comes from stitch structure rather than stuffing. Hand wash gently in cool water and lay flat to dry without pressing the cloud area — never machine dry, and never iron the cloud itself. If it looks slightly relaxed after drying, gently reshape the layers with your fingers while damp",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Will the cloud stay dimensional after washing?",
          "answer": "It holds up well because the dimension comes from stitch structure rather than stuffing. Hand wash gently in cool water and lay flat to dry without pressing the cloud area — never machine dry, and never iron the cloud itself. If it looks slightly relaxed after drying, gently reshape the layers with your fingers while damp",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/cloud-granny-square-crochet-pattern-hero.webp",
    "data/images/cloud-granny-square-crochet-pattern-step-2.webp",
    "data/images/cloud-granny-square-crochet-pattern-step-3.webp",
    "data/images/cloud-granny-square-crochet-pattern-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/cloud-granny-square-crochet-pattern-hero.webp",
      "alt": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud — photo 1",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/cloud-granny-square-crochet-pattern-hero.webp",
      "alt": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/cloud-granny-square-crochet-pattern-step-2.webp",
      "alt": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/cloud-granny-square-crochet-pattern-step-3.webp",
      "alt": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/cloud-granny-square-crochet-pattern-step-4.webp",
      "alt": "Cloud Granny Square — Free Crochet Pattern with a 3D Layered Cloud — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 2
}