This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸

What I Built

I started my crochet business only recently. Within a few weeks of meeting other crochet artists, I noticed we were all losing sleep over the same three problems.

  1. “Same thing, but in different colours.” A customer sends a reference photo and wants it in other colours. Often they aren’t sure which shade they mean. “Green” could be light green, sage or even olive. We agree in words, and the finished piece arrives weeks later. Sometimes it isn’t what they pictured. Nobody did anything wrong; we just never looked at the same picture.

  2. Pricing something that doesn’t exist yet. To price a piece I need to know how many grams of yarn it will use and how many hours it will take. I only know that after it’s made, but the customer wants a number today. So we guess, and most of us guess low.

  3. Keeping track. Which orders have I agreed to? Which one is due in two days? If I accept one more, does another go late? Spread across chat threads, that is a lot to hold in your head.

So I built KARSAZ Stitch Desk, a small web app that handles all three. The seller goes through five steps:

  • Upload the customer’s reference photo and paste their message.
  • Say whether they want a colour change.
  • Pick the parts of the photo to recolour (petals, leaves, body, trim) and choose the colours, so the customer sees their order before any yarn is cut.
  • Enter the size or age, quantity, deadline and any extra changes.
  • Get a price, a ready date, a before-and-after picture, a reply message to send, and a quote card the customer can keep.

Every quote can be logged as an order. The Orders tab shows what is agreed, what is overdue and what is at risk of being late, and each seller sets their own yarn cost, hourly rate and markup in the Prices tab.

KARSAZ Stich Desk

Demo

Watch the video:

Try it yourself:

karsaz.tech

Upload a photo of a crochet item on the New order tab. To see the Orders and Prices tabs, create a test account on the Account tab.

An honest note: the live site runs on a small server, and Gemma photo reading and Smart selection need more memory than it has. I run those on my own computer in the video. On the live site you choose the item by hand and colour parts with automatic colouring or hand-drawn shapes.

One order, start to finish

Here’s a real order going through the app. A customer sends a photo of a star baby cocoon and asks for it for a 1-year-old by 18 October. These screenshots were taken on my own computer, where Gemma and Smart selection run.

Step 1: Photo in

A custom order starts the way it does in real life: a reference photo and a message. The seller uploads the photo and pastes in whatever the customer wrote, such as “Want this for a 1 year old in mint green”. The message is optional, because many customers just send a picture.

Upload the customer’s photo, paste their message, and press Continue.
On my own computer, Gemma reads the photo and the message to work out which item it is and what the customer asked for. It only identifies. It never produces a price or a date.

Step 2: Do they want a colour change?

This step is a single question: does the customer want the item in different colours, or exactly as in the photo? If not, the app skips the colour work and goes straight to the details. If yes, it opens the colour screen. It is quick on purpose, because many orders are “exactly this one, please”.

The colour question.

Step 3: Choose the colours

This is the step that solves “that’s not the green I meant”. The customer sees their order in the new colours before any yarn is cut. The seller can colour everything at once or one part at a time.

Option A:

One tap with a palette. The app suggests palettes made for this kind of item. For a baby cocoon: soft pastel, sunny morning, lavender dream and more. One tap colours every part.

Palettes made for the kind of item.

Option B:

Part by part. Clicking a part of the photo, here the hood, selects it. The highlighted area is what will change. Then the seller taps a colour.

Click a part, then pick a colour.

If “green” isn’t specific enough, “Any other colour” opens a picker with an exact hex code.

Pick the exact shade instead of arguing about words
The new colour keeps the photo’s own light and shadow, so it still looks like crocheted yarn rather than a flat paint fill.

One part done
The customer can see this before any yarn is cut. I picked deliberately loud colours to show that each part is handled separately.

Five parts coloured

When the selection isn’t perfect. The “Fine-tune” panel lets the seller add area, remove area or draw a shape by hand. The quick-fix buttons (“Colour spilling outside”, “Old colour left at the edge”) adjust the last part. Fixing a rough edge takes a click, not a restart.

The Fine-tune panel

Step 4: Size, deadline and details

Now the practical details. The seller confirms the item, then enters the size or age, the quantity, the customer’s deadline and any extra changes, such as “add ears”. Extra changes add a small amount to the hours, and the app uses all of this to calculate the quote. This is the only typing the seller has to do.

