-
-
Notifications
You must be signed in to change notification settings - Fork 562
Dev SelfStart
Vladimir Mandic edited this page Jun 6, 2026
·
2 revisions
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.
| 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('') + '