{"id":25208063,"url":"https://github.com/comfy-org/comfy-pr","last_synced_at":"2026-04-11T16:15:11.210Z","repository":{"id":240454433,"uuid":"802547905","full_name":"Comfy-Org/Comfy-PR","owner":"Comfy-Org","description":"Let's grow with ComfyUI community -- The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.","archived":false,"fork":false,"pushed_at":"2026-04-05T09:49:24.000Z","size":5751,"stargazers_count":10,"open_issues_count":13,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-05T10:16:24.016Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://comfy-pr.vercel.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Comfy-Org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-18T15:52:13.000Z","updated_at":"2026-04-05T09:49:27.000Z","dependencies_parsed_at":"2024-05-19T02:23:01.071Z","dependency_job_id":"54fb60c8-5b1b-482a-859a-577d1e6ff8dd","html_url":"https://github.com/Comfy-Org/Comfy-PR","commit_stats":null,"previous_names":["drip-art/comfy-registry-pr","comfy-org/comfy-pr"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/Comfy-Org/Comfy-PR","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Comfy-Org%2FComfy-PR","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Comfy-Org%2FComfy-PR/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Comfy-Org%2FComfy-PR/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Comfy-Org%2FComfy-PR/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Comfy-Org","download_url":"https://codeload.github.com/Comfy-Org/Comfy-PR/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Comfy-Org%2FComfy-PR/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31686433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T13:07:20.380Z","status":"ssl_error","status_checked_at":"2026-04-11T13:06:47.903Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-10T12:18:36.849Z","updated_at":"2026-04-11T16:15:11.189Z","avatar_url":"https://github.com/Comfy-Org.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Comfy-PR\n\nA comprehensive automation platform for [ComfyUI Custom Node](https://registry.comfy.org/) development and publishing. Comfy-PR helps Custom Node authors streamline their publishing workflow by automating repository setup, pull request creation, and ongoing maintenance.\n\n## Features\n\n- 🔄 **Automated PR Creation**: Clone repos, update `pyproject.toml`, initialize GitHub Actions, and create PRs\n- 📊 **Analytics Dashboard**: Web-based dashboard with statistics, CSV/YAML exports, and repository insights\n- 🔗 **GitHub Webhook Integration**: Real-time monitoring of issues, PRs, and comments\n- ⚡ **Performance Optimized**: Cached GitHub API client with SQLite storage (5min TTL)\n- 📋 **Task Management**: Automated task execution with progress tracking\n- 🎯 **Rule-Based Follow-ups**: Configurable automation rules for different PR states\n\n## Comfy-PR Project Goals\n\nThe Comfy-PR project aims to support and streamline the process for Custom Node Authors to publish their work in the Comfy Registry. Here's why this initiative is essential:\n\n1. **Simplify Node Publishing**: Provide tools and assistance to make publishing Custom Nodes straightforward, allowing authors to concentrate on development rather than the complexities of the publishing process.\n2. **Expand Node Availability**: Streamlined publishing will increase the number of Custom Nodes in the Comfy Registry, enriching the ecosystem and offering more options to users.\n3. **Encourage Collaboration**: Scanning GitHub repositories and providing follow-up support fosters collaboration, knowledge-sharing, and a stronger sense of community among Custom Node Authors and users.\n4. **Ensure Quality and Compliance**: Automate checks and provide guidance to maintain high-quality standards and compliance within the Comfy Registry.\n5. **Resolve Publishing Issues Promptly**: Address Custom Node Authors' issues during the publishing process quickly, reducing frustration and improving the overall user experience.\n6. **Strengthen the Comfy Community**: Help solve users' problems with Custom Node uploading and publishing, contributing to a more vibrant, supportive, and engaged community.\n7. **Promote Innovation**: Lower barriers to publishing Custom Nodes to encourage innovation and creativity within the community, leading to the development of novel and exciting nodes.\n\nThrough these efforts, Comfy-PR seeks to create an environment where Custom Node Authors can thrive and users can access a diverse and high-quality array of Custom Nodes.\n\n## Architecture Overview\n\n### Core Components\n\n1. **CLI Tool** (`src/cli.ts`): Command-line interface for processing individual repositories\n2. **Main Service** (`src/index.ts`): Orchestrates batch processing of repositories\n3. **Web Dashboard** (`app/`): Next.js application with analytics and management UI\n4. **Webhook Service** (`run/index.ts`): Real-time GitHub event monitoring\n5. **Task System** (`app/tasks/`): Automated background tasks for various operations\n\n### Key Features\n\n#### CLI Operations\n\n- ✅ Repository forking and local cloning\n- ✅ Automated `pyproject.toml` setup via `comfy node init`\n- ✅ GitHub Actions workflow creation and publishing\n- ✅ Template-based PR creation with descriptions\n- ✅ Clean workspace management\n\n#### Analytics \u0026 Monitoring\n\n- ✅ Repository status tracking (private/archived/active)\n- ✅ PR status monitoring (open/merged/closed) with comments\n- ✅ Statistical analysis and reporting\n- ✅ CSV/YAML data exports\n- ✅ Related PR cross-referencing\n\n#### Automation Engine\n\n- ✅ Rule-based follow-up actions\n- ✅ Slack notifications\n- ✅ Email task management\n- ✅ License schema updates\n- ✅ Repository bypass logic\n- 🔄 Auto-cleanup of merged forks (in progress)\n\n### Web Dashboard\n\nAccess the dashboard at https://comfy-pr.vercel.app\n\n- 📊 Repository statistics and analytics\n- 📈 Interactive charts and visualizations\n- 📋 Task management interface\n- 📤 Data export tools (CSV/YAML)\n- 🔍 PR status monitoring and filtering\n\n## Configuration\n\n### Environment Variables\n\n#### Core Settings\n\n```bash\n# GitHub API token (required)\nGH_TOKEN=ghp_your_github_token_here\n\n# PR source organization (optional - defaults to your account)\nFORK_OWNER=\"ComfyNodePRs\"\n\n# PR branch prefix (optional)\nFORK_PREFIX=\"PR-\"\n\n# MongoDB connection (for dashboard/analytics)\nMONGODB_URI=mongodb://localhost:27017\n```\n\n#### Webhook Service (Optional)\n\n```bash\n# Enable real-time webhook monitoring\nUSE_WEBHOOKS=true\nGITHUB_WEBHOOK_SECRET=your_secure_webhook_secret\nWEBHOOK_BASE_URL=https://your-domain.com\nPORT=8080\n```\n\n### GitHub Token Setup\n\n1. Go to [GitHub Personal Access Tokens](https://github.com/settings/tokens?type=beta)\n2. Create a fine-grained token with these permissions:\n   - **Pull requests**: Read and write\n   - **Workflows**: Read and write\n   - **Metadata**: Read-only\n   - **Repository hooks**: Read and write (for webhooks)\n\n### SSH Key Setup\n\nRequired for automated git operations:\n\n```bash\nssh-keygen -t rsa -b 4096 -C \"your_email@example.com\"\ncat ~/.ssh/id_rsa.pub\n# Add the public key to https://github.com/settings/keys\n```\n\n## Quick Start\n\n### CLI Usage\n\n```bash\n# Install and run for specific repositories\nbunx comfy-pr [GITHUB_REPO_URLS...]\n\n# Process from a file list\nbunx comfy-pr --repolist repos.txt\n\n# Use environment variable\nREPO=https://github.com/owner/repo bunx comfy-pr\n```\n\n### Examples\n\n```bash\n# Process a single repository\nbunx comfy-pr https://github.com/example/my-comfy-node\n\n# Process multiple repositories\nbunx comfy-pr \\\n  https://github.com/user1/node-a \\\n  https://github.com/user2/node-b\n\n# Use a repository list file\necho \"https://github.com/example/repo1\" \u003e repos.txt\necho \"https://github.com/example/repo2\" \u003e\u003e repos.txt\nbunx comfy-pr --repolist repos.txt\n```\n\n## Installation \u0026 Setup\n\n### Prerequisites\n\n- [Bun](https://bun.sh) runtime\n- Python 3.x with `comfy-cli` installed\n- Git with SSH key configured\n- GitHub Personal Access Token\n\n### Local Development\n\n```bash\n# Clone the repository\ngit clone https://github.com/Comfy-Org/Comfy-PR\ncd Comfy-PR\n\n# Install dependencies\nbun install\n\n# Setup Python environment for comfy-cli\npython3 -m venv .venv\nsource .venv/bin/activate  # On Windows: .venv\\Scripts\\activate\npip install comfy-cli\n\n# Configure environment\ncp .env.example .env\n# Edit .env with your settings\n\n# Run CLI tool\nbun src/cli.ts https://github.com/example/my-comfy-node\n\n# Run main service (batch processing)\nbun src/index.ts\n\n# Start web dashboard\nbun run dev  # Available at http://localhost:3000\n```\n\n### Production Deployment\n\n#### Docker Compose (Recommended)\n\n```bash\n# Configure environment\ncp .env.example .env\n# Edit .env with production settings\n\n# Deploy with Docker Compose\ndocker compose up -d\n```\n\n#### Manual Docker\n\n```bash\ndocker run --rm -it \\\n  -v $HOME/.ssh:/root/.ssh:ro \\\n  -e GH_TOKEN=your_github_token \\\n  -e MONGODB_URI=mongodb://localhost:27017 \\\n  comfy-org/comfy-pr\n```\n\n#### Cloud Deployment\n\nThe webhook service can be deployed to:\n\n- **Vercel**: `vercel --prod`\n- **Google Cloud Run**: `cd run \u0026\u0026 ./deploy.sh`\n- **Railway**: `railway deploy`\n- **Heroku**: Standard Node.js deployment\n\n## Development\n\n### Project Structure\n\n```\nComfy-PR/\n├── src/                      # Core utilities and business logic\n│   ├── cli.ts               # Command-line interface\n│   ├── index.ts             # Main service orchestrator\n│   ├── ghc.ts               # Cached GitHub API client\n│   ├── db/                  # Database models and utilities\n│   ├── gh/                  # GitHub API wrappers\n│   └── utils/               # Shared utilities\n├── app/                      # Next.js web dashboard\n│   ├── (dashboard)/         # Dashboard pages and components\n│   ├── api/                 # API routes and tRPC\n│   └── tasks/               # Background task implementations\n├── run/                      # Production services\n│   ├── index.ts             # GitHub webhook service\n│   └── deploy.sh            # Cloud deployment scripts\n├── gh-service/              # Legacy webhook service\n├── templates/               # PR and workflow templates\n└── packages/                # Internal packages\n    └── mongodb-pipeline-ts/ # MongoDB aggregation utilities\n```\n\n### Development Workflow\n\n```bash\n# Install dependencies\nbun install\n\n# Start MongoDB (required for dashboard)\ndocker compose up mongodb -d\n\n# Initialize database\nbun src/index.ts\n\n# Development modes:\nbun run dev          # Web dashboard (http://localhost:3000)\nbun run dev:tsc      # TypeScript compiler watch mode\nbun run gh-service   # Webhook service\n\n# Testing\nbun test             # Run test suite\nbun test --watch     # Watch mode\n\n# Linting and building\nbun run lint         # ESLint\nbun run build        # Next.js build\n```\n\n### Running Individual Components\n\n```bash\n# Process specific repositories\nbun src/cli.ts https://github.com/example/repo\n\n# Run specific tasks\nbun app/tasks/coreping/coreping.ts\nbun app/tasks/gh-bounty/gh-bounty.ts\n\n# Update repository data\nbun src/updateCNRepos.ts\nbun src/updateAuthors.ts\n```\n\n## Advanced Usage\n\n### Webhook Integration\n\nFor real-time GitHub event monitoring:\n\n```bash\n# Generate secure webhook secret\nexport GITHUB_WEBHOOK_SECRET=$(openssl rand -hex 32)\n\n# Enable webhook mode\nexport USE_WEBHOOKS=true\nexport WEBHOOK_BASE_URL=https://your-domain.com\n\n# Start webhook service\nbun run gh-service\n```\n\nSee [WEBHOOK_SETUP.md](./WEBHOOK_SETUP.md) for detailed webhook configuration.\n\n### Task System\n\nThe platform includes several automated tasks:\n\n- **CorePing** (`app/tasks/coreping/`): Repository health monitoring\n- **GitHub Bounty** (`app/tasks/gh-bounty/`): Bounty management\n- **Design Tasks** (`app/tasks/gh-design/`): Design-related automation\n- **Contributor Analysis** (`app/tasks/github-contributor-analyze/`): Contribution statistics\n- **Action Updates** (`app/tasks/github-action-update/`): GitHub Actions maintenance\n\n### Database Inspection\n\n```bash\n# Inspect production database (read-only)\necho 'MONGODB_URI_INSPECT=mongodb://prod-readonly-uri' \u003e .env.development.local\necho 'MONGODB_URI=$MONGODB_URI_INSPECT' \u003e\u003e .env.development.local\n\n# Run inspection scripts\nbun src/checkPRsFailures.ts\nbun src/analyzeTotals.ts\n```\n\n### Performance Optimization\n\nThe project uses a cached GitHub API client (`src/ghc.ts`) that:\n\n- Stores responses in SQLite for 5 minutes\n- Reduces API rate limiting\n- Improves response times for repeated requests\n\n```typescript\nimport { ghc } from \"./src/ghc\";\n\n// Use ghc instead of gh for automatic caching\nconst repo = await ghc.repos.get({ owner, repo });\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcomfy-org%2Fcomfy-pr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcomfy-org%2Fcomfy-pr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcomfy-org%2Fcomfy-pr/lists"}