tutticode 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +56 -0
- package/README.md +163 -2
- package/README.zh-CN.md +141 -0
- package/dist/skills/tutticode/SKILL.md +141 -0
- package/dist/skills/tutticode/references/agent-loop.md +112 -0
- package/dist/skills/tutticode/references/devices/aligndelay.md +28 -0
- package/dist/skills/tutticode/references/devices/amp.md +25 -0
- package/dist/skills/tutticode/references/devices/analog.md +180 -0
- package/dist/skills/tutticode/references/devices/arpeggiator.md +37 -0
- package/dist/skills/tutticode/references/devices/autopan.md +37 -0
- package/dist/skills/tutticode/references/devices/autoshift.md +66 -0
- package/dist/skills/tutticode/references/devices/beatrepeat.md +35 -0
- package/dist/skills/tutticode/references/devices/cabinet.md +19 -0
- package/dist/skills/tutticode/references/devices/channeleq.md +23 -0
- package/dist/skills/tutticode/references/devices/chorus.md +31 -0
- package/dist/skills/tutticode/references/devices/collision.md +129 -0
- package/dist/skills/tutticode/references/devices/compressor.md +40 -0
- package/dist/skills/tutticode/references/devices/corpus.md +51 -0
- package/dist/skills/tutticode/references/devices/delay.md +37 -0
- package/dist/skills/tutticode/references/devices/denoise.md +19 -0
- package/dist/skills/tutticode/references/devices/drift.md +82 -0
- package/dist/skills/tutticode/references/devices/drumbuss.md +29 -0
- package/dist/skills/tutticode/references/devices/drumrack.md +225 -0
- package/dist/skills/tutticode/references/devices/dsclang.md +26 -0
- package/dist/skills/tutticode/references/devices/dsclap.md +25 -0
- package/dist/skills/tutticode/references/devices/dscymbal.md +22 -0
- package/dist/skills/tutticode/references/devices/dsfm.md +25 -0
- package/dist/skills/tutticode/references/devices/dshh.md +23 -0
- package/dist/skills/tutticode/references/devices/dskick.md +25 -0
- package/dist/skills/tutticode/references/devices/dssnare.md +23 -0
- package/dist/skills/tutticode/references/devices/dstom.md +24 -0
- package/dist/skills/tutticode/references/devices/dynamic-tube.md +26 -0
- package/dist/skills/tutticode/references/devices/echo.md +56 -0
- package/dist/skills/tutticode/references/devices/electric.md +50 -0
- package/dist/skills/tutticode/references/devices/ensemble.md +129 -0
- package/dist/skills/tutticode/references/devices/eqeight.md +69 -0
- package/dist/skills/tutticode/references/devices/eqthree.md +27 -0
- package/dist/skills/tutticode/references/devices/erosion.md +22 -0
- package/dist/skills/tutticode/references/devices/filter.md +55 -0
- package/dist/skills/tutticode/references/devices/filterdelay.md +37 -0
- package/dist/skills/tutticode/references/devices/gate.md +36 -0
- package/dist/skills/tutticode/references/devices/glue.md +36 -0
- package/dist/skills/tutticode/references/devices/graindelay.md +26 -0
- package/dist/skills/tutticode/references/devices/hybrid-reverb.md +22 -0
- package/dist/skills/tutticode/references/devices/impulse.md +157 -0
- package/dist/skills/tutticode/references/devices/leveler.md +23 -0
- package/dist/skills/tutticode/references/devices/limiter.md +26 -0
- package/dist/skills/tutticode/references/devices/meld.md +239 -0
- package/dist/skills/tutticode/references/devices/midichord.md +46 -0
- package/dist/skills/tutticode/references/devices/midifmarp.md +26 -0
- package/dist/skills/tutticode/references/devices/midinoteecho.md +30 -0
- package/dist/skills/tutticode/references/devices/midinotelength.md +27 -0
- package/dist/skills/tutticode/references/devices/midipitch.md +26 -0
- package/dist/skills/tutticode/references/devices/midirandom.md +24 -0
- package/dist/skills/tutticode/references/devices/midiscale.md +25 -0
- package/dist/skills/tutticode/references/devices/midivelocity.md +27 -0
- package/dist/skills/tutticode/references/devices/multibanddynamics.md +62 -0
- package/dist/skills/tutticode/references/devices/operator.md +163 -0
- package/dist/skills/tutticode/references/devices/overdrive.md +24 -0
- package/dist/skills/tutticode/references/devices/pedal.md +26 -0
- package/dist/skills/tutticode/references/devices/phaserflanger.md +42 -0
- package/dist/skills/tutticode/references/devices/pitchshifter.md +56 -0
- package/dist/skills/tutticode/references/devices/redux.md +27 -0
- package/dist/skills/tutticode/references/devices/resonator.md +49 -0
- package/dist/skills/tutticode/references/devices/reverb.md +43 -0
- package/dist/skills/tutticode/references/devices/roar.md +70 -0
- package/dist/skills/tutticode/references/devices/sampler.md +228 -0
- package/dist/skills/tutticode/references/devices/saturator.md +24 -0
- package/dist/skills/tutticode/references/devices/simpler.md +230 -0
- package/dist/skills/tutticode/references/devices/sixop.md +190 -0
- package/dist/skills/tutticode/references/devices/spectralresonator.md +42 -0
- package/dist/skills/tutticode/references/devices/spectraltime.md +45 -0
- package/dist/skills/tutticode/references/devices/synth.md +28 -0
- package/dist/skills/tutticode/references/devices/tension.md +117 -0
- package/dist/skills/tutticode/references/devices/utility.md +29 -0
- package/dist/skills/tutticode/references/devices/vinyl.md +31 -0
- package/dist/skills/tutticode/references/devices/vocoder.md +41 -0
- package/dist/skills/tutticode/references/devices/wavetable.md +128 -0
- package/dist/skills/tutticode/references/devices.md +114 -0
- package/dist/skills/tutticode/references/effect-controls.md +145 -0
- package/dist/skills/tutticode/references/first-sounds.md +89 -0
- package/dist/skills/tutticode/references/for-agents.md +119 -0
- package/dist/skills/tutticode/references/functions.md +1848 -0
- package/dist/skills/tutticode/references/getting-started.md +79 -0
- package/dist/skills/tutticode/references/harmony-and-scales.md +105 -0
- package/dist/skills/tutticode/references/javascript.md +90 -0
- package/dist/skills/tutticode/references/melodies-with-do-re-mi.md +59 -0
- package/dist/skills/tutticode/references/mini-notation.md +120 -0
- package/dist/skills/tutticode/references/mixing.md +101 -0
- package/dist/skills/tutticode/references/muse.md +67 -0
- package/dist/skills/tutticode/references/sample-operations.md +102 -0
- package/dist/skills/tutticode/references/sounds.md +109 -0
- package/dist/skills/tutticode/references/time-and-structure.md +161 -0
- package/dist/skills/tutticode/references/tuttidaw-extensions.md +131 -0
- package/dist/skills/tutticode-sound-for-media/SKILL.md +104 -0
- package/dist/skills/tutticode-sound-for-media/references/music-recipes.md +86 -0
- package/dist/skills/tutticode-sound-for-media/references/sfx-recipes.md +129 -0
- package/dist/tutticode.cjs +18746 -0
- package/package.json +39 -4
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Effect controls
|
|
2
|
+
|
|
3
|
+
Filters, reverb, delay, distortion, panning, envelopes and synth controls - and moving them with signals.
|
|
4
|
+
|
|
5
|
+
Controls are methods that shape the sound of every event: `.lpf(800)`,
|
|
6
|
+
`.room(0.4)`. In TuttiDAW each control is played by a real device on the
|
|
7
|
+
voice's track - a filter control adds an Auto Filter, `room` a Reverb - so
|
|
8
|
+
what you hear is what you get when you open the program in the studio.
|
|
9
|
+
|
|
10
|
+
## Filters
|
|
11
|
+
|
|
12
|
+
`.lpf(hz)` is a low-pass filter (it removes highs), `.hpf(hz)` a high-pass
|
|
13
|
+
(it removes lows), `.bpf(hz)` a band-pass. `.lpq(...)` / `.hpq(...)` add
|
|
14
|
+
resonance.
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
note("c2*8").s("sawtooth").lpf("<300 600 1200 2400>").lpq(6)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
s("hh*16").hpf(6000).gain(0.6)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`.vowel("a e i o u")` is a formant filter that makes a sound talk.
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
note("c2*4").s("sawtooth").vowel("<a e i o>")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Space: room and delay
|
|
31
|
+
|
|
32
|
+
`.room(amount)` sends the voice into a reverb; `.size(...)` makes the room
|
|
33
|
+
bigger. `.delay(amount)` adds an echo, with `.delaytime(cycles)` and
|
|
34
|
+
`.delayfeedback(0..1)`.
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
s("~ cp ~ cp").room(0.6).size(4)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
note("<c4 eb4> ~ ~ ~").s("triangle").delay(0.5).delaytime(3/16).delayfeedback(0.55)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Drive and lo-fi
|
|
45
|
+
|
|
46
|
+
`.shape(0..1)` and `.distort(...)` add drive; `.crush(bits)` reduces the bit
|
|
47
|
+
depth (lower is crunchier) and `.coarse(n)` the sample rate.
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
s("bd*4, ~ sd").shape(0.5)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
note("c3 eb3 g3 bb3").s("square").crush(5)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Level and stereo
|
|
58
|
+
|
|
59
|
+
`.gain(...)` is the level into the effects, `.postgain(...)` after them.
|
|
60
|
+
`.pan(0..1)` places the voice from left (0) to right (1).
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
s("hh*8").pan("0 1 0.25 0.75").gain(0.7)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Modulation effects
|
|
67
|
+
|
|
68
|
+
`.phaser(rate)` and `.chorus(amount)` add movement; `.compressor(...)`
|
|
69
|
+
evens out the level.
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
note("[c3,g3,bb3]*2").s("sawtooth").phaser(1).lpf(1800)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Envelopes
|
|
76
|
+
|
|
77
|
+
`.attack`, `.decay`, `.sustain` and `.release` shape each note's volume, in
|
|
78
|
+
seconds (sustain is a level, 0 to 1). A slow attack and long release make a
|
|
79
|
+
pad; a short decay with no sustain makes a pluck.
|
|
80
|
+
|
|
81
|
+
```js
|
|
82
|
+
note("<[c3,eb3,g3] [bb2,d3,f3]>").s("sawtooth").attack(0.4).release(1).lpf(1500)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
note("c4 g4 eb4 g4").s("square").decay(0.12).sustain(0)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Synth controls
|
|
90
|
+
|
|
91
|
+
These play on the TuttiDAW synth that stands in for the waveform:
|
|
92
|
+
|
|
93
|
+
- `.lpenv(depth)` with `.lpattack` / `.lpdecay` / `.lpsustain` / `.lprelease`:
|
|
94
|
+
an envelope on the filter cutoff;
|
|
95
|
+
- `.fm(index)` with `.fmh(ratio)` and `.fmdecay(...)`: FM brightness (the
|
|
96
|
+
voice moves onto Operator);
|
|
97
|
+
- `.penv(semitones)` with `.pdecay(...)`: a pitch sweep, good for kicks and
|
|
98
|
+
zaps;
|
|
99
|
+
- `.vib(rate)` with `.vibmod(semitones)`: vibrato;
|
|
100
|
+
- `.detune(...)` and `.unison(voices)` on `supersaw`.
|
|
101
|
+
|
|
102
|
+
```js
|
|
103
|
+
note("c2 ~ c2 [~ c3]").s("sawtooth").lpf(250).lpenv(4).lpdecay(0.15).lpsustain(0)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
note("c3 e3 g3 c4").s("sine").fm(3).fmh(2).fmdecay(0.3)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```js
|
|
111
|
+
note("c2*4").s("sine").penv(24).pdecay(0.08)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Each of these is an approximation of Strudel's synth on a TuttiDAW
|
|
115
|
+
instrument; the diagnostics list say which device plays it.
|
|
116
|
+
|
|
117
|
+
## Moving values: signals
|
|
118
|
+
|
|
119
|
+
A **signal** is a value that moves continuously through the cycle. `sine`,
|
|
120
|
+
`cosine`, `saw`, `tri` and `square` go from 0 to 1; `perlin` and `rand`
|
|
121
|
+
move smoothly or randomly. `.range(min, max)` scales a signal, `.slow(n)`
|
|
122
|
+
stretches it over `n` cycles.
|
|
123
|
+
|
|
124
|
+
```js
|
|
125
|
+
note("c2*16").s("sawtooth").lpf(sine.range(300, 3000).slow(4))
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```js
|
|
129
|
+
s("hh*16").gain(perlin.range(0.3, 0.9))
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`.segment(n)` samples a signal `n` times per cycle, which turns it into
|
|
133
|
+
notes:
|
|
134
|
+
|
|
135
|
+
```js
|
|
136
|
+
n(saw.range(0, 8).segment(8)).scale("C:minor")
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## In the studio: automation
|
|
140
|
+
|
|
141
|
+
When you **Open in TuttiDAW**, a control that changes over time - a pattern
|
|
142
|
+
like `"<300 600>"` or a signal - becomes a clip envelope on the device
|
|
143
|
+
parameter, so you can see and edit the movement like any other automation.
|
|
144
|
+
|
|
145
|
+
Source: https://tuttidaw.com/code/learn/effect-controls
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# First sounds
|
|
2
|
+
|
|
3
|
+
Drums with s(), pitches with note(), and the difference between them.
|
|
4
|
+
|
|
5
|
+
There are two ways to make a voice sound: name a **sound** with `s(...)`, or
|
|
6
|
+
play **pitches** with `note(...)`.
|
|
7
|
+
|
|
8
|
+
## Drums with s()
|
|
9
|
+
|
|
10
|
+
`s` (or its long name `sound`) picks sounds by name. Short names stand for
|
|
11
|
+
the parts of a drum kit:
|
|
12
|
+
|
|
13
|
+
| Name | Sound | Name | Sound |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| `bd` | bass drum | `oh` | open hi-hat |
|
|
16
|
+
| `sd` | snare | `cr` | crash |
|
|
17
|
+
| `rim` | rimshot | `rd` | ride |
|
|
18
|
+
| `cp` | clap | `ht` `mt` `lt` | high, mid, low tom |
|
|
19
|
+
| `hh` | closed hi-hat | `sh` `cb` | shaker, cowbell |
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
s("bd hh sd hh")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
A comma inside the quotes plays two rows at the same time:
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
s("bd ~ sd ~, hh hh hh hh hh hh hh hh")
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`~` is a rest: the step is there, but nothing plays.
|
|
32
|
+
|
|
33
|
+
## Choosing a drum machine
|
|
34
|
+
|
|
35
|
+
`.bank(...)` picks the drum machine the names play on. TuttiDAW maps the
|
|
36
|
+
classic machines to its factory kits: `tr808`, `tr909`, `tr707`, `tr606`,
|
|
37
|
+
`tr505`, `linn`, `dmx` and `cr78` (Strudel's long names such as
|
|
38
|
+
`RolandTR909` work too).
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
s("bd*2 [~ bd] sd ~, hh*8").bank("tr909")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Pitches with note()
|
|
45
|
+
|
|
46
|
+
`note` plays pitches. Write note names (`c`, `d`, `eb`, `f#`) with an octave
|
|
47
|
+
number, or MIDI numbers.
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
note("c3 eb3 g3 bb3")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
note("48 51 55 58")
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Both lines play the same four notes. In code, `c4` is MIDI 60 (middle C).
|
|
58
|
+
TuttiDAW's piano roll, like Ableton Live, labels MIDI 60 as **C3**, so a
|
|
59
|
+
note written `c4` in code shows as C3 in the clip.
|
|
60
|
+
|
|
61
|
+
## Giving notes a sound
|
|
62
|
+
|
|
63
|
+
A `note` voice without a sound plays a simple synth. Add `.s(...)` to pick
|
|
64
|
+
another one: the basic waveforms `sine`, `triangle`, `square`, `sawtooth`, or
|
|
65
|
+
an instrument name such as `piano`.
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
note("c3 e3 g3 b3").s("sawtooth")
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
note("c4 e4 g4 c5").s("piano")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The [Sounds](sounds.md) chapter lists the instruments you can name, and
|
|
76
|
+
[TuttiDAW extensions](tuttidaw-extensions.md) shows how to load any TuttiDAW
|
|
77
|
+
instrument with its presets.
|
|
78
|
+
|
|
79
|
+
## Volume and velocity
|
|
80
|
+
|
|
81
|
+
`.gain(...)` sets the loudness of a voice. `.velocity(...)` (0 to 1) sets how
|
|
82
|
+
hard each note is played, as a MIDI velocity: it is kept when you freeze code
|
|
83
|
+
to MIDI.
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
s("hh*8").gain(0.5).velocity("1 0.6 0.8 0.6")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Source: https://tuttidaw.com/code/learn/first-sounds
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# TuttiCode for agents
|
|
2
|
+
|
|
3
|
+
Let Claude Code, Copilot, Codex or any MCP client write TuttiCode and render it to audio files in your own browser, with the tutticode CLI, MCP server and skills.
|
|
4
|
+
|
|
5
|
+
AI agents can write TuttiCode as well as you can, but they cannot hear it.
|
|
6
|
+
**tutticode** gives them ears and a mixing desk: a command-line tool and an
|
|
7
|
+
MCP server that check a program, render it to WAV, FLAC or MP3 with the
|
|
8
|
+
same engine as this page, and measure the result (loudness, peaks, balance,
|
|
9
|
+
groove) so the agent can fix what it cannot hear. Two skills teach agents
|
|
10
|
+
the language and how to make sound for videos, apps and games.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
You need Node 20 or newer and Google Chrome or Microsoft Edge.
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm i -g tutticode
|
|
18
|
+
tutticode skills install
|
|
19
|
+
tutticode doctor
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`skills install` copies the two skills, `tutticode` (the language) and
|
|
23
|
+
`tutticode-sound-for-media` (music beds, loops and sound effects at the
|
|
24
|
+
right length and loudness), into the skill folders of Claude Code
|
|
25
|
+
(`~/.claude/skills`), Copilot CLI (`~/.copilot/skills`) and Codex
|
|
26
|
+
(`~/.codex/skills`): every one that exists on your computer, or the ones
|
|
27
|
+
you name with `--claude`, `--copilot`, `--codex`, or any folder with
|
|
28
|
+
`--dir <path>`.
|
|
29
|
+
|
|
30
|
+
For MCP clients, add the server, for example in Claude Code:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
claude mcp add tutticode -- tutticode mcp
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Two backends, one API
|
|
37
|
+
|
|
38
|
+
The tools have the same names everywhere: `code_check` (compile, no
|
|
39
|
+
audio), `code_render` (render and measure) and `code_compare` (compare with
|
|
40
|
+
a target or an earlier render). Only where the audio is made differs:
|
|
41
|
+
|
|
42
|
+
- **tutticode on your computer** (the default): renders in your own browser
|
|
43
|
+
and writes the files to your disk. Free, no account, up to 5 minutes of
|
|
44
|
+
audio per render. It also offers `code_open` (open a program here for you to hear)
|
|
45
|
+
and `code_reference` (search the language reference).
|
|
46
|
+
- **TuttiDAW's web MCP** (`https://tuttidaw.com/api/mcp`) and the HTTP API
|
|
47
|
+
(`/api/code/check`, `/api/code/render`, `/api/code/compare`): for agents
|
|
48
|
+
that cannot run programs on your computer. Renders on our servers, needs
|
|
49
|
+
you to be signed in, costs Muse points, at most 60 seconds, and returns a
|
|
50
|
+
link to listen to instead of files.
|
|
51
|
+
|
|
52
|
+
## Example: a riser for a video
|
|
53
|
+
|
|
54
|
+
1. Ask your agent: "Make a 4 second riser for the start of my video,
|
|
55
|
+
normalised for YouTube, and save it as riser.wav."
|
|
56
|
+
2. The agent picks the riser recipe from the media skill, writes the
|
|
57
|
+
program and runs `code_check` until it has no errors:
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
setcpm(15) // one bar = 4 s
|
|
61
|
+
cymbal: note("c4").s("gm_reverse_cymbal").gain(0.9)
|
|
62
|
+
sweep: note("c3").s("sawtooth").penv(24).pattack(4).attack(3.5).release(0.1).lpf(2000).gain(0.4)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
3. It renders the file and reads the numbers before it hands it over:
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
tutticode render riser.tc -o riser.wav --seconds 4 --lufs -18 --json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
You get `riser.wav`, its loudness and true peak, and an `editUrl` that
|
|
72
|
+
opens the program here, so you can listen, change it and render it again
|
|
73
|
+
yourself. Press play above to hear what the agent made.
|
|
74
|
+
|
|
75
|
+
## Privacy
|
|
76
|
+
|
|
77
|
+
tutticode renders on your computer: the program goes from the agent to the
|
|
78
|
+
TuttiCode page in your own browser and nowhere else. The bridge sends no
|
|
79
|
+
program code and no audio to our servers, and tutticode sends no telemetry.
|
|
80
|
+
Its logs stay in `~/.tutticode/logs` and never contain your programs or
|
|
81
|
+
audio. The page itself loads from tuttidaw.com like any web page, with its
|
|
82
|
+
instruments and samples. The web MCP is different: there the program is
|
|
83
|
+
sent to TuttiDAW to be rendered.
|
|
84
|
+
|
|
85
|
+
## The browser permission
|
|
86
|
+
|
|
87
|
+
The TuttiCode page talks to tutticode over your own computer
|
|
88
|
+
(`127.0.0.1`), which Chrome and Edge treat as your local network:
|
|
89
|
+
|
|
90
|
+
- By default tutticode starts a hidden browser with its own profile and
|
|
91
|
+
allows this for tuttidaw.com only; you see nothing.
|
|
92
|
+
- With `--show` (the default when you type a command yourself) it uses a
|
|
93
|
+
tab in your normal browser. The first time, the page asks whether this
|
|
94
|
+
agent may render sound with TuttiCode, and the browser asks whether
|
|
95
|
+
tuttidaw.com may access devices on your local network: allow both.
|
|
96
|
+
- `tutticode setup` (optional) explains, asks, and then sets one browser
|
|
97
|
+
policy for your user so that the second question does not come back:
|
|
98
|
+
local network access for `https://tuttidaw.com` only.
|
|
99
|
+
`tutticode setup --undo` removes exactly that entry.
|
|
100
|
+
|
|
101
|
+
## Troubleshooting
|
|
102
|
+
|
|
103
|
+
Run `tutticode doctor` first: it checks Node, the browser, the page, the
|
|
104
|
+
connection and the engine version, and says what to fix.
|
|
105
|
+
|
|
106
|
+
- **No browser found**: install Chrome or Edge, or point tutticode at one
|
|
107
|
+
with `--browser <path>` or the `TUTTICODE_BROWSER` variable.
|
|
108
|
+
- **The page never connects** (exit code 2): allow the local network
|
|
109
|
+
question in the browser (or run `tutticode setup`), and check that no
|
|
110
|
+
extension or company policy blocks tuttidaw.com.
|
|
111
|
+
- **Errors in the code** (exit code 1): the report lists each one with its
|
|
112
|
+
line, column and a fix; the agent should run `code_check` until it is
|
|
113
|
+
clean.
|
|
114
|
+
- **`clip`**: the loudness asked for would push the peaks past -1 dBTP.
|
|
115
|
+
Ask for a lower `--lufs`, or turn down the loudest voice.
|
|
116
|
+
- **A render that runs too long**: give it more time with `--timeout`, or
|
|
117
|
+
render fewer loops.
|
|
118
|
+
|
|
119
|
+
Source: https://tuttidaw.com/code/learn/for-agents
|