{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "fish-granny-square-free-crochet-pattern",
  "title": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif",
  "meta_description": "Crochet this free fish granny square in four colors — a 3.9-inch motif with hdc increases, third-loop joins and easy mid-stitch color changes",
  "published_at": "2026-07-28",
  "updated_at": "2026-07-28",
  "author": "Ruby",
  "thumbnail_url": "data/images/fish-granny-square-free-crochet-pattern-hero.webp",
  "meta": {
    "title": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif",
    "pattern_name": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif",
    "difficulty": "Intermediate",
    "time_needed": "1-2 Hours",
    "rating": 4.8,
    "made_count": "2.4K",
    "taxonomy": {
      "category": "Granny Squares",
      "skill_level": "Intermediate",
      "yarn_weight": "DK",
      "tags": [
        "granny square",
        "fish granny square",
        "free crochet pattern",
        "crochet motif",
        "ocean theme",
        "color changes",
        "hdc increases",
        "third loop only",
        "scrap yarn project",
        "baby blanket square",
        "nursery decor"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Intermediate Level",
          "value": "Comfortable with standing stitches, hdc increases and mid-stitch color changes",
          "raw_text": "Comfortable with standing stitches, hdc increases and mid-stitch color changes",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "hero-info-2",
          "label": "One-Evening Make",
          "value": "About 1–2 hours from the first ch-5 ring to the last woven-in end",
          "raw_text": "About 1–2 hours from the first ch-5 ring to the last woven-in end",
          "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": "Playful Sea Motif",
          "value": "A four-color fish square that turns blankets, cushions and totes into ocean scenes",
          "raw_text": "A four-color fish square that turns blankets, cushions and totes into ocean scenes",
          "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 free pattern turns a humble granny square into a little swimming fish — a rounded body, a cheerful forked tail and a fin edge that changes color mid-stitch, all worked flat in four colors. It begins with a ch-5 ring, grows outward in curved half-motifs, and finishes as a tidy square you can join into blankets, cushion covers or a beach bag. It's perfect for sampler-blanket crocheters, ocean-themed nursery projects, and anyone who wants a motif with real personality instead of another plain circle-in-a-square",
          "raw_text": "This free pattern turns a humble granny square into a little swimming fish — a rounded body, a cheerful forked tail and a fin edge that changes color mid-stitch, all worked flat in four colors. It begins with a ch-5 ring, grows outward in curved half-motifs, and finishes as a tidy square you can join into blankets, cushion covers or a beach bag. It's perfect for sampler-blanket crocheters, ocean-themed nursery projects, and anyone who wants a motif with real personality instead of another plain circle-in-a-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": "about-info-3",
          "label": "",
          "value": "The finished square measures about 3.9 by 3.5 inches worked with a 3.00 mm hook and light DK yarn — small enough that you can make a dozen over a weekend, big enough that the fish reads clearly from across the room. All those half double crochets create a dense, slightly firm fabric that holds its shape beautifully once joined. Stitch nine of them into a baby blanket, frame a single one in an embroidery hoop, or sew one onto a tote bag as a patch pocket for a handmade gift that takes an evening",
          "raw_text": "The finished square measures about 3.9 by 3.5 inches worked with a 3.00 mm hook and light DK yarn — small enough that you can make a dozen over a weekend, big enough that the fish reads clearly from across the room. All those half double crochets create a dense, slightly firm fabric that holds its shape beautifully once joined. Stitch nine of them into a baby blanket, frame a single one in an embroidery hoop, or sew one onto a tote bag as a patch pocket for a handmade gift that takes an evening",
          "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've made a lot of granny squares, and this one had me grinning the whole way through. There's a moment on the body round where you work a dc, start another dc in the same stitch, leave it incomplete, then join the new color and pull through all the loops — and suddenly the fin edge looks blended instead of stepped and blocky. That single trick is worth learning this pattern for, and once you've done it here you'll use it everywhere. I also love how the shape sneaks up on you. The first sections look like nothing much — a fat curved wedge of hdc with a couple of sc at the tip — and then you turn the work, rotate it 180 degrees counterclockwise, join fresh yarn, and the tail appears out of nowhere. The ch-3 spaces along the edge become the little fins, and the third-loop hdc work gives the body a scaly ribbed texture without a single extra stitch. Best of all, it's fast. Two hours, four scraps of yarn, one very smug fish. My scrap basket has never been happier",
          "raw_text": "I've made a lot of granny squares, and this one had me grinning the whole way through. There's a moment on the body round where you work a dc, start another dc in the same stitch, leave it incomplete, then join the new color and pull through all the loops — and suddenly the fin edge looks blended instead of stepped and blocky. That single trick is worth learning this pattern for, and once you've done it here you'll use it everywhere. I also love how the shape sneaks up on you. The first sections look like nothing much — a fat curved wedge of hdc with a couple of sc at the tip — and then you turn the work, rotate it 180 degrees counterclockwise, join fresh yarn, and the tail appears out of nowhere. The ch-3 spaces along the edge become the little fins, and the third-loop hdc work gives the body a scaly ribbed texture without a single extra stitch. Best of all, it's fast. Two hours, four scraps of yarn, one very smug fish. My scrap basket has never been happier",
          "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": "Color is where this square really gets fun. The written version uses four colors — body, contrast fin, tail and white background — but a clownfish palette of orange, white and black on pale aqua is instantly recognizable, and a koi version in cream, persimmon and charcoal on deep indigo looks like a woodblock print. For a nursery, try dusty mint, blush and butter yellow on an off-white ground so the whole blanket stays soft. Scrap-blanket crocheters: keep the background color identical on every square and randomize only the fish. Twenty different fish on the same cream ground reads as a designed collection rather than a leftover pile. Yarn swaps change the scale more than the look. Paintbox Simply DK or Scheepjes Catona at 3.00 mm as written gives you the stated 3.9 x 3.5 inches. Move up to a worsted like Vanna's Choice with a 4.5 mm hook and those same nine rounds grow to roughly 5.5 inches — ideal if you want a nine-square baby blanket without making forty motifs. Going smaller, size 10 thread with a 1.75 mm hook makes a 1.5 inch fish that works as an appliqué on a bag or a hair clip. To enlarge the square without redrawing the fish, add plain frame rounds: work dc all around the finished square with 3 dc in each corner, then repeat for a second round. For seasonal sets, swap the background to icy blue with a silver sparkle yarn for a winter pond square, or work the fish in deep teal on sand for a summer beach collection",
          "raw_text": "Color is where this square really gets fun. The written version uses four colors — body, contrast fin, tail and white background — but a clownfish palette of orange, white and black on pale aqua is instantly recognizable, and a koi version in cream, persimmon and charcoal on deep indigo looks like a woodblock print. For a nursery, try dusty mint, blush and butter yellow on an off-white ground so the whole blanket stays soft. Scrap-blanket crocheters: keep the background color identical on every square and randomize only the fish. Twenty different fish on the same cream ground reads as a designed collection rather than a leftover pile. Yarn swaps change the scale more than the look. Paintbox Simply DK or Scheepjes Catona at 3.00 mm as written gives you the stated 3.9 x 3.5 inches. Move up to a worsted like Vanna's Choice with a 4.5 mm hook and those same nine rounds grow to roughly 5.5 inches — ideal if you want a nine-square baby blanket without making forty motifs. Going smaller, size 10 thread with a 1.75 mm hook makes a 1.5 inch fish that works as an appliqué on a bag or a hair clip. To enlarge the square without redrawing the fish, add plain frame rounds: work dc all around the finished square with 3 dc in each corner, then repeat for a second round. For seasonal sets, swap the background to icy blue with a silver sparkle yarn for a winter pond square, or work the fish in deep teal on sand for a summer beach collection",
          "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": "Treating the ch-3 and ch-2 as ordinary turning chains and then adding an extra first stitch on top of them",
          "value": "In this pattern the ch-3 is a standing dc and the ch-2 is a standing hdc — they ARE the first stitch of the section, not a lead-in. After making the ch-3, your very next instruction is '1dc in this loop', which is the second stitch, not the first. If you add a stitch into the base of the chain as well, every curved section comes out one stitch too long and the fish body flares instead of curving",
          "raw_text": "In this pattern the ch-3 is a standing dc and the ch-2 is a standing hdc — they ARE the first stitch of the section, not a lead-in. After making the ch-3, your very next instruction is '1dc in this loop', which is the second stitch, not the first. If you add a stitch into the base of the chain as well, every curved section comes out one stitch too long and the fish body flares instead of curving",
          "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 first sections into individual chain stitches instead of into the ch-5 ring itself",
          "value": "'1dc in this loop' and everything that follows in that section — the 6 hdc, 2 sc, 6 hdc — are all worked into the center of the ch-5 loop, not into the five separate chains. Poke your hook straight through the middle of the ring every time and let the stitches crowd together; the ring is what gives the fish body its tight curved fan shape",
          "raw_text": "'1dc in this loop' and everything that follows in that section — the 6 hdc, 2 sc, 6 hdc — are all worked into the center of the ch-5 loop, not into the five separate chains. Poke your hook straight through the middle of the ring every time and let the stitches crowd together; the ring is what gives the fish body its tight curved fan 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": "Finishing the dc completely before joining the new color, so the color change lands one stitch too late",
          "value": "The pattern says to make an incomplete dc, join the new yarn, then yarn over and pull through all loops. That final yarn-over is what forms the top of the stitch, so whichever color you use for it becomes the color of the NEXT stitch. Always drop the old color and pull the new one through on the last yarn over — the same rule applies to the ch-3 where you complete the third chain with white",
          "raw_text": "The pattern says to make an incomplete dc, join the new yarn, then yarn over and pull through all loops. That final yarn-over is what forms the top of the stitch, so whichever color you use for it becomes the color of the NEXT stitch. Always drop the old color and pull the new one through on the last yarn over — the same rule applies to the ch-3 where you complete the third chain with white",
          "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": "Reading '2 hdc-inc' as one increase containing two stitches instead of two separate increases",
          "value": "'2 hdc-inc' means work an hdc increase, then work another hdc increase — four stitches total across two base stitches. Miscounting here is the single most common reason a finished square measures short on one side. Count your stitches at the end of each shaping section and compare the two halves against each other before you fasten off; they should mirror exactly",
          "raw_text": "'2 hdc-inc' means work an hdc increase, then work another hdc increase — four stitches total across two base stitches. Miscounting here is the single most common reason a finished square measures short on one side. Count your stitches at the end of each shaping section and compare the two halves against each other before you fasten off; they should mirror exactly",
          "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": "Ignoring the TLO instruction and working into both loops as usual",
          "value": "TLO means third loop only — the horizontal bar sitting behind the back loop of each hdc. Tip the work toward you and you'll see it clearly. Working into both loops instead removes the ridged, scaly texture along the body and pulls that edge tighter than the pattern intends, which is what makes the finished motif lean out of square. If you can't spot the third loop, run a strand of contrast yarn along the bar to train your eye on the first few stitches",
          "raw_text": "TLO means third loop only — the horizontal bar sitting behind the back loop of each hdc. Tip the work toward you and you'll see it clearly. Working into both loops instead removes the ridged, scaly texture along the body and pulls that edge tighter than the pattern intends, which is what makes the finished motif lean out of square. If you can't spot the third loop, run a strand of contrast yarn along the bar to train your eye on the first few 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": "Rejoining new yarn in the wrong place, or rotating the piece the wrong direction before the tail section",
          "value": "Every rejoin in this pattern starts at the top of the first ch-3 of the previous section — mark it with a stitch marker before you fasten off, because the standing chain becomes almost invisible once the fabric relaxes. Then, when you reach the rotation, turn the work over (TLO) and rotate a full 180 degrees counterclockwise so the previous section's edge sits at the top. Rotating clockwise puts the tail on the wrong side and the square won't close square",
          "raw_text": "Every rejoin in this pattern starts at the top of the first ch-3 of the previous section — mark it with a stitch marker before you fasten off, because the standing chain becomes almost invisible once the fabric relaxes. Then, when you reach the rotation, turn the work over (TLO) and rotate a full 180 degrees counterclockwise so the previous section's edge sits at the top. Rotating clockwise puts the tail on the wrong side and the square won't close square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 6,
      "card_type": "materials",
      "code": "materials",
      "title": "Materials",
      "raw_heading": "",
      "quantity": 1,
      "groups": [
        {
          "order": 1,
          "group_code": "group-1",
          "group_name": "",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-1-1",
              "label": "",
              "value": "Yarn of your choice- 4 colors",
              "raw_text": "Yarn of your choice- 4 colors"
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "Crochet hook- 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-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": 2,
          "row_type": "abbrev",
          "code": "abbrev-tlo",
          "label": "TLO",
          "value": "third loop only",
          "raw_text": "TLO = third loop only",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "TLO",
          "meaning": "third loop only"
        },
        {
          "order": 3,
          "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": 4,
          "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": 5,
          "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": 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-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": 8,
          "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": 9,
          "row_type": "abbrev",
          "code": "abbrev-rep",
          "label": "rep",
          "value": "repeat",
          "raw_text": "rep = repeat",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "rep",
          "meaning": "repeat"
        },
        {
          "order": 10,
          "row_type": "abbrev",
          "code": "abbrev-st",
          "label": "st",
          "value": "stitch",
          "raw_text": "st = stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "st",
          "meaning": "stitch"
        },
        {
          "order": 11,
          "row_type": "abbrev",
          "code": "abbrev-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": 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-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": 14,
          "row_type": "abbrev",
          "code": "abbrev-pic",
          "label": "pic",
          "value": "picot stitch",
          "raw_text": "pic = picot stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "pic",
          "meaning": "picot stitch"
        },
        {
          "order": 15,
          "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": 16,
          "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": 8,
      "card_type": "part",
      "code": "main-pattern",
      "title": "Main Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "round",
          "code": "main-pattern-round-1",
          "label": "Round 1",
          "value": "The Fish Knot on your hook, ch5, sl st to the first ch to form a loop.",
          "raw_text": "Round 1 – The Fish Knot on your hook, ch5, sl st to the first ch to form a loop.",
          "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": "ch3 as a standing st(count as 1dc), 1dc in this loop, 6hdc, 2sc, 6hdc, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 2 ch3 as a standing st(count as 1dc), 1dc in this loop, 6hdc, 2sc, 6hdc, sl st to the top of the first ch3, fasten off.",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "round",
          "code": "main-pattern-round-3",
          "label": "Round 3",
          "value": "Add new yarn to the top of the first ch3, ch2 as a standing st(count as 1hdc). 1dc in the same st, ch1, (1dc+1hdc) in next st, 2 hdc-inc, 1hdc, 1 hdc-inc,  make a dc in next st ,  make another incomplete dc in the same st, join a new color yarn, yo and pull through all loops to finish a dc-inc .",
          "raw_text": "Round 3 Add new yarn to the top of the first ch3, ch2 as a standing st(count as 1hdc). 1dc in the same st, ch1, (1dc+1hdc) in next st, 2 hdc-inc, 1hdc, 1 hdc-inc,  make a dc in next st ,  make another incomplete dc in the same st, join a new color yarn, yo and pull through all loops to finish a dc-inc .",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "instruction",
          "code": "main-pattern-info-1",
          "label": "Steps",
          "value": "ch3, sl st to the next st, 1sc in each following 2 st, sl st to the next st, ch3( for the 3rd ch, yo with white yarn, pull through to complete this chain and the color change) , 1 dc-inc in next st, 1 hdc-inc, 1hdc, 2 hdc-inc, sl st to the top of the first ch2, fasten off.",
          "raw_text": "ch3, sl st to the next st, 1sc in each following 2 st, sl st to the next st, ch3( for the 3rd ch, yo with white yarn, pull through to complete this chain and the color change) , 1 dc-inc in next st, 1 hdc-inc, 1hdc, 2 hdc-inc, sl st to the top of the first ch2, fasten off.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "round",
          "code": "main-pattern-round-4",
          "label": "Round 4",
          "value": "TLO. Rotate it 180 degrees counterclockwise . Join the new yarn to the TL of the first ch from the previous round's first ch-3. make (1dc+1dc+1tr) in the next sc from Round 3, ch1, (1tr+1dc+1dc) in next sc, sl st to the TL of the 3rd ch from previous round's second ch-3.",
          "raw_text": "Round 4 TLO. Rotate it 180 degrees counterclockwise . Join the new yarn to the TL of the first ch from the previous round's first ch-3. make (1dc+1dc+1tr) in the next sc from Round 3, ch1, (1tr+1dc+1dc) in next sc, sl st to the TL of the 3rd ch from previous round's second ch-3.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "round",
          "code": "main-pattern-round-5",
          "label": "Round 5",
          "value": "Rotate it 90 degrees clockwise.   Pull  the yarn we leave  through  the gap on the left of the upper ch-3 group. ch1 as a standing st. 1sc in this gap, 1sc in each following 11 gaps, make a ch-1 pic, 1sc in each following 15 gaps, make a ch-1 pic, 1sc in each following 3 gaps, sl st to the first sc, fasten off.",
          "raw_text": "Round 5 Rotate it 90 degrees clockwise.   Pull  the yarn we leave  through  the gap on the left of the upper ch-3 group. ch1 as a standing st. 1sc in this gap, 1sc in each following 11 gaps, make a ch-1 pic, 1sc in each following 15 gaps, make a ch-1 pic, 1sc in each following 3 gaps, sl st to the first sc, fasten off.",
          "round_start": 5,
          "round_end": 5,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "round",
          "code": "main-pattern-round-6",
          "label": "Round 6",
          "value": "The Square TLO for this Round.  Join new yarn to the tl of the sc that lies in the gap on the right of the ch3. ch2 as a standing st(count as 1hdc), 1hdc in the same st, ch2, 1 hdc-inc in next sc, ch5 and sk following 5sc, 1 hdc-inc, ch2, 1 hdc-inc, 6sc, 1 hdc-inc, ch2, 1 hdc-inc, ch5 and sk following 5sc, 1 hdc-inc, ch2, 1 hdc-inc, 6sc, sl st to the top of the first ch2.",
          "raw_text": "Round 6 – The Square TLO for this Round.  Join new yarn to the tl of the sc that lies in the gap on the right of the ch3. ch2 as a standing st(count as 1hdc), 1hdc in the same st, ch2, 1 hdc-inc in next sc, ch5 and sk following 5sc, 1 hdc-inc, ch2, 1 hdc-inc, 6sc, 1 hdc-inc, ch2, 1 hdc-inc, ch5 and sk following 5sc, 1 hdc-inc, ch2, 1 hdc-inc, 6sc, sl st to the top of the first ch2.",
          "round_start": 6,
          "round_end": 6,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "round",
          "code": "main-pattern-round-7",
          "label": "Round 7",
          "value": "ch2 to start(count as 1hdc), 1hdc in each remaining st, however, we need make (1hdc+ch2+1hdc) in each corner sp, and make 6hdc in each ch-5 sp, sl st to the top of the first ch2.",
          "raw_text": "Round 7 ch2 to start(count as 1hdc), 1hdc in each remaining st, however, we need make (1hdc+ch2+1hdc) in each corner sp, and make 6hdc in each ch-5 sp, sl st to the top of the first ch2.",
          "round_start": 7,
          "round_end": 7,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "round",
          "code": "main-pattern-round-8",
          "label": "Round 8",
          "value": "ch2 to start(count as 1hdc), 1hdc in each remaining st, while (1hdc+ch2+1hdc) in each corner sp, sl st to the top of the first ch2, fasten off.",
          "raw_text": "Round 8 ch2 to start(count as 1hdc), 1hdc in each remaining st, while (1hdc+ch2+1hdc) in each corner sp, sl st to the top of the first ch2, fasten off.",
          "round_start": 8,
          "round_end": 8,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "round",
          "code": "main-pattern-round-9",
          "label": "Round 9",
          "value": "Join new yarn to any corner sp, ch3 as a standing st(count as 1dc), make another 2dc in the same corner sp, 1dc in each remaining st, while 3dc in each corner sp, sl st to the top of the first ch3, fasten off.",
          "raw_text": "Round 9 Join new yarn to any corner sp, ch3 as a standing st(count as 1dc), make another 2dc in the same corner sp, 1dc in each remaining st, while 3dc in each corner sp, sl st to the top of the first ch3, fasten off.",
          "round_start": 9,
          "round_end": 9,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 11,
          "row_type": "info",
          "code": "main-pattern-info-2",
          "label": "Info",
          "value": "Round 10 – The Fins, Tail and Eye Sew some fins and a tail in the correct position. Make a French Knot at your desired size as an eye.",
          "raw_text": "Round 10 – The Fins, Tail and Eye Sew some fins and a tail in the correct position. Make a French Knot at your desired size as an eye.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 9,
      "card_type": "important_notes",
      "code": "important-notes",
      "title": "Important Notes",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "note-1",
          "label": "Note",
          "value": "💡 The stated 3.9 x 3.5 inch finished size assumes a 3.00 mm hook with a light DK or sport-weight yarn. Make one test square before you commit to a whole blanket — if yours comes out noticeably larger, drop to a 2.75 mm hook; if it's stiff and cupping, go up to 3.25 mm rather than loosening your tension, which will make the hdc rows uneven",
          "raw_text": "💡 The stated 3.9 x 3.5 inch finished size assumes a 3.00 mm hook with a light DK or sport-weight yarn. Make one test square before you commit to a whole blanket — if yours comes out noticeably larger, drop to a 2.75 mm hook; if it's stiff and cupping, go up to 3.25 mm rather than loosening your tension, which will make the hdc rows uneven",
          "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": "💡 This pattern uses four colors and fastens off repeatedly, so wind small bobbins or butterfly bundles of the fin and tail colors before you start. You only need a few yards of each, and having them pre-wound stops you dragging a whole skein through a mid-stitch color change and tangling the working yarn behind the fish body",
          "raw_text": "💡 This pattern uses four colors and fastens off repeatedly, so wind small bobbins or butterfly bundles of the fin and tail colors before you start. You only need a few yards of each, and having them pre-wound stops you dragging a whole skein through a mid-stitch color change and tangling the working yarn behind the fish body",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "note-3",
          "label": "Note",
          "value": "💡 Place a locking stitch marker in the top of every first ch-3 and ch-2 the moment you make it. Those standing stitches are your rejoin points for the next section, and once the piece is off the hook they blend into the fabric completely — hunting for them afterward is how squares end up joined one stitch off",
          "raw_text": "💡 Place a locking stitch marker in the top of every first ch-3 and ch-2 the moment you make it. Those standing stitches are your rejoin points for the next section, and once the piece is off the hook they blend into the fabric completely — hunting for them afterward is how squares end up joined one stitch off",
          "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": "💡 Weave in ends as you finish each section, not at the end. With this many fasten-offs you'll have a dozen tails, and the dense hdc fabric makes them easy to bury invisibly along a same-color row while the section is still flat and accessible. Leave 5-6 inch tails so you have something to work with",
          "raw_text": "💡 Weave in ends as you finish each section, not at the end. With this many fasten-offs you'll have a dozen tails, and the dense hdc fabric makes them easy to bury invisibly along a same-color row while the section is still flat and accessible. Leave 5-6 inch tails so you have something to work with",
          "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": "💡 The ch-3 spaces along the edges are the fish's fins and should stay open and slightly loose — resist the urge to tighten them. If your chains are pulling in, work them over the shaft of a larger hook or chain with the hook held slightly further from the fabric",
          "raw_text": "💡 The ch-3 spaces along the edges are the fish's fins and should stay open and slightly loose — resist the urge to tighten them. If your chains are pulling in, work them over the shaft of a larger hook or chain with the hook held slightly further from the fabric",
          "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 each square before joining. Pin it to 3.9 x 3.5 inches, spritz with water, and let it dry fully — the mix of dc, hdc, sc and slip stitches means the raw square will look slightly lopsided straight off the hook, and blocking is what squares up those edges so a whole blanket lines up cleanly",
          "raw_text": "💡 Block each square before joining. Pin it to 3.9 x 3.5 inches, spritz with water, and let it dry fully — the mix of dc, hdc, sc and slip stitches means the raw square will look slightly lopsided straight off the hook, and blocking is what squares up those edges so a whole blanket lines up cleanly",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 10,
      "card_type": "faq",
      "code": "faq",
      "title": "FAQ",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "faq",
          "code": "faq-1",
          "label": "What does TLO mean in this pattern?",
          "value": "TLO stands for third loop only — the extra horizontal bar that sits behind the back loop of every half double crochet. Tilt the top of your work toward you and you'll see a row of small bars running just below the usual two loops. Working into that bar gives the fish body its ribbed, scaly texture and leaves the front loops free as a decorative line",
          "raw_text": "TLO stands for third loop only — the extra horizontal bar that sits behind the back loop of every half double crochet. Tilt the top of your work toward you and you'll see a row of small bars running just below the usual two loops. Working into that bar gives the fish body its ribbed, scaly texture and leaves the front loops free as a decorative line",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What does TLO mean in this pattern?",
          "answer": "TLO stands for third loop only — the extra horizontal bar that sits behind the back loop of every half double crochet. Tilt the top of your work toward you and you'll see a row of small bars running just below the usual two loops. Working into that bar gives the fish body its ribbed, scaly texture and leaves the front loops free as a decorative line",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "How do I change color in the middle of a stitch without a visible jog?",
          "value": "Work the stitch normally until only the final yarn over remains, then drop the old color, pick up the new one, and complete the stitch with it. In this pattern that happens twice — on the incomplete dc that becomes a dc-increase, and on the third chain of a ch-3 where you complete with white. The stitch top takes the new color, so the transition looks seamless rather than stepped",
          "raw_text": "Work the stitch normally until only the final yarn over remains, then drop the old color, pick up the new one, and complete the stitch with it. In this pattern that happens twice — on the incomplete dc that becomes a dc-increase, and on the third chain of a ch-3 where you complete with white. The stitch top takes the new color, so the transition looks seamless rather than stepped",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How do I change color in the middle of a stitch without a visible jog?",
          "answer": "Work the stitch normally until only the final yarn over remains, then drop the old color, pick up the new one, and complete the stitch with it. In this pattern that happens twice — on the incomplete dc that becomes a dc-increase, and on the third chain of a ch-3 where you complete with white. The stitch top takes the new color, so the transition looks seamless rather than stepped",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "Can I make this square with worsted-weight yarn instead?",
          "value": "Absolutely — just move up to a 4.5 mm hook and work the same nine rounds. Your finished square will land around 5.5 inches instead of 3.9, which is great news if you want a nine-square baby blanket without making forty motifs. Keep every square in the same weight and hook so they join evenly",
          "raw_text": "Absolutely — just move up to a 4.5 mm hook and work the same nine rounds. Your finished square will land around 5.5 inches instead of 3.9, which is great news if you want a nine-square baby blanket without making forty motifs. Keep every square in the same weight and hook so they join evenly",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I make this square with worsted-weight yarn instead?",
          "answer": "Absolutely — just move up to a 4.5 mm hook and work the same nine rounds. Your finished square will land around 5.5 inches instead of 3.9, which is great news if you want a nine-square baby blanket without making forty motifs. Keep every square in the same weight and hook so they join evenly",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "How many fish squares do I need for a baby blanket?",
          "value": "the stated 3.9 x 3.5 inches, a 30 x 35 inch baby blanket takes roughly 64 squares in an 8 x 8 layout plus a border. If that sounds like a lot, work the pattern in worsted at 5.5 inches and you'll only need about 30 squares, or mix fish squares with plain solid granny squares in the background color for a checkerboard effect",
          "raw_text": "the stated 3.9 x 3.5 inches, a 30 x 35 inch baby blanket takes roughly 64 squares in an 8 x 8 layout plus a border. If that sounds like a lot, work the pattern in worsted at 5.5 inches and you'll only need about 30 squares, or mix fish squares with plain solid granny squares in the background color for a checkerboard effect",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many fish squares do I need for a baby blanket?",
          "answer": "the stated 3.9 x 3.5 inches, a 30 x 35 inch baby blanket takes roughly 64 squares in an 8 x 8 layout plus a border. If that sounds like a lot, work the pattern in worsted at 5.5 inches and you'll only need about 30 squares, or mix fish squares with plain solid granny squares in the background color for a checkerboard effect",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "My finished square isn't quite square — what went wrong?",
          "value": "Nine times out of ten it's a miscounted increase section, especially the '2 hdc-inc' groups that need two separate increases rather than one. Count the stitches on each shaped edge and compare the mirrored halves before you fasten off. Mild unevenness is normal off the hook and usually disappears once you wet-block the square to 3.9 x 3.5 inches",
          "raw_text": "Nine times out of ten it's a miscounted increase section, especially the '2 hdc-inc' groups that need two separate increases rather than one. Count the stitches on each shaped edge and compare the mirrored halves before you fasten off. Mild unevenness is normal off the hook and usually disappears once you wet-block the square to 3.9 x 3.5 inches",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "My finished square isn't quite square — what went wrong?",
          "answer": "Nine times out of ten it's a miscounted increase section, especially the '2 hdc-inc' groups that need two separate increases rather than one. Count the stitches on each shaped edge and compare the mirrored halves before you fasten off. Mild unevenness is normal off the hook and usually disappears once you wet-block the square to 3.9 x 3.5 inches",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/fish-granny-square-free-crochet-pattern-hero.webp",
    "data/images/fish-granny-square-free-crochet-pattern-step-2.webp",
    "data/images/fish-granny-square-free-crochet-pattern-step-3.webp",
    "data/images/fish-granny-square-free-crochet-pattern-step-4.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/fish-granny-square-free-crochet-pattern-hero.webp",
      "alt": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif — photo 1",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/fish-granny-square-free-crochet-pattern-hero.webp",
      "alt": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif — photo 1",
      "is_featured": true
    },
    {
      "url": "data/images/fish-granny-square-free-crochet-pattern-step-2.webp",
      "alt": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif — photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/fish-granny-square-free-crochet-pattern-step-3.webp",
      "alt": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif — photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/fish-granny-square-free-crochet-pattern-step-4.webp",
      "alt": "Fish Granny Square — Free Crochet Pattern for a Colorful Fish Motif — photo 4",
      "is_featured": false
    }
  ],
  "_sanitized_holiday_count": 1
}