Size or age, quantity, deadline and extra changes.

Step 5: Price, ready date and reply

One button, “Create quote and reply”, and everything comes together on one screen: before and after side by side, the price, the grams and hours, and an estimate of yarn per colour.

The result screen
The part I’m proudest of is the deadline check. The customer wanted this by 18 October. The app tells the seller that the earliest realistic date is 26 October, and explains why: about 7 days of crocheting at 3 hours a day, with only 1 day left. It then drafts a reply with the size in cm, the price and an honest date. The seller can copy it and edit it.

The deadline warning and the reply draft
From here the seller presses “Log this order” or “Make quote card”. The quote card turns the quote into a single image with the shop logo, the customer’s name, before and after side by side, the price and the ready date. It’s easy to send in a chat, and it replaces a long message of numbers.

The quote card the customer can keep

After the five steps: keeping track

Orders: Logged quotes go into the Orders tab. The seller moves each one from Quoted to Pending to In progress to Done, and only Pending and In progress count toward the workload check.

The Orders tab

Prices: Every quote comes from numbers the seller sets: yarn cost, hourly rate, markup, rounding and hours per day. Change them once and every future quote follows. My numbers are defaults. Each seller uses their own.

The Prices tab

Account: Guests can make quotes and previews. An account keeps orders and prices in a private space.

Sign in to save your orders and prices.

Code

KARSAZ Stitch Desk

An order assistant for a crochet business. Upload a customer's reference photo and message, pick the colours on the photo, and get a price, a ready date, a before/after preview, a reply draft and a quote card you can send.

What it does

  1. Photo and message – upload the customer's photo and paste what they wrote.
  2. Colour change? – say whether the customer wants different colours.
  3. Pick the colours – click each part of the photo and choose its colour (palettes, swatches or a colour picker).
  4. Size, deadline, details – age or size, quantity, due date, extra changes.
  5. Quote – price, ready date, before/after picture, a reply you can copy, and a downloadable quote card.

Other tabs:

  • Orders – search and filter your orders, change status (Quoted, Pending, In progress, Done, Cancelled), see counts and the month's booked value. Overdue and at-risk orders are flagged.
  • Prices –…

A quick map of the project:
  • app.py is the web app, with the five steps and the Orders, Prices and Account tabs.
  • quote.py holds the pricing and ready-date formulas.
  • pipeline.py turns a request into a quote and a reply message.
  • extract.py reads the photo and message with Gemma.
  • recolor_v5.py does the part-by-part recolouring.
  • orders.py and accounts.py handle the order log, deadline checks and sign-in.

How I Built It

Open models do the seeing and the reading. The hardest part of a custom order is turning a reference photo and a vague message into something clear. Three open models do that work:

  • Gemma 3 (4B), running locally through Ollama, looks at the photo and reads the customer’s message to work out which item it is and what they asked for.
  • ISNet cuts the item out of its background, so the app can find its parts.
  • Segment Anything lets the seller click a part of the photo and get its exact outline.

I gave the models the jobs they are good at, seeing and reading. Prices, weights and dates come from plain Python, so a small model on a laptop is enough, and its mistakes can never reach a customer’s quote.

Job Open piece
Reading the photo and the customer’s message Gemma 3 (4B) through Ollama, running locally
Cutting the item out of its background ISNet (isnet-general-use) through rembg
Click-to-select on a part of the photo Segment Anything through rembg (optional, local)
Recolouring OpenCV, NumPy and Pillow
The app Gradio
The order log An ordinary Excel file written with openpyxl
Hosting Render, with a persistent disk

Three design decisions are worth explaining.

  • Colours come only from the customer’s words. The model’s guess at colours is thrown away. A small parser reads the message (“red flower and green leaves”) and ties each colour to the part it names. If the customer wrote no colours, there are none. Nothing is guessed, so the preview can’t drift from what the customer asked for.

  • A quote is a formula, not a guess. Each catalogue item has yarn grams, hours and a number of colours. The quote scales them by size, adds a small increase for every extra change the customer asks for, and then applies the seller’s own rates. Here is the default tulip:

