diff --git a/packages/core/src/audioFxCopy.ts b/packages/core/src/audioFxCopy.ts index f466540dc6..cc3a775943 100644 --- a/packages/core/src/audioFxCopy.ts +++ b/packages/core/src/audioFxCopy.ts @@ -339,6 +339,9 @@ export const PRESET_PROBLEM: Record = { "pa-system": "Make it sound like a station announcement", intercom: "Make it sound like a door intercom", "doofus-worble": "Make it wobble like it is seasick", + chipmunk: "Make it small and squeaky", + giant: "Make it huge and deep", + monster: "Make it a monster", "room-tight": "It sounds dry and stuck to the speaker", "room-natural": "It should sound like a real place", hall: "It should sound far away and big", diff --git a/packages/core/src/audioFxPresets.ts b/packages/core/src/audioFxPresets.ts index 0a20738a15..2eb36f1f9e 100644 --- a/packages/core/src/audioFxPresets.ts +++ b/packages/core/src/audioFxPresets.ts @@ -333,6 +333,28 @@ export const HF_AUDIO_FX_PRESETS: readonly HfAudioFxPreset[] = [ }, ], ), + preset("chipmunk", "character", "Chipmunk", "Small, fast and squeaky.", [ + { type: "pitchshift", label: "Up High", params: { semitones: 7, mix: 1 } }, + { type: "highshelf", label: "Extra Sparkle", params: { frequency: 4000, gain: 3 } }, + ]), + preset("giant", "character", "Giant", "Huge, slow and deep.", [ + { type: "pitchshift", label: "Down Low", params: { semitones: -5, mix: 1 } }, + { type: "lowshelf", label: "Add Weight", params: { frequency: 150, gain: 4 } }, + { + type: "compressor", + label: "Hold It Together", + params: { threshold: -18, ratio: 3, attack: 10, release: 120, knee: 6, makeup: 2, mix: 1 }, + }, + ]), + preset("monster", "character", "Monster", "Deep, rough and too close.", [ + { type: "pitchshift", label: "Down Low", params: { semitones: -8, mix: 1 } }, + { type: "saturate", label: "Growl", params: { type: "tanh", threshold: -12, output: -1 } }, + { + type: "reverb", + label: "Right Behind You", + params: { size: 0.3, damping: 0.5, wet: 0.22, dry: 0.85 }, + }, + ]), // ---------------------------------------------------------------- space -- preset("room-tight", "space", "Tight Room", "A small hard room — presence without wash.", [ diff --git a/packages/studio/src/components/editor/propertyPanelFxPresetStyle.ts b/packages/studio/src/components/editor/propertyPanelFxPresetStyle.ts index 8129bba09f..72169ac036 100644 --- a/packages/studio/src/components/editor/propertyPanelFxPresetStyle.ts +++ b/packages/studio/src/components/editor/propertyPanelFxPresetStyle.ts @@ -150,6 +150,24 @@ export const FX_PRESET_STYLE: Record = { color: "hsl(288, 85%, 72%)", family: FACE.theatrical, }, + // Small, fast and squeaky — tight and bright, nothing about it sits still. + chipmunk: { + type: "text-[12px] font-black uppercase tracking-tighter", + color: "hsl(54, 88%, 66%)", + family: FACE.geometric, + }, + // Huge and slow — the biggest size here, set on a face bolted to a monument. + giant: { + type: "text-[18px] font-black tracking-[0.02em]", + color: "hsl(250, 72%, 68%)", + family: FACE.engraved, + }, + // Rough and too close — heavy industrial caps, growled rather than shouted. + monster: { + type: "text-[15px] font-black uppercase tracking-[0.05em]", + color: "hsl(350, 78%, 64%)", + family: FACE.condensed, + }, // --- space: rooms. Light and wide, because that is what space looks like --- "room-tight": { diff --git a/plans/audio-fx-presets.md b/plans/audio-fx-presets.md index f13c63d79b..7b603e69dc 100644 --- a/plans/audio-fx-presets.md +++ b/plans/audio-fx-presets.md @@ -88,7 +88,10 @@ These are ordinary filter + saturation + bitcrush recipes and we can do all of them. **The character half of CapCut's list we cannot do**: Chipmunk, Deep Voice, Robot, Alien, Monster, Elf — every one of those is pitch, formant or ring modulation, and the registry has no pitch shifter, no time-stretch and no -ring mod. Out of scope unless a new effect is added. +ring mod. Out of scope unless a new effect is added. **Update (2026-08-14, +PR #3276/#3277):** a pitch shifter landed, and Chipmunk, Giant, and Monster now +ship as presets; Robot and Alien are still out of scope (they need ring +modulation, which the registry still does not have). --- @@ -112,7 +115,9 @@ Plus two force multipliers the catalog depends on: **Hard limits, stated once:** no noise reduction, no de-reverberation, no pitch or formant shift, no time-stretch, no spectral repair, no stereo widening beyond `chorus`, no true multiband compression (though stacked peaking + a -`mix`-blended compressor approximates it). +`mix`-blended compressor approximates it). **Update (2026-08-14, PR +#3276):** pitch shift landed as a worklet effect — the "no pitch or formant +shift" limit above is now half-lifted (pitch, still no formant shift). ---