Merge pull request #5 from malkuthro/kflame-phase1-redo

Phase 1 (redo): release workflow + third-party tracking scaffold
This commit is contained in:
malkuthro
2026-02-14 23:47:43 +01:00
committed by GitHub
7 changed files with 194 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
# Changelog
All notable changes to this project should be documented in this file.
The format is inspired by Keep a Changelog and SemVer.
## [Unreleased]
### Added
- Initial release/process scaffolding:
- `docs/RELEASE_WORKFLOW.md`
- `docs/REPO_AUDIT_2026-02-14.md`
- `third_party/THIRD_PARTY.md`
- `third_party/forks_manifest.yaml`
- `tools/report_mods.py`
## [0.1.0] - 2026-02-14
### Added
- Project-level release/versioning strategy and third-party tracking scaffold.
+8
View File
@@ -22,6 +22,14 @@ The code for the Easy Resize node is inspired by the Resize Image V2 node from C
- **Error Handling**: Fallbacks for missing/invalid JSON in Wan 2.2 Easy Prompt; validation for aspect ratios and divisibility in Easy Resize.
- **Compatibility**: Works with ComfyUI-Manager for easy installation via Git URL. No additional dependencies beyond standard Python and ComfyUI libraries.
## Release & Stability
For production usage, install a pinned stable tag/commit instead of following moving branch heads.
- Release workflow: `docs/RELEASE_WORKFLOW.md`
- Change history: `CHANGELOG.md`
- Third-party tracking: `third_party/THIRD_PARTY.md`, `third_party/forks_manifest.yaml`
## Installation
### Via ComfyUI-Manager (Recommended)
1. Open ComfyUI and access the Manager interface.
+45
View File
@@ -0,0 +1,45 @@
# Release Workflow (Stable + Dev)
This project supports production users, so releases should be predictable.
## Branches
- `main` → active development
- `release/stable` → tested commits only (optional but recommended)
If you do not want two long-lived branches yet, keep using `main` and only publish tested tags.
## Versioning (SemVer)
Use tags in the format `vMAJOR.MINOR.PATCH`:
- `v1.0.0` = first stable release
- `v1.0.1` = bugfixes only
- `v1.1.0` = new backward-compatible features
- `v2.0.0` = breaking changes
## Minimal Release Checklist
1. Confirm node load on a clean ComfyUI install
2. Confirm key workflows still run
3. Update `CHANGELOG.md`
4. Create and push annotated tag:
```bash
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin vX.Y.Z
```
5. Publish GitHub release notes (what changed, tested matrix, known issues)
## Production Install Recommendation
Users in production should install by tag (not moving branch heads).
Example:
```bash
git clone --branch v1.0.0 https://github.com/malkuthro/ComfyUI-Koolook.git
```
Or in ComfyUI Manager, pin to a known stable tag/commit.
+29
View File
@@ -0,0 +1,29 @@
# Repo Audit — 2026-02-14
## Summary
The repository is functional but currently mixes multiple concerns (custom nodes, workflow assets, local environment artifacts, and experiments). This increases maintenance risk for production users.
## Findings
1. **Mixed-purpose layout**
- Root contains node source, workflows, utility projects, docs, and assets.
- Recommendation: gradually separate into clear areas (e.g. `nodes/`, `workflows/`, `runpod/`, `docs/`).
2. **Environment artifact present (`.venv/`)**
- `.venv` is ignored by `.gitignore`, but still exists locally.
- Recommendation: keep untracked; never commit virtual env artifacts.
3. **Release policy not explicit**
- No formal SemVer/tag workflow documented.
- Addressed by adding `docs/RELEASE_WORKFLOW.md` and `CHANGELOG.md`.
4. **Third-party modifications not centrally tracked**
- Some code is derived/modified from external repos.
- Addressed by adding `third_party/THIRD_PARTY.md` and `third_party/forks_manifest.yaml`.
## Immediate Next Steps
1. Fill `third_party/forks_manifest.yaml` for each external-derived node.
2. Publish first stable tag after verification.
3. Add CI release checks later (optional phase).
+19
View File
@@ -0,0 +1,19 @@
# Third-Party Code & Attribution
Use this file to track external repositories, licenses, and local modifications.
## Entry Template
- Name:
- Upstream repo URL:
- Upstream commit/tag used:
- License:
- Local path(s):
- What changed locally:
- Why changed:
- Last reviewed:
## Notes
- Keep this file updated when syncing upstream changes.
- If a node is heavily modified, document behavior differences clearly for users.
+21
View File
@@ -0,0 +1,21 @@
version: 1
updated_at: "2026-02-14"
entries:
- id: "easy_resize_inspiration"
name: "Easy Resize (inspired component)"
source_repo: "https://github.com/kijai/ComfyUI-KJNodes"
source_ref: "unknown"
local_paths:
- "k_easy_resize.py"
status: "modified"
license: "unknown"
notes: "Inspired by Resize Image V2; verify exact upstream commit/license metadata."
- id: "promptjson_integration_reference"
name: "PromptJSON interoperability reference"
source_repo: "https://github.com/NeuralSamurAI/ComfyUI-PromptJSON"
source_ref: "n/a"
local_paths: []
status: "reference_only"
license: "unknown"
notes: "No vendored code; integration reference in docs/workflows."
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env python3
"""Simple report for third-party modification tracking.
Reads third_party/forks_manifest.yaml and prints a short summary for maintainers.
"""
from __future__ import annotations
from pathlib import Path
import sys
try:
import yaml
except Exception:
print("Missing dependency: pyyaml\nInstall with: pip install pyyaml", file=sys.stderr)
sys.exit(1)
def main() -> int:
repo_root = Path(__file__).resolve().parents[1]
manifest_path = repo_root / "third_party" / "forks_manifest.yaml"
if not manifest_path.exists():
print(f"Manifest not found: {manifest_path}")
return 1
data = yaml.safe_load(manifest_path.read_text(encoding="utf-8")) or {}
entries = data.get("entries", [])
print("Third-party modification report")
print("=" * 34)
print(f"Manifest: {manifest_path}")
print(f"Entries: {len(entries)}\n")
for i, entry in enumerate(entries, 1):
print(f"{i}. {entry.get('name', entry.get('id', 'unnamed'))}")
print(f" id: {entry.get('id', '-')}")
print(f" status: {entry.get('status', '-')}")
print(f" source: {entry.get('source_repo', '-')}")
paths = entry.get("local_paths", []) or []
if paths:
print(" local paths:")
for p in paths:
print(f" - {p}")
else:
print(" local paths: (none)")
print()
return 0
if __name__ == "__main__":
raise SystemExit(main())