Spaces:
Runtime error
Runtime error
| # UnRavl — Upcycle Suggestions Database | |
| # Ridhi Garg | June 2 2026 | |
| # Base of UnRavl | |
| # Every garment type and its transformation possibilities | |
| UPCYCLE_SUGGESTIONS = { | |
| "Tshirt": { | |
| "transformations": [ | |
| { | |
| "name": "Crop Top", | |
| "description": "Cut the hem to crop length, raw edge or hemmed", | |
| "difficulty": "easy", | |
| "tools": ["scissors"], | |
| "vibe": ["casual", "Y2K", "minimal"] | |
| }, | |
| { | |
| "name": "Off Shoulder Top", | |
| "description": "Cut the neckline wide, elastic through the hem", | |
| "difficulty": "easy", | |
| "tools": ["scissors", "elastic", "needle", "thread"], | |
| "vibe": ["feminine", "casual", "summer"] | |
| }, | |
| { | |
| "name": "Backless Top", | |
| "description": "Cut the back open, add ties or lace detail", | |
| "difficulty": "medium", | |
| "tools": ["scissors", "needle", "thread"], | |
| "vibe": ["edgy", "going out", "Y2K"] | |
| }, | |
| { | |
| "name": "Corset Style", | |
| "description": "Add ribbon lacing down the back or front", | |
| "difficulty": "medium", | |
| "tools": ["scissors", "ribbon", "needle", "thread"], | |
| "vibe": ["dark feminine", "edgy", "going out"] | |
| }, | |
| { | |
| "name": "Bleach Dye", | |
| "description": "Bleach pattern for a distressed editorial look", | |
| "difficulty": "easy", | |
| "tools": ["bleach", "gloves", "water"], | |
| "vibe": ["edgy", "grunge", "streetwear"] | |
| } | |
| ] | |
| }, | |
| "Jeans": { | |
| "transformations": [ | |
| { | |
| "name": "Shorts", | |
| "description": "Cut at desired length, distress the hem", | |
| "difficulty": "easy", | |
| "tools": ["scissors"], | |
| "vibe": ["casual", "summer", "streetwear"] | |
| }, | |
| { | |
| "name": "Distressed", | |
| "description": "Slash knees and thighs for a worn look", | |
| "difficulty": "easy", | |
| "tools": ["scissors", "sandpaper"], | |
| "vibe": ["grunge", "casual", "streetwear"] | |
| }, | |
| { | |
| "name": "Embroidered", | |
| "description": "Add floral or graphic embroidery on pockets or hem", | |
| "difficulty": "hard", | |
| "tools": ["embroidery needle", "thread", "hoop"], | |
| "vibe": ["bohemian", "vintage", "feminine"] | |
| }, | |
| { | |
| "name": "Patchwork", | |
| "description": "Add fabric patches over rips or as design detail", | |
| "difficulty": "medium", | |
| "tools": ["fabric scraps", "needle", "thread"], | |
| "vibe": ["Y2K", "vintage", "bohemian"] | |
| } | |
| ] | |
| }, | |
| "Dress": { | |
| "transformations": [ | |
| { | |
| "name": "Mini Skirt", | |
| "description": "Cut the top off, add elastic waistband", | |
| "difficulty": "medium", | |
| "tools": ["scissors", "elastic", "needle", "thread"], | |
| "vibe": ["feminine", "going out", "Y2K"] | |
| }, | |
| { | |
| "name": "Two Piece", | |
| "description": "Cut into crop top and skirt set", | |
| "difficulty": "medium", | |
| "tools": ["scissors", "needle", "thread"], | |
| "vibe": ["going out", "summer", "feminine"] | |
| }, | |
| { | |
| "name": "Shorter Hem", | |
| "description": "Cut and hem to a shorter length", | |
| "difficulty": "easy", | |
| "tools": ["scissors", "needle", "thread"], | |
| "vibe": ["casual", "feminine", "minimal"] | |
| } | |
| ] | |
| }, | |
| "Jacket": { | |
| "transformations": [ | |
| { | |
| "name": "Cropped Jacket", | |
| "description": "Cut the body shorter for a cropped silhouette", | |
| "difficulty": "medium", | |
| "tools": ["scissors", "needle", "thread"], | |
| "vibe": ["streetwear", "Y2K", "edgy"] | |
| }, | |
| { | |
| "name": "Sleeveless Vest", | |
| "description": "Remove the sleeves completely", | |
| "difficulty": "easy", | |
| "tools": ["scissors", "needle", "thread"], | |
| "vibe": ["casual", "streetwear", "minimal"] | |
| }, | |
| { | |
| "name": "Painted Jacket", | |
| "description": "Add fabric paint design on the back", | |
| "difficulty": "medium", | |
| "tools": ["fabric paint", "brushes"], | |
| "vibe": ["streetwear", "artistic", "edgy"] | |
| } | |
| ] | |
| } | |
| } | |
| label_to_suggestion_key = { | |
| "Blazer":None, | |
| "Blouse":None, | |
| "Cardigan":None, | |
| "Dress":"Dress", | |
| "Hoodie":None, | |
| "Jacket":"Jacket", | |
| "Jeans":"Jeans", | |
| "Nightgown":None, | |
| "Outerwear":None, | |
| "Pajamas":None, | |
| "Rain jacket":"Jacket", | |
| "Rain trousers":None, | |
| "Robe":None, | |
| "Shirt":None, | |
| "Shorts":None, | |
| "Skirt":None, | |
| "Sweater":None, | |
| "T-shirt":"Tshirt", | |
| "Tank top":"Tshirt", | |
| "Tights":None, | |
| "Top":"Tshirt", | |
| "Training top":None, | |
| "Trousers":None, | |
| "Tunic":None, | |
| "Vest":None, | |
| "Winter jacket":"Jacket", | |
| "Winter trousers":None | |
| } | |
| def get_suggestions(garment_type): | |
| """ | |
| Takes a garment type and returns all transformation ideas | |
| """ | |
| if garment_type in UPCYCLE_SUGGESTIONS: | |
| return UPCYCLE_SUGGESTIONS[garment_type]["transformations"] | |
| else: | |
| return [] | |
| def get_suggestions_by_vibe(garment_type, vibe): | |
| """ | |
| Filters suggestions by aesthetic vibe | |
| """ | |
| all_suggestions = get_suggestions(garment_type) | |
| filtered = [] | |
| for suggestion in all_suggestions: | |
| if vibe.lower() in suggestion["vibe"]: | |
| filtered.append(suggestion) | |
| return filtered | |
| def get_easy_suggestions(garment_type): | |
| """ | |
| Returns only easy transformations | |
| Perfect for beginners | |
| """ | |
| all_suggestions = get_suggestions(garment_type) | |
| easy = [] | |
| for suggestion in all_suggestions: | |
| if suggestion["difficulty"] == "easy": | |
| easy.append(suggestion) | |
| return easy | |
| # TEST — run this file to see it working | |
| if __name__ == "__main__": | |
| print("=== Testing UnRavl Suggestions Database ===\n") | |
| # Test 1 — get all tshirt suggestions | |
| print("All tshirt transformations:") | |
| tshirt_ideas = get_suggestions("tshirt") | |
| for idea in tshirt_ideas: | |
| print(f" → {idea['name']} ({idea['difficulty']})") | |
| print() | |
| # Test 2 — filter by vibe | |
| print("Edgy tshirt transformations:") | |
| edgy_ideas = get_suggestions_by_vibe("tshirt", "edgy") | |
| for idea in edgy_ideas: | |
| print(f" → {idea['name']}") | |
| print() | |
| # Test 3 — easy only | |
| print("Easy jeans transformations:") | |
| easy_jeans = get_easy_suggestions("jeans") | |
| for idea in easy_jeans: | |
| print(f" → {idea['name']} — tools: {idea['tools']}") |