mirror of
https://github.com/vladmandic/automatic
synced 2026-08-30 00:50:59 +02:00
Page:
Dev SelfStart
Pages
AMD MIOpen
AMD ROCm
API
Advanced Install
Benchmark
CHANGELOG
CLI Arguments
CLI Tools
CLiP Skip
Caption
Control HowTo
Control Settings
Control Technical
Debug
Detailer
Dev AICoding
Dev Docs
Dev Extensions
Dev GettingStarted
Dev Hints
Dev Home
Dev Locale
Dev SelfStart
Dev Structure
Dev Theme
Dev UI
DirectML
Docker
Enso
FAQ
FLUX
Features
FramePack
Gated
Getting Started
Google GenAI
HiDream
Home
Hotkeys
HuggingFace
IPAdapter
Ideogram
Installation
Intel ARC
Kanvas
LTX
Launcher
LoRA Technical
LoRA
Loader
MacOS Python
Malloc
MiniMax
Model Loading
Model Support
Models Tab
Models
Networks Search
Networks
Notes
NudeNet
Nunchaku
ONNX Runtime
Offload
OpenVINO
Outpaint
Parameters
Performance Timers
Performance Tuning
Platforms
Process
Profiling
Prompt Enhance
Prompting
Python
Quantization
Reprocess
SD Pipeline How it Works
SD Training Methods
SD XL
SD3
SDNQ Quantization
Schedulers
Scripts
Stability Matrix
Stable Cascade
Styles
Themes
Troubleshooting
Update
Using LCM
VAE
Video
WSL
Wildcards
XYZ Grid
ZLUDA
_ToDo
index
nVidia
Clone
Table of Contents
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Where to Start Contributing
New to SD.Next and not sure where to jump in? Click the button below — it fetches open issues from GitHub, then uses Chrome's on-device AI (Gemini Nano) to surface the best first tasks. No data leaves your browser.
Find my best starting point
This feature uses Gemini Nano, Chrome's on-device AI. A one-time download (~1.5 GB) is required — it runs entirely on your device.
Download model & find my starting point
Chrome's built-in AI isn't available in your browser. This feature requires Chrome 138+ with Gemini Nano. You can still read the contribution areas below manually.
Contribution Areas
| Area | Skills | Difficulty |
|---|---|---|
| Documentation & Wiki | Writing, Markdown | Beginner |
| Localization | Non-English fluency | Beginner |
| User Themes | CSS, web design | Beginner–Intermediate |
| Scripts & Extensions | Python, SD pipelines | Intermediate |
| UI Development | JavaScript, HTML, CSS | Intermediate |
| AI Coding Tools | Python, LLMs | Intermediate |
| Core Modules | Python, deep learning | Intermediate–Advanced |
| Backend & Platform Support | Python, CUDA/ROCm/OpenVINO | Advanced |
Ready to dive in? Start with Dev Getting Started for the fork and PR workflow.
<script> (function () { const GITHUB_API = 'https://api.github.com/repos/vladmandic/sdnext/issues?state=open&per_page=30&sort=updated'; const AREAS_TEXT = ` SD.Next Contribution Areas: 1. Documentation & Wiki — Skills: Writing, Markdown. No coding required. Difficulty: Beginner. 2. Localization — Skills: Fluency in a non-English language. No coding required. Difficulty: Beginner. 3. User Themes — Skills: CSS, basic web design. Difficulty: Beginner–Intermediate. 4. Scripts & Extensions — Skills: Python, SD pipeline basics. Difficulty: Intermediate. 5. UI Development — Skills: JavaScript/TypeScript, HTML, CSS. Difficulty: Intermediate. 6. AI Coding Tools — Skills: Python, LLM/AI tooling experience. Difficulty: Intermediate. 7. Core Modules — Skills: Python, deep learning basics. Difficulty: Intermediate–Advanced. 8. Backend & Platform Support — Skills: Python, CUDA/ROCm/OpenVINO. Difficulty: Advanced. `; const btn = document.getElementById('ai-summary-btn'); const downloadBox = document.getElementById('ai-download-box'); const downloadBtn = document.getElementById('ai-download-btn'); const status = document.getElementById('ai-status'); const progressBar = document.getElementById('ai-progress-bar'); const progressFill = document.getElementById('ai-progress-fill'); const output = document.getElementById('ai-output'); const unavailable = document.getElementById('ai-unavailable'); function setStatus(msg) { status.style.display = msg ? 'block' : 'none'; status.textContent = msg; } async function fetchIssues() { const res = await fetch(GITHUB_API, { headers: { 'Accept': 'application/vnd.github+json' } }); if (!res.ok) throw new Error(`GitHub API error: ${res.status}`); const items = await res.json(); return items.filter(i => !i.pull_request); } async function summarize(avail) { setStatus('Fetching open issues from GitHub…'); let issues = []; try { issues = await fetchIssues(); } catch (err) { setStatus('Could not fetch issues — using contribution areas only.'); } const issuesText = issues.length ? '\nOpen GitHub Issues (use the exact #NUMBER when referencing):\n' + issues.map(i => `Issue #${i.number}: ${i.title}`).join('\n') : ''; const options = { type: 'key-points', format: 'plain-text', length: 'medium', outputLanguage: 'en', sharedContext: 'You are helping a new open-source contributor find their first task in SD.Next, ' + 'a Stable Diffusion image generation platform written in Python. ' + 'Recommend 2-3 specific starting points by pairing a contribution area with a real open issue. ' + 'You MUST cite each issue using its exact number in the format #NUMBER (e.g. #4859). ' + 'Only reference issues that appear in the list provided.', }; if (avail === 'downloadable') { progressBar.style.display = 'block'; options.monitor = (m) => { m.addEventListener('downloadprogress', (e) => { const pct = Math.round(e.loaded * 100); progressFill.style.width = `${pct}%`; setStatus(`Downloading Gemini Nano… ${pct}%`); }); }; } else { setStatus('Thinking…'); } const summarizer = await Summarizer.create(options); progressBar.style.display = 'none'; setStatus('Generating…'); output.style.display = 'block'; output.textContent = ''; const stream = summarizer.summarizeStreaming(AREAS_TEXT + issuesText); let fullText = ''; for await (const chunk of stream) { fullText += chunk; output.textContent = fullText; } const escaped = fullText .replace(/&/g, '&').replace(//g, '>') .replace(/#(\d+)/g, '#$1'); const items = escaped.split('\n') .filter(l => l.trim().startsWith('*')) .map(l => { const text = l.replace(/^\s*\*\s*/, ''); return text.replace(/^([^:]+):/, '$1:'); }); output.innerHTML = items.length ? '- ' + items.map(i => `
- ${i} `).join('') + '