| from __future__ import annotations |
|
|
| import pathlib |
|
|
|
|
| def find_exp_dirs(ignore_repo: bool = False) -> list[str]: |
| repo_dir = pathlib.Path(__file__).parent |
| exp_root_dir = repo_dir / 'experiments' |
| if not exp_root_dir.exists(): |
| return [] |
| exp_dirs = sorted(exp_root_dir.glob('*')) |
| exp_dirs = [ |
| exp_dir for exp_dir in exp_dirs |
| if (exp_dir / 'pytorch_lora_weights.bin').exists() |
| ] |
| if ignore_repo: |
| exp_dirs = [ |
| exp_dir for exp_dir in exp_dirs if not (exp_dir / '.git').exists() |
| ] |
| return [path.relative_to(repo_dir).as_posix() for path in exp_dirs] |
|
|
|
|
| def save_model_card( |
| save_dir: pathlib.Path, |
| base_model: str, |
| instance_prompt: str, |
| test_prompt: str = '', |
| test_image_dir: str = '', |
| ) -> None: |
| image_str = '' |
| if test_prompt and test_image_dir: |
| image_paths = sorted((save_dir / test_image_dir).glob('*')) |
| if image_paths: |
| image_str = f'Test prompt: {test_prompt}\n' |
| for image_path in image_paths: |
| rel_path = image_path.relative_to(save_dir) |
| image_str += f'\n' |
|
|
| model_card = f'''--- |
| license: creativeml-openrail-m |
| base_model: {base_model} |
| instance_prompt: {instance_prompt} |
| tags: |
| - stable-diffusion |
| - stable-diffusion-diffusers |
| - text-to-image |
| - diffusers |
| - lora |
| inference: true |
| --- |
| # LoRA DreamBooth - {save_dir.name} |
| |
| These are LoRA adaption weights for [{base_model}](https://huggingface.co/{base_model}). The weights were trained on the instance prompt "{instance_prompt}" using [DreamBooth](https://dreambooth.github.io/). You can find some example images in the following. |
| |
| {image_str} |
| ''' |
|
|
| with open(save_dir / 'README.md', 'w') as f: |
| f.write(model_card) |
|
|