Part Working Result
Yarn 80 g × Rs 225 per 100 g Rs 180
Labour 5 hours × Rs 50 Rs 250
Extra colour 1 extra × Rs 20 Rs 20
Cost Rs 450
Price Rs 450 × 1.4 markup, rounded to the nearest Rs 50 Rs 650
Ready date 5 hours ÷ 3 hours a day, rounded up, plus 2 spare days about 4 days

For wearables, the age in months scales the yarn and hours along a size chart, and the reply shows the matching height and chest in centimetres.

  • The deadline check counts work you have already agreed. The ready date isn’t today plus hours. It starts after your agreed orders. When a new order would push another one past its date, the app says so in plain words, and the Orders tab flags overdue and at-risk jobs. It works through jobs earliest deadline first, which is how a human would plan the week.

Recolouring that still looks like yarn. A flat colour fill looks like paint. The “natural lighting finish” keeps the photo’s own light and shadow on the new colour, so the preview looks like real yarn. Parts can be found three ways: automatically by grouping the item’s pixels by colour, by clicking with Smart selection, or by drawing the corners of a shape by hand. A hand-drawn edge follows the drawn line exactly.

What went wrong.

The first version only worked on my laptop, with one set of orders. Making it multi-user meant giving each account its own folder for orders and prices, with passwords hashed using PBKDF2.
My first deploy ran out of memory on the smallest paid server. The cause wasn’t the model I expected: even with Smart selection off, cutting the item out of its background loads a second model. I turned Smart selection off by default on the website and gave the server more memory.

What’s next: a password reset, remembering the sign-in after a page refresh, and a repeat-order shortcut for returning customers.

Why Does Open Innovation Matter?

  • Privacy: A customer’s reference photo and message are personal. Run locally, they never leave the seller’s computer. (The hosted demo does upload photos to its server; the local version is the private one.)
  • Cost: Margins on handmade work are thin. There are no per-photo fees for background removal or for reading a message. A small model on a laptop costs electricity.
  • Swappable: The model is one line, MODEL = "gemma3:4b" in extract.py. A seller with a stronger machine can try a bigger one.
  • Fixable: When the app picks a wrong part of a photo, I can read the code and fix it.

My First User

I wanted someone who actually sells crochet to try it. A friend of mine runs her own crochet business and asked to stay anonymous. She became the first person outside my laptop to use Karsaz Stitch Desk.

She had a real customer who wanted a white tulip in a different colour. Normally that means guessing, crocheting, or hours of scrolling on Pinterest, and hoping the customer likes it. Instead she uploaded the photo and tried pink, light blue and purple. Eventually she landed on lilac with green leaves.

The quote card from that order: lilac and sage, Rs 650, ready by about 24 October

Then she wanted to see how far it could actually go. So she uploaded a child frok to see how it goes. This is the result.

child frok

Then to take it up a notch she uploaded a bunny and recoloured the ears, arms and legs separately.

Stress test: every part recoloured on its own.

I asked what she'd pay. Nothing yet, because this was a trial. But she said she'd consider a monthly subscription if it costs less than Adobe-type tools, mainly to keep her crochet work in one place.

She also found a weakness. With very blurry or very dark photos, the Segment Anything selection picks objects poorly. It finds roughly the right thing, but not cleanly. The next step is a warning when a photo is too blurry or dark.

It's one seller and one trial, so I'm not calling it proof. But for a tool I built for my own business, it was a good first real test.

Prize Categories

  • Best Use of Gemma: Gemma 3 (4B) runs through Ollama on the seller’s own computer, reading the customer’s reference photo and message locally.

  • Best Use of Render: Render hosts the live app at karsaz.tech and deploys it automatically from GitHub. A persistent disk keeps each seller’s accounts, orders and prices safe, and Render runs the ISNet background-cutting step. Gemma and Smart selection run on my own computer.

  • Best Use of a .tech Domain: Karsaz_Stitch_Desk is live at https://karsaz.tech, so anyone can open it and try it without installing anything. The .tech domain gives the project a short, memorable address that fits what it is: a tool built for sellers, with the app served from Render under that name.

  • Best Use of ElevenLabs: The narration for the demo video was generated with ElevenLabs. I wrote the script myself and used an ElevenLabs voice to deliver it, which let me produce a clear, consistent walkthrough of the full flow, from the customer’s photo and message to the seller’s order.

Next time a customer says “that’s not the green I meant,” I want it to be before the first stitch, not after the last.