Skip to content

Deliverables

GANTT

Changes have been made throughout the project.

BoM (Bill of Materials)

Presentations

Pitch Presentation

Midterm Presentation

Storytelling Presentation

Final Presentation

Story telling script

My sketches for the story telling session tell a story about my concept and lead to the final outcome in..


  • scene 1 the scene opens with a room full of flowers
  • scene 2 we zoom into the lady wearing a plant based dress



- scene 3 she comes out from behind the plants


- scene 4 ... whats next?


A good exaple of story telling sketches are from ...Florencia Moyano https://class.textile-academy.org/2022/florencia-moyano/finalproject/prefinal03/

Code

Mother-Grandmother Data Python File (Combines 2 data sets of around ~150 characters and converts it to a weaving pattern using an 8 shaft loom, a straight draw-down threading pattern, and a simple advancing twill weave)

import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter

# Your Variables!

EPI = 14
PPI = 15
WIDTH_IN = 5
LENGTH_IN = 20
SHAFTS = 8
MAX_FLOAT = 4

TOTAL_WARPS = EPI * WIDTH_IN
TOTAL_PICKS = PPI * LENGTH_IN

OUTPUT_FILE = "weavingdraft_mothergrandmother.xlsx"

STRUCTURAL_INTERVAL = 10   # distributes conductivity every 10 picks

# Text -> Binary -> 3-Bit Chunks

def text_to_binary(filename):
    with open(filename, "r", encoding="utf-8") as f:
        text = f.read()
    binary_stream = []
    for char in text:
        byte = format(ord(char), "08b")
        binary_stream.extend([int(b) for b in byte])
    return binary_stream

def chunk_bits(bits, size=3):
    chunks = []
    for i in range(0, len(bits), size):
        chunk = bits[i:i+size]
        while len(chunk) < size:
            chunk.append(0)
        chunks.append(chunk)
    return chunks

def chunk_to_value(chunk):
    return int("".join(str(b) for b in chunk), 2)

# Insert .txt data files

chunks_A = chunk_bits(text_to_binary("grandmother.txt"), 3)
chunks_B = chunk_bits(text_to_binary("mother.txt"), 3)

# Setting up the excel file

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Weaving Draft"

warp_color = PatternFill(start_color="580113", end_color="580113", fill_type="solid")
weft_color = PatternFill(start_color="fff79c", end_color="fff79c", fill_type="solid")

threading = [i % SHAFTS for i in range(TOTAL_WARPS)]

BASE_LIFTS = [
    {0,1,2,3},
    {1,2,3,4},
    {2,3,4,5},
    {3,4,5,6},
    {4,5,6,7},
    {5,6,7,0},
    {6,7,0,1},
    {7,0,1,2},
]

warp_down_count = [0] * TOTAL_WARPS
ws.column_dimensions["A"].width = 40

# Generate the pattern

current_row = 1

for pick in range(TOTAL_PICKS):

    # Gradual blend grandmother → mother
    t = pick / (TOTAL_PICKS - 1)

    value_A = chunk_to_value(chunks_A[pick % len(chunks_A)])
    value_B = chunk_to_value(chunks_B[pick % len(chunks_B)])

    blended_value = round((1 - t) * value_A + t * value_B) % 8
    lift = BASE_LIFTS[blended_value]

# Adding conductive wefts based on when 3-bit chunk = 000 AND every 10th pick

    conductive = False

    if blended_value == 0:
        conductive = True

    if pick % STRUCTURAL_INTERVAL == 0:
        conductive = True

    # Labels when to put a conductive weft and a yarn weft
    if conductive:
        weft_sequence = ["COPPER WIRE", "YARN"]
    else:
        weft_sequence = ["YARN"]

# Labeling and writing shaft lift instructions for weaver

    for weft_type in weft_sequence:

        lift_shafts = sorted([s+1 for s in lift])
        instruction = "Shaft Lift: " + ",".join(str(s) for s in lift_shafts)
        instruction += f" | {weft_type}"

        ws.cell(row=current_row, column=1).value = instruction

        for warp in range(TOTAL_WARPS):
            cell = ws.cell(row=current_row, column=warp + 2)
            shaft = threading[warp]

            if shaft in lift:
                warp_down_count[warp] = 0
                cell.fill = warp_color
            else:
                warp_down_count[warp] += 1
                cell.fill = weft_color

            if warp_down_count[warp] >= MAX_FLOAT:
                cell.fill = warp_color
                warp_down_count[warp] = 0

        ws.row_dimensions[current_row].height = 10
        current_row += 1

# Column width sizing (but this changes if you import the file from excel to say a Google Sheets app)

for col in range(2, TOTAL_WARPS + 2):
    ws.column_dimensions[get_column_letter(col)].width = 1.5

wb.save(OUTPUT_FILE)
print("Weaving draft generated.")

My Data Python File (Uses 1 data set of around ~150 characters and converts it to a weaving pattern using an 8 shaft loom, a straight draw-down threading pattern, and a simple advancing twill weave)

import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter

# Your variables!

EPI = 15
PPI = 30
WIDTH_IN = 5
LENGTH_IN = 20
SHAFTS = 8
MAX_FLOAT = 4

STRUCTURAL_INTERVAL = 10

TOTAL_WARPS = EPI * WIDTH_IN
TOTAL_PICKS = PPI * LENGTH_IN

OUTPUT_FILE = "weavingdraft_daughter.xlsx"

# Text -> Binary -> 3-Bit Chunks

def text_to_binary(filename):

    with open(filename, "r", encoding="utf-8") as f:
        text = f.read()

    binary_stream = []

    for char in text:
        byte = format(ord(char), "08b")
        binary_stream.extend([int(b) for b in byte])

    return binary_stream


def chunk_bits(bits, size=3):
    chunks = []
    for i in range(0, len(bits), size):
        chunk = bits[i:i+size]
        while len(chunk) < size:
            chunk.append(0)
        chunks.append(chunk)
    return chunks


def chunk_to_value(chunk):

    return int("".join(str(b) for b in chunk), 2)


# upload your .txt file here

chunks = chunk_bits(text_to_binary("daughter.txt"), 3)

# setting up the excel file 

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Weaving Draft"

warp_color = PatternFill(start_color="5e41ff", end_color="5e41ff", fill_type="solid")
weft_color = PatternFill(start_color="f84509", end_color="f84509", fill_type="solid")

threading = [i % SHAFTS for i in range(TOTAL_WARPS)]

BASE_LIFTS = [
    {0,1,2,3},
    {1,2,3,4},
    {2,3,4,5},
    {3,4,5,6},
    {4,5,6,7},
    {5,6,7,0},
    {6,7,0,1},
    {7,0,1,2},
]

warp_down_count = [0] * TOTAL_WARPS

ws.column_dimensions["A"].width = 35

# generate the weaving pattern

for pick in range(TOTAL_PICKS):

    row = pick + 1

    value = chunk_to_value(chunks[pick % len(chunks)]) % 8
    lift = BASE_LIFTS[value]

    conductive = False

    # data trigger
    if value == 0:
        conductive = True

    # structural reinforcement
    if pick % STRUCTURAL_INTERVAL == 0:
        conductive = True

    if conductive:
        weft_type = "COPPER WIRE"
    else:
        weft_type = "YARN"

    lift_shafts = sorted([s+1 for s in lift])

    instruction = "Shaft Lift: " + ",".join(str(s) for s in lift_shafts)
    instruction += f" | {weft_type}"

    ws.cell(row=row, column=1).value = instruction

    for warp in range(TOTAL_WARPS):

        cell = ws.cell(row=row, column=warp + 2)
        shaft = threading[warp]

        if shaft in lift:

            warp_down_count[warp] = 0
            cell.fill = warp_color

        else:

            warp_down_count[warp] += 1
            cell.fill = weft_color

        if warp_down_count[warp] >= MAX_FLOAT:

            cell.fill = warp_color
            warp_down_count[warp] = 0

    ws.row_dimensions[row].height = 10


# Column width sizing (but this changes if you import the file from excel to say a Google Sheets app)

for col in range(2, TOTAL_WARPS + 2):
    ws.column_dimensions[get_column_letter(col)].width = 1.5

# Saving and spitting out your resulting file

wb.save(OUTPUT_FILE)

print("Weaving draft generated from daughter.txt.")

How-Tos & Tutorials

You can find this info in the "Process Journal" tab! :) Check out the Analog Synth, Weaving, and Theremin tabs in particular :D :D

Fabrication files

  • Python File 1
  • Python File 2