From 853195faa99a4fd6ebf4307b7ccc3dbd33fc66ee Mon Sep 17 00:00:00 2001 From: Rachana Date: Wed, 6 Aug 2025 11:13:00 -0700 Subject: [PATCH 1/2] chore: finalized report bundler with custom metadata and updated docs --- report_bundler/README.md | 42 ++++++++++++++++++ report_bundler/bundler.py | 73 ++++++++++++++++++++++++++++++++ report_bundler/config.json | 14 ++++++ report_bundler/grids/image1.png | Bin 0 -> 10482 bytes report_bundler/grids/image2.png | Bin 0 -> 34680 bytes report_bundler/report.zip | Bin 0 -> 46965 bytes report_bundler/results.csv | 3 ++ report_bundler/test_schema.py | 15 +++++++ 8 files changed, 147 insertions(+) create mode 100644 report_bundler/README.md create mode 100644 report_bundler/bundler.py create mode 100644 report_bundler/config.json create mode 100644 report_bundler/grids/image1.png create mode 100644 report_bundler/grids/image2.png create mode 100644 report_bundler/report.zip create mode 100644 report_bundler/results.csv create mode 100644 report_bundler/test_schema.py diff --git a/report_bundler/README.md b/report_bundler/README.md new file mode 100644 index 00000000..cfc59d9d --- /dev/null +++ b/report_bundler/README.md @@ -0,0 +1,42 @@ +# Report Bundler + +Hi! I'm Rachana. + +This is my submission for DreamLayer's Open Source Challenge. (Task #5 - Report Bundle) + +Why this Option? +As someone who’s worked on intelligent data pipelines and NLP automation tools, this challenge was a fun way to apply my real world experience into a compact, useful OSS tool. + +This task generates a reproducible `report.zip` containing: +- Metadata (`results.csv`) +- Generation config (`config.json`) +- Final grid images +- Schema validation + README + +--- + +## CSV Columns + +| Column | Description | +|---------------|-----------------------------------------------------------| +| image_path | Relative path to the grid image | +| sampler | Sampling algorithm used | +| steps | Number of inference steps | +| cfg | Classifier-Free Guidance scale | +| preset | Style or visual preset used | +| seed | Random seed for deterministic generation | +| width | Grid width in pixels (added for visual clarity) | +| height | Grid height in pixels (added for visual clarity) | +| grid_label | Custom label for the image (used in overlay or UX tags) | +| notes | Any human-readable notes about generation intent | + + + +The output is deterministic, simple to trace, and easy to integrate into DreamLayer workflows. + + +## How to Run + +```bash +cd report_bundler +python bundler.py diff --git a/report_bundler/bundler.py b/report_bundler/bundler.py new file mode 100644 index 00000000..46c50786 --- /dev/null +++ b/report_bundler/bundler.py @@ -0,0 +1,73 @@ +import csv +import json +import zipfile +from pathlib import Path + +# These are the columns we expect in the results.csv +REQUIRED_COLUMNS = {"image_path", "sampler", "steps", "cfg", "preset", "seed"} + +def validate_csv_schema(csv_path): + """ + Opens the CSV file and checks if it has all required columns. + If not, throws an error so we don't bundle bad data. + """ + with open(csv_path, newline='') as f: + reader = csv.DictReader(f) + header_fields = set(reader.fieldnames) + + if not REQUIRED_COLUMNS.issubset(header_fields): + missing = REQUIRED_COLUMNS - header_fields + raise ValueError(f"Oops...Missing required columns: {missing}") + + return list(reader) + +def collect_files(csv_rows): + """ + From the rows in the CSV, grab all image paths that need to be bundled. + We use a set to avoid duplicates just in case. + """ + files = set() + for row in csv_rows: + files.add(row["image_path"]) + return files + +def create_report_zip(output_path="report.zip"): + """ + This function does the real work: + - validates CSV + - checks all files exist + - packages everything neatly into a zip + """ + base_dir = Path(__file__).parent + csv_path = base_dir / "results.csv" + config_path = base_dir / "config.json" + readme_path = base_dir / "README.md" + zip_path = base_dir / output_path + + # Step 1: Load and validate the CSV + csv_rows = validate_csv_schema(csv_path) + + # Step 2: Grab image file paths from CSV + image_paths = collect_files(csv_rows) + + # Step 3: Zip it all up! + with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf: + # Add metadata and config + zipf.write(csv_path, arcname="results.csv") + zipf.write(config_path, arcname="config.json") + zipf.write(readme_path, arcname="README.md") + + # Add each grid image + for path in image_paths: + full_path = base_dir / path + if not full_path.exists(): + raise FileNotFoundError(f"Missing image file: {full_path}") + + # This keeps the zip path clean and relative (like grids/image1.png) + zipf.write(full_path, arcname=path) + + print(f"Done! Report created: {zip_path}") + +# Run it as a script (not when imported) +if __name__ == "__main__": + create_report_zip() diff --git a/report_bundler/config.json b/report_bundler/config.json new file mode 100644 index 00000000..a764908c --- /dev/null +++ b/report_bundler/config.json @@ -0,0 +1,14 @@ +{ + "model": "SDXL", + "vae": "AutoencoderKL", + "loras": ["AnimeStyleV2"], + "controlnets": ["CannyEdgeDetector"], + "prompt": "a serene futuristic cityscape at sunset, ultra realistic, 8k", + "negative_prompt": "blurry, low quality, distorted", + "seed": 123456, + "sampler": "Euler", + "steps": 25, + "cfg": 7.5, + "workflow": "txt2img", + "version": "1.0.0" +} diff --git a/report_bundler/grids/image1.png b/report_bundler/grids/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..75229e86fea32d50b5f7d00868b2e45d1ea9009a GIT binary patch literal 10482 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 literal 0 HcmV?d00001 diff --git a/report_bundler/grids/image2.png b/report_bundler/grids/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..1be4bcb0eaf63f85a397b475a74845d0a49efd43 GIT binary patch literal 34680 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 Qk7C1x^!_9HFaQ7m0O&PN@&Et; literal 0 HcmV?d00001 diff --git a/report_bundler/report.zip b/report_bundler/report.zip new file mode 100644 index 0000000000000000000000000000000000000000..357e83aed9ea13f6b2b09921a0a33911029bf01b GIT binary patch literal 46965 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 L-iE8?KUe<;iyPPg literal 0 HcmV?d00001 diff --git a/report_bundler/results.csv b/report_bundler/results.csv new file mode 100644 index 00000000..082e0869 --- /dev/null +++ b/report_bundler/results.csv @@ -0,0 +1,3 @@ +image_path,sampler,steps,cfg,preset,seed,width,height,grid_label,notes +grids/image1.png,Euler,30,8.5,cyber-neural,108234,1024,1024,digital-consciousness,"Futuristic brain core visualization in a neon tech chamber" +grids/image2.png,DPM++ 2M Karras,28,7.8,ui-dreamscape,786512,1024,768,holographic-devices,"Concept art of interconnected digital devices in a glowy metaverse style" diff --git a/report_bundler/test_schema.py b/report_bundler/test_schema.py new file mode 100644 index 00000000..8c80d6f9 --- /dev/null +++ b/report_bundler/test_schema.py @@ -0,0 +1,15 @@ +def test_csv_schema(): + """ + Validate that results.csv contains all expected columns: + both required and optional metadata fields. + """ + expected_columns = { + "image_path", "sampler", "steps", "cfg", "preset", "seed", + "width", "height", "grid_label", "notes" + } + + with open("results.csv", newline='') as f: + reader = csv.DictReader(f) + header = set(reader.fieldnames) + + assert expected_columns.issubset(header), f"Missing: {expected_columns - header}" From d23c06c1da60cfee501238d222cda0f207bcda34 Mon Sep 17 00:00:00 2001 From: Rachana Date: Wed, 6 Aug 2025 11:41:07 -0700 Subject: [PATCH 2/2] fix: improve schema validation, sanitize paths, and handle bad CSVs --- report_bundler/bundler.py | 54 ++++++++++++++++++++-------------- report_bundler/report.zip | Bin 46965 -> 46965 bytes report_bundler/test_schema.py | 14 ++++----- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/report_bundler/bundler.py b/report_bundler/bundler.py index 46c50786..c51ff3df 100644 --- a/report_bundler/bundler.py +++ b/report_bundler/bundler.py @@ -9,34 +9,43 @@ def validate_csv_schema(csv_path): """ Opens the CSV file and checks if it has all required columns. - If not, throws an error so we don't bundle bad data. + Handles missing headers and throws readable errors. """ with open(csv_path, newline='') as f: reader = csv.DictReader(f) + + if reader.fieldnames is None: + raise ValueError("CSV file is empty or missing a header row.") + header_fields = set(reader.fieldnames) - if not REQUIRED_COLUMNS.issubset(header_fields): missing = REQUIRED_COLUMNS - header_fields - raise ValueError(f"Oops...Missing required columns: {missing}") - + raise ValueError(f"Missing required columns: {missing}") + return list(reader) def collect_files(csv_rows): """ - From the rows in the CSV, grab all image paths that need to be bundled. - We use a set to avoid duplicates just in case. + From the rows in the CSV, grab all valid image paths. + Filters out rows with missing or empty 'image_path' fields. """ files = set() - for row in csv_rows: - files.add(row["image_path"]) + for idx, row in enumerate(csv_rows): + if "image_path" not in row: + raise ValueError(f"Row {idx} missing 'image_path' key: {row}") + image_path = row["image_path"] + if image_path and image_path.strip(): + files.add(image_path) + else: + print(f"Skipping row {idx} due to empty image_path.") return files def create_report_zip(output_path="report.zip"): """ - This function does the real work: - - validates CSV - - checks all files exist - - packages everything neatly into a zip + This function: + - Validates the results.csv file + - Ensures all images listed exist and are safe + - Packages everything into report.zip """ base_dir = Path(__file__).parent csv_path = base_dir / "results.csv" @@ -44,30 +53,31 @@ def create_report_zip(output_path="report.zip"): readme_path = base_dir / "README.md" zip_path = base_dir / output_path - # Step 1: Load and validate the CSV + # Step 1: Validate CSV csv_rows = validate_csv_schema(csv_path) - # Step 2: Grab image file paths from CSV + # Step 2: Collect all valid image paths image_paths = collect_files(csv_rows) - # Step 3: Zip it all up! + # Step 3: Zip all files with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf: - # Add metadata and config zipf.write(csv_path, arcname="results.csv") zipf.write(config_path, arcname="config.json") zipf.write(readme_path, arcname="README.md") - # Add each grid image for path in image_paths: + norm_path = Path(path).resolve() + # Prevent path traversal by ensuring image is inside project directory + if ".." in path or not str(norm_path).startswith(str(base_dir.resolve())): + raise ValueError(f"🚨 Invalid image path: {path}") + full_path = base_dir / path if not full_path.exists(): - raise FileNotFoundError(f"Missing image file: {full_path}") - - # This keeps the zip path clean and relative (like grids/image1.png) + raise FileNotFoundError(f"Image not found: {full_path}") + zipf.write(full_path, arcname=path) - print(f"Done! Report created: {zip_path}") + print(f"Done! Report created at: {zip_path}") -# Run it as a script (not when imported) if __name__ == "__main__": create_report_zip() diff --git a/report_bundler/report.zip b/report_bundler/report.zip index 357e83aed9ea13f6b2b09921a0a33911029bf01b..4a3c9b91ea099f073f74c3171c40a467aa36bcc2 100644 GIT binary patch delta 62 zcmV-E0KxzD?gI7h0