iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
A self-hostable, embeddable sheet music editor for React. Interactive, configurable, and SMuFL compliant with no platform lock-in.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
RiffScore is a self-hostable, embeddable sheet music editor for React.
Unlike commercial platforms that require users to leave your site or pay subscription fees, RiffScore allows you to embed interactive, editable scores directly into your application.
That's it! RiffScore renders a fully interactive grand staff editor with sensible defaults.
Note: Styles and fonts are bundled automatically — no separate CSS import or font setup required.
See Configuration for all options.
See Interaction Configuration for more display modes.README 전문 보기 ↗
RiffScore is a self-hostable, embeddable sheet music editor for React.
Unlike commercial platforms that require users to leave your site or pay subscription fees, RiffScore allows you to embed interactive, editable scores directly into your application.
npm install riffscore
import { RiffScore } from 'riffscore';
function App() {
return <RiffScore id="my-editor" />;
}
That's it! RiffScore renders a fully interactive grand staff editor with sensible defaults.
Note: Styles and fonts are bundled automatically — no separate CSS import or font setup required.
<RiffScore id="my-editor" config={{
score: {
staff: 'treble', // 'grand' | 'treble' | 'bass' | 'alto' | 'tenor'
measureCount: 4,
keySignature: 'G'
}
}} />
See Configuration for all options.
<RiffScore config={{
ui: { showToolbar: false },
interaction: { isEnabled: false }
}} />
See Interaction Configuration for more display modes.
const api = window.riffScore.get('my-editor');
api.select(0) // Select first measure (0-indexed)
.addNote('C4', 'quarter') // Add a quarter note
.addNote('E4') // Add with current duration
.play(); // Play from selection
Note: All API indices are 0-based. Use
select(0)for the first measure,select(1)for the second, etc.
See the Cookbook for more recipes.
.musicxml / .mxl), ABC notation and JSON import from the File menu, the API, or config (MusicXML, ABC).Cmaj7), solfège (Do), Roman numerals (IV7).addChord(), selectChord(), etc.Cmd+,.Cmd+P).window.riffScore (API Reference)api.select(1).addNote('C4').play() — chainable methods for concise scripting.api.on('score', callback) and api.on('batch', callback).beginTransaction/commitTransaction for single undo steps.result objects and sticky error states for robust scripting.play(), pause(), stop(), rewind(), setInstrument() for programmatic audio control.| Mac | Windows | Action |
|---|---|---|
| Entry & Editing | ||
1-7 | 1-7 | Set duration (64th to whole) |
. | . | Toggle dotted |
R | R | Toggle note/rest mode |
T | T | Toggle tie |
- / = / 0 | - / = / 0 | Flat / Sharp / Natural |
Enter | Enter | Insert note/rest at cursor |
↑ / ↓ | ↑ / ↓ | Transpose selection |
| Navigation & Selection | ||
← / → | ← / → | Previous / Next event |
Shift+←/→ | Shift+←/→ | Extend selection horizontally |
Cmd+↑/↓ | Ctrl+↑/↓ | Navigate within chord |
Alt+↑/↓ | Alt+↑/↓ | Switch staff (grand staff) |
Cmd+Shift+↑/↓ | Ctrl+Shift+↑/↓ | Extend selection vertically |
Cmd+A | Ctrl+A | Select all (progressive) |
Esc | Esc | Clear selection / Cancel |
| Playback | ||
Space | Space | Play / Pause |
P | P | Play from selection |
Shift+Space |
See the Interaction Guide for the complete keyboard reference.
📚 View Full Documentation Index
Browse all guides, architectural records, and migration history.
| Guide | Description |
|---|---|
| 📖 Configuration | All config options for <RiffScore /> |
| 🎹 API Reference | Imperative API for script control |
| 📗 Cookbook | Task-oriented recipes and examples |
| Guide | Description |
|---|---|
| 🎨 Interaction Design | UX philosophy and editor states |
| ⌨️ Keyboard Navigation | Navigation state machine details |
| 🎯 Selection Model | Multi-selection and vertical extension |
| Guide | Description |
|---|---|
| 📘 Architecture | Technical overview and design principles |
| 🧩 Coding Patterns | Common patterns and architectural standards |
| 🧱 Data Model | Score schema and quant system |
| 🔧 Commands | Command pattern reference |
| 🎼 Layout Engine | Engraving and positioning |
| 📜 ADRs | Architecture Decision Records |
| Guide | Description |
|---|---|
| 🤝 Contributing | Dev setup and guidelines |
| 🧪 Testing | Test patterns and fixtures |
| 📋 Changelog | Release history |
Control the editor programmatically from external scripts:
const api = window.riffScore.get('my-editor');
// Build a chord (indices are 0-based)
api.select(0) // First measure
.addNote('C4', 'quarter')
.addNote('E4')
.addNote('G4')
.addTone('C5'); // Stack into chord
// Batch operations (single undo step)
api.beginTransaction();
for (let i = 0; i < 16; i++) {
api.addNote(`C${(i % 3) + 4}`, 'sixteenth');
}
api.commitTransaction('Scale run');
// Subscribe to changes
api.on('batch', (e) => console.log(`Committed: ${e.label}`));
See the API Reference and Cookbook for all available methods.
riffscore/
├── src/ ← Library source
├── demo/ ← Next.js demo app
├── docs/ ← Documentation
├── dist/ ← Built library (ESM/CJS/DTS)
└── tsup.config.ts
# Install dependencies
npm install
cd demo && npm install
# Build library
npm run build
# Run demo
npm run demo:dev
Configure instance-local themes, viewport sizing, notation visibility, engraving preferences and editing permissions without replacing the editor. Add reactive controls with renderControls, drive a visual cursor with playbackCursor, or use unmetered notation and opt-in chord recognition. See the configuration guide and release notes.
The public core now supports shared documents with RiffScoreSession, measure windows, display-only clefs, runtime interaction permissions, reactive custom controls, playback subscriptions/seek, anchored SVG overlays, and glyph adapters. Presentation config stays under ui, chord typography under chord.display.font, and tuplets under ui.engraving.tuplets. See configuration and examples and the API reference.
For server/worker musical queries, import from riffscore/theory; this entry does not initialize React, the DOM or audio. Browser consumers still import riffscore/styles.css alongside the editor.
Shift+Space |
| Replay from last start |
Shift+Alt+Space | Shift+Alt+Space | Play from beginning |
| History |
Cmd+Z | Ctrl+Z | Undo |
Cmd+Shift+Z | Ctrl+Y | Redo |
| View |
Cmd+\ | Ctrl+\ | Toggle scroll/page view |
Cmd+, | Ctrl+, | Open Score Setup dialog |
Cmd+P | Ctrl+P |
Cmd+Shift+F | Ctrl+Shift+F | Toggle fullscreen |