[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADV6JPD6RFRQVCQA14E0PW":3,"skill-same:01M6ADV6JPD6RFRQVCQA14E0PW":98},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":63,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6ADV6JPD6RFRQVCQA14E0PW","multimodal-audiocraft",null,"PyTorch library for audio generation including text-to-music (MusicGen) and text-to-sound (AudioGen). Use when you need to generate music from text descriptions, create sound effects, or perform melody-conditioned music generation.","davila7\u002Fclaude-code-templates","davila7","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6216945?v=4","01M6ADEWWFPS191NFM0Y1EX1JH","Daniel Avila","01M6ADJHGM78PHQRD3XZTFDVKK",33481,"MIT","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fmultimodal-audiocraft\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"multimodal","multimodal audiocraft","audiocraft","text","when","effects","audiogen","you","music generation","MusicGen","Text-to-Audio","Text-to-Music","Audio Generation","research","music","Audio","Transformers","library","generate","create","pytorch","2026-11-10 10:12:30",false,"---\nname: multimodal-audiocraft\ndescription: PyTorch library for audio generation including text-to-music (MusicGen) and text-to-sound (AudioGen). Use when you need to generate music from text descriptions, create sound effects, or perform melody-conditioned music generation.\nlicense: MIT\nmetadata:\n  version: 1.0.0\n  author: Orchestra Research\n  tags: [Multimodal, Audio Generation, Text-to-Music, Text-to-Audio, MusicGen]\n  dependencies: [audiocraft, torch>=2.0.0, transformers>=4.30.0]\n---\n\n# AudioCraft: Audio Generation\n\nComprehensive guide to using Meta's AudioCraft for text-to-music and text-to-audio generation with MusicGen, AudioGen, and EnCodec.\n\n## When to use AudioCraft\n\n**Use AudioCraft when:**\n- Need to generate music from text descriptions\n- Creating sound effects and environmental audio\n- Building music generation applications\n- Need melody-conditioned music generation\n- Want stereo audio output\n- Require controllable music generation with style transfer\n\n**Key features:**\n- **MusicGen**: Text-to-music generation with melody conditioning\n- **AudioGen**: Text-to-sound effects generation\n- **EnCodec**: High-fidelity neural audio codec\n- **Multiple model sizes**: Small (300M) to Large (3.3B)\n- **Stereo support**: Full stereo audio generation\n- **Style conditioning**: MusicGen-Style for reference-based generation\n\n**Use alternatives instead:**\n- **Stable Audio**: For longer commercial music generation\n- **Bark**: For text-to-speech with music\u002Fsound effects\n- **Riffusion**: For spectogram-based music generation\n- **OpenAI Jukebox**: For raw audio generation with lyrics\n\n## Quick start\n\n### Installation\n\n```bash\n# From PyPI\npip install audiocraft\n\n# From GitHub (latest)\npip install git+https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Faudiocraft.git\n\n# Or use HuggingFace Transformers\npip install transformers torch torchaudio\n```\n\n### Basic text-to-music (AudioCraft)\n\n```python\nimport torchaudio\nfrom audiocraft.models import MusicGen\n\n# Load model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-small')\n\n# Set generation parameters\nmodel.set_generation_params(\n    duration=8,  # seconds\n    top_k=250,\n    temperature=1.0\n)\n\n# Generate from text\ndescriptions = [\"happy upbeat electronic dance music with synths\"]\nwav = model.generate(descriptions)\n\n# Save audio\ntorchaudio.save(\"output.wav\", wav[0].cpu(), sample_rate=32000)\n```\n\n### Using HuggingFace Transformers\n\n```python\nfrom transformers import AutoProcessor, MusicgenForConditionalGeneration\nimport scipy\n\n# Load model and processor\nprocessor = AutoProcessor.from_pretrained(\"facebook\u002Fmusicgen-small\")\nmodel = MusicgenForConditionalGeneration.from_pretrained(\"facebook\u002Fmusicgen-small\")\nmodel.to(\"cuda\")\n\n# Generate music\ninputs = processor(\n    text=[\"80s pop track with bassy drums and synth\"],\n    padding=True,\n    return_tensors=\"pt\"\n).to(\"cuda\")\n\naudio_values = model.generate(\n    **inputs,\n    do_sample=True,\n    guidance_scale=3,\n    max_new_tokens=256\n)\n\n# Save\nsampling_rate = model.config.audio_encoder.sampling_rate\nscipy.io.wavfile.write(\"output.wav\", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())\n```\n\n### Text-to-sound with AudioGen\n\n```python\nfrom audiocraft.models import AudioGen\n\n# Load AudioGen\nmodel = AudioGen.get_pretrained('facebook\u002Faudiogen-medium')\n\nmodel.set_generation_params(duration=5)\n\n# Generate sound effects\ndescriptions = [\"dog barking in a park with birds chirping\"]\nwav = model.generate(descriptions)\n\ntorchaudio.save(\"sound.wav\", wav[0].cpu(), sample_rate=16000)\n```\n\n## Core concepts\n\n### Architecture overview\n\n```\nAudioCraft Architecture:\n┌──────────────────────────────────────────────────────────────┐\n│                    Text Encoder (T5)                          │\n│                         │                                     │\n│                    Text Embeddings                            │\n└────────────────────────┬─────────────────────────────────────┘\n                         │\n┌────────────────────────▼─────────────────────────────────────┐\n│              Transformer Decoder (LM)                         │\n│     Auto-regressively generates audio tokens                  │\n│     Using efficient token interleaving patterns               │\n└────────────────────────┬─────────────────────────────────────┘\n                         │\n┌────────────────────────▼─────────────────────────────────────┐\n│                EnCodec Audio Decoder                          │\n│        Converts tokens back to audio waveform                 │\n└──────────────────────────────────────────────────────────────┘\n```\n\n### Model variants\n\n| Model | Size | Description | Use Case |\n|-------|------|-------------|----------|\n| `musicgen-small` | 300M | Text-to-music | Quick generation |\n| `musicgen-medium` | 1.5B | Text-to-music | Balanced |\n| `musicgen-large` | 3.3B | Text-to-music | Best quality |\n| `musicgen-melody` | 1.5B | Text + melody | Melody conditioning |\n| `musicgen-melody-large` | 3.3B | Text + melody | Best melody |\n| `musicgen-stereo-*` | Varies | Stereo output | Stereo generation |\n| `musicgen-style` | 1.5B | Style transfer | Reference-based |\n| `audiogen-medium` | 1.5B | Text-to-sound | Sound effects |\n\n### Generation parameters\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `duration` | 8.0 | Length in seconds (1-120) |\n| `top_k` | 250 | Top-k sampling |\n| `top_p` | 0.0 | Nucleus sampling (0 = disabled) |\n| `temperature` | 1.0 | Sampling temperature |\n| `cfg_coef` | 3.0 | Classifier-free guidance |\n\n## MusicGen usage\n\n### Text-to-music generation\n\n```python\nfrom audiocraft.models import MusicGen\nimport torchaudio\n\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-medium')\n\n# Configure generation\nmodel.set_generation_params(\n    duration=30,          # Up to 30 seconds\n    top_k=250,            # Sampling diversity\n    top_p=0.0,            # 0 = use top_k only\n    temperature=1.0,      # Creativity (higher = more varied)\n    cfg_coef=3.0          # Text adherence (higher = stricter)\n)\n\n# Generate multiple samples\ndescriptions = [\n    \"epic orchestral soundtrack with strings and brass\",\n    \"chill lo-fi hip hop beat with jazzy piano\",\n    \"energetic rock song with electric guitar\"\n]\n\n# Generate (returns [batch, channels, samples])\nwav = model.generate(descriptions)\n\n# Save each\nfor i, audio in enumerate(wav):\n    torchaudio.save(f\"music_{i}.wav\", audio.cpu(), sample_rate=32000)\n```\n\n### Melody-conditioned generation\n\n```python\nfrom audiocraft.models import MusicGen\nimport torchaudio\n\n# Load melody model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-melody')\nmodel.set_generation_params(duration=30)\n\n# Load melody audio\nmelody, sr = torchaudio.load(\"melody.wav\")\n\n# Generate with melody conditioning\ndescriptions = [\"acoustic guitar folk song\"]\nwav = model.generate_with_chroma(descriptions, melody, sr)\n\ntorchaudio.save(\"melody_conditioned.wav\", wav[0].cpu(), sample_rate=32000)\n```\n\n### Stereo generation\n\n```python\nfrom audiocraft.models import MusicGen\n\n# Load stereo model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-stereo-medium')\nmodel.set_generation_params(duration=15)\n\ndescriptions = [\"ambient electronic music with wide stereo panning\"]\nwav = model.generate(descriptions)\n\n# wav shape: [batch, 2, samples] for stereo\nprint(f\"Stereo shape: {wav.shape}\")  # [1, 2, 480000]\ntorchaudio.save(\"stereo.wav\", wav[0].cpu(), sample_rate=32000)\n```\n\n### Audio continuation\n\n```python\nfrom transformers import AutoProcessor, MusicgenForConditionalGeneration\n\nprocessor = AutoProcessor.from_pretrained(\"facebook\u002Fmusicgen-medium\")\nmodel = MusicgenForConditionalGeneration.from_pretrained(\"facebook\u002Fmusicgen-medium\")\n\n# Load audio to continue\nimport torchaudio\naudio, sr = torchaudio.load(\"intro.wav\")\n\n# Process with text and audio\ninputs = processor(\n    audio=audio.squeeze().numpy(),\n    sampling_rate=sr,\n    text=[\"continue with a epic chorus\"],\n    padding=True,\n    return_tensors=\"pt\"\n)\n\n# Generate continuation\naudio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=512)\n```\n\n## MusicGen-Style usage\n\n### Style-conditioned generation\n\n```python\nfrom audiocraft.models import MusicGen\n\n# Load style model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-style')\n\n# Configure generation with style\nmodel.set_generation_params(\n    duration=30,\n    cfg_coef=3.0,\n    cfg_coef_beta=5.0  # Style influence\n)\n\n# Configure style conditioner\nmodel.set_style_conditioner_params(\n    eval_q=3,          # RVQ quantizers (1-6)\n    excerpt_length=3.0  # Style excerpt length\n)\n\n# Load style reference\nstyle_audio, sr = torchaudio.load(\"reference_style.wav\")\n\n# Generate with text + style\ndescriptions = [\"upbeat dance track\"]\nwav = model.generate_with_style(descriptions, style_audio, sr)\n```\n\n### Style-only generation (no text)\n\n```python\n# Generate matching style without text prompt\nmodel.set_generation_params(\n    duration=30,\n    cfg_coef=3.0,\n    cfg_coef_beta=None  # Disable double CFG for style-only\n)\n\nwav = model.generate_with_style([None], style_audio, sr)\n```\n\n## AudioGen usage\n\n### Sound effect generation\n\n```python\nfrom audiocraft.models import AudioGen\nimport torchaudio\n\nmodel = AudioGen.get_pretrained('facebook\u002Faudiogen-medium')\nmodel.set_generation_params(duration=10)\n\n# Generate various sounds\ndescriptions = [\n    \"thunderstorm with heavy rain and lightning\",\n    \"busy city traffic with car horns\",\n    \"ocean waves crashing on rocks\",\n    \"crackling campfire in forest\"\n]\n\nwav = model.generate(descriptions)\n\nfor i, audio in enumerate(wav):\n    torchaudio.save(f\"sound_{i}.wav\", audio.cpu(), sample_rate=16000)\n```\n\n## EnCodec usage\n\n### Audio compression\n\n```python\nfrom audiocraft.models import CompressionModel\nimport torch\nimport torchaudio\n\n# Load EnCodec\nmodel = CompressionModel.get_pretrained('facebook\u002Fencodec_32khz')\n\n# Load audio\nwav, sr = torchaudio.load(\"audio.wav\")\n\n# Ensure correct sample rate\nif sr != 32000:\n    resampler = torchaudio.transforms.Resample(sr, 32000)\n    wav = resampler(wav)\n\n# Encode to tokens\nwith torch.no_grad():\n    encoded = model.encode(wav.unsqueeze(0))\n    codes = encoded[0]  # Audio codes\n\n# Decode back to audio\nwith torch.no_grad():\n    decoded = model.decode(codes)\n\ntorchaudio.save(\"reconstructed.wav\", decoded[0].cpu(), sample_rate=32000)\n```\n\n## Common workflows\n\n### Workflow 1: Music generation pipeline\n\n```python\nimport torch\nimport torchaudio\nfrom audiocraft.models import MusicGen\n\nclass MusicGenerator:\n    def __init__(self, model_name=\"facebook\u002Fmusicgen-medium\"):\n        self.model = MusicGen.get_pretrained(model_name)\n        self.sample_rate = 32000\n\n    def generate(self, prompt, duration=30, temperature=1.0, cfg=3.0):\n        self.model.set_generation_params(\n            duration=duration,\n            top_k=250,\n            temperature=temperature,\n            cfg_coef=cfg\n        )\n\n        with torch.no_grad():\n            wav = self.model.generate([prompt])\n\n        return wav[0].cpu()\n\n    def generate_batch(self, prompts, duration=30):\n        self.model.set_generation_params(duration=duration)\n\n        with torch.no_grad():\n            wav = self.model.generate(prompts)\n\n        return wav.cpu()\n\n    def save(self, audio, path):\n        torchaudio.save(path, audio, sample_rate=self.sample_rate)\n\n# Usage\ngenerator = MusicGenerator()\naudio = generator.generate(\n    \"epic cinematic orchestral music\",\n    duration=30,\n    temperature=1.0\n)\ngenerator.save(audio, \"epic_music.wav\")\n```\n\n### Workflow 2: Sound design batch processing\n\n```python\nimport json\nfrom pathlib import Path\nfrom audiocraft.models import AudioGen\nimport torchaudio\n\ndef batch_generate_sounds(sound_specs, output_dir):\n    \"\"\"\n    Generate multiple sounds from specifications.\n\n    Args:\n        sound_specs: list of {\"name\": str, \"description\": str, \"duration\": float}\n        output_dir: output directory path\n    \"\"\"\n    model = AudioGen.get_pretrained('facebook\u002Faudiogen-medium')\n    output_dir = Path(output_dir)\n    output_dir.mkdir(exist_ok=True)\n\n    results = []\n\n    for spec in sound_specs:\n        model.set_generation_params(duration=spec.get(\"duration\", 5))\n\n        wav = model.generate([spec[\"description\"]])\n\n        output_path = output_dir \u002F f\"{spec['name']}.wav\"\n        torchaudio.save(str(output_path), wav[0].cpu(), sample_rate=16000)\n\n        results.append({\n            \"name\": spec[\"name\"],\n            \"path\": str(output_path),\n            \"description\": spec[\"description\"]\n        })\n\n    return results\n\n# Usage\nsounds = [\n    {\"name\": \"explosion\", \"description\": \"massive explosion with debris\", \"duration\": 3},\n    {\"name\": \"footsteps\", \"description\": \"footsteps on wooden floor\", \"duration\": 5},\n    {\"name\": \"door\", \"description\": \"wooden door creaking and closing\", \"duration\": 2}\n]\n\nresults = batch_generate_sounds(sounds, \"sound_effects\u002F\")\n```\n\n### Workflow 3: Gradio demo\n\n```python\nimport gradio as gr\nimport torch\nimport torchaudio\nfrom audiocraft.models import MusicGen\n\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-small')\n\ndef generate_music(prompt, duration, temperature, cfg_coef):\n    model.set_generation_params(\n        duration=duration,\n        temperature=temperature,\n        cfg_coef=cfg_coef\n    )\n\n    with torch.no_grad():\n        wav = model.generate([prompt])\n\n    # Save to temp file\n    path = \"temp_output.wav\"\n    torchaudio.save(path, wav[0].cpu(), sample_rate=32000)\n    return path\n\ndemo = gr.Interface(\n    fn=generate_music,\n    inputs=[\n        gr.Textbox(label=\"Music Description\", placeholder=\"upbeat electronic dance music\"),\n        gr.Slider(1, 30, value=8, label=\"Duration (seconds)\"),\n        gr.Slider(0.5, 2.0, value=1.0, label=\"Temperature\"),\n        gr.Slider(1.0, 10.0, value=3.0, label=\"CFG Coefficient\")\n    ],\n    outputs=gr.Audio(label=\"Generated Music\"),\n    title=\"MusicGen Demo\"\n)\n\ndemo.launch()\n```\n\n## Performance optimization\n\n### Memory optimization\n\n```python\n# Use smaller model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-small')\n\n# Clear cache between generations\ntorch.cuda.empty_cache()\n\n# Generate shorter durations\nmodel.set_generation_params(duration=10)  # Instead of 30\n\n# Use half precision\nmodel = model.half()\n```\n\n### Batch processing efficiency\n\n```python\n# Process multiple prompts at once (more efficient)\ndescriptions = [\"prompt1\", \"prompt2\", \"prompt3\", \"prompt4\"]\nwav = model.generate(descriptions)  # Single batch\n\n# Instead of\nfor desc in descriptions:\n    wav = model.generate([desc])  # Multiple batches (slower)\n```\n\n### GPU memory requirements\n\n| Model | FP32 VRAM | FP16 VRAM |\n|-------|-----------|-----------|\n| musicgen-small | ~4GB | ~2GB |\n| musicgen-medium | ~8GB | ~4GB |\n| musicgen-large | ~16GB | ~8GB |\n\n## Common issues\n\n| Issue | Solution |\n|-------|----------|\n| CUDA OOM | Use smaller model, reduce duration |\n| Poor quality | Increase cfg_coef, better prompts |\n| Generation too short | Check max duration setting |\n| Audio artifacts | Try different temperature |\n| Stereo not working | Use stereo model variant |\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Training, fine-tuning, deployment\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues and solutions\n\n## Resources\n\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Faudiocraft\n- **Paper (MusicGen)**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2306.05284\n- **Paper (AudioGen)**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2209.15352\n- **HuggingFace**: https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002Fmusicgen-small\n- **Demo**: https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Ffacebook\u002FMusicGen\n","# AudioCraft: Audio Generation\n\nComprehensive guide to using Meta's AudioCraft for text-to-music and text-to-audio generation with MusicGen, AudioGen, and EnCodec.\n\n## When to use AudioCraft\n\n**Use AudioCraft when:**\n- Need to generate music from text descriptions\n- Creating sound effects and environmental audio\n- Building music generation applications\n- Need melody-conditioned music generation\n- Want stereo audio output\n- Require controllable music generation with style transfer\n\n**Key features:**\n- **MusicGen**: Text-to-music generation with melody conditioning\n- **AudioGen**: Text-to-sound effects generation\n- **EnCodec**: High-fidelity neural audio codec\n- **Multiple model sizes**: Small (300M) to Large (3.3B)\n- **Stereo support**: Full stereo audio generation\n- **Style conditioning**: MusicGen-Style for reference-based generation\n\n**Use alternatives instead:**\n- **Stable Audio**: For longer commercial music generation\n- **Bark**: For text-to-speech with music\u002Fsound effects\n- **Riffusion**: For spectogram-based music generation\n- **OpenAI Jukebox**: For raw audio generation with lyrics\n\n## Quick start\n\n### Installation\n\n```bash\n# From PyPI\npip install audiocraft\n\n# From GitHub (latest)\npip install git+https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Faudiocraft.git\n\n# Or use HuggingFace Transformers\npip install transformers torch torchaudio\n```\n\n### Basic text-to-music (AudioCraft)\n\n```python\nimport torchaudio\nfrom audiocraft.models import MusicGen\n\n# Load model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-small')\n\n# Set generation parameters\nmodel.set_generation_params(\n    duration=8,  # seconds\n    top_k=250,\n    temperature=1.0\n)\n\n# Generate from text\ndescriptions = [\"happy upbeat electronic dance music with synths\"]\nwav = model.generate(descriptions)\n\n# Save audio\ntorchaudio.save(\"output.wav\", wav[0].cpu(), sample_rate=32000)\n```\n\n### Using HuggingFace Transformers\n\n```python\nfrom transformers import AutoProcessor, MusicgenForConditionalGeneration\nimport scipy\n\n# Load model and processor\nprocessor = AutoProcessor.from_pretrained(\"facebook\u002Fmusicgen-small\")\nmodel = MusicgenForConditionalGeneration.from_pretrained(\"facebook\u002Fmusicgen-small\")\nmodel.to(\"cuda\")\n\n# Generate music\ninputs = processor(\n    text=[\"80s pop track with bassy drums and synth\"],\n    padding=True,\n    return_tensors=\"pt\"\n).to(\"cuda\")\n\naudio_values = model.generate(\n    **inputs,\n    do_sample=True,\n    guidance_scale=3,\n    max_new_tokens=256\n)\n\n# Save\nsampling_rate = model.config.audio_encoder.sampling_rate\nscipy.io.wavfile.write(\"output.wav\", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())\n```\n\n### Text-to-sound with AudioGen\n\n```python\nfrom audiocraft.models import AudioGen\n\n# Load AudioGen\nmodel = AudioGen.get_pretrained('facebook\u002Faudiogen-medium')\n\nmodel.set_generation_params(duration=5)\n\n# Generate sound effects\ndescriptions = [\"dog barking in a park with birds chirping\"]\nwav = model.generate(descriptions)\n\ntorchaudio.save(\"sound.wav\", wav[0].cpu(), sample_rate=16000)\n```\n\n## Core concepts\n\n### Architecture overview\n\n```\nAudioCraft Architecture:\n┌──────────────────────────────────────────────────────────────┐\n│                    Text Encoder (T5)                          │\n│                         │                                     │\n│                    Text Embeddings                            │\n└────────────────────────┬─────────────────────────────────────┘\n                         │\n┌────────────────────────▼─────────────────────────────────────┐\n│              Transformer Decoder (LM)                         │\n│     Auto-regressively generates audio tokens                  │\n│     Using efficient token interleaving patterns               │\n└────────────────────────┬─────────────────────────────────────┘\n                         │\n┌────────────────────────▼─────────────────────────────────────┐\n│                EnCodec Audio Decoder                          │\n│        Converts tokens back to audio waveform                 │\n└──────────────────────────────────────────────────────────────┘\n```\n\n### Model variants\n\n| Model | Size | Description | Use Case |\n|-------|------|-------------|----------|\n| `musicgen-small` | 300M | Text-to-music | Quick generation |\n| `musicgen-medium` | 1.5B | Text-to-music | Balanced |\n| `musicgen-large` | 3.3B | Text-to-music | Best quality |\n| `musicgen-melody` | 1.5B | Text + melody | Melody conditioning |\n| `musicgen-melody-large` | 3.3B | Text + melody | Best melody |\n| `musicgen-stereo-*` | Varies | Stereo output | Stereo generation |\n| `musicgen-style` | 1.5B | Style transfer | Reference-based |\n| `audiogen-medium` | 1.5B | Text-to-sound | Sound effects |\n\n### Generation parameters\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `duration` | 8.0 | Length in seconds (1-120) |\n| `top_k` | 250 | Top-k sampling |\n| `top_p` | 0.0 | Nucleus sampling (0 = disabled) |\n| `temperature` | 1.0 | Sampling temperature |\n| `cfg_coef` | 3.0 | Classifier-free guidance |\n\n## MusicGen usage\n\n### Text-to-music generation\n\n```python\nfrom audiocraft.models import MusicGen\nimport torchaudio\n\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-medium')\n\n# Configure generation\nmodel.set_generation_params(\n    duration=30,          # Up to 30 seconds\n    top_k=250,            # Sampling diversity\n    top_p=0.0,            # 0 = use top_k only\n    temperature=1.0,      # Creativity (higher = more varied)\n    cfg_coef=3.0          # Text adherence (higher = stricter)\n)\n\n# Generate multiple samples\ndescriptions = [\n    \"epic orchestral soundtrack with strings and brass\",\n    \"chill lo-fi hip hop beat with jazzy piano\",\n    \"energetic rock song with electric guitar\"\n]\n\n# Generate (returns [batch, channels, samples])\nwav = model.generate(descriptions)\n\n# Save each\nfor i, audio in enumerate(wav):\n    torchaudio.save(f\"music_{i}.wav\", audio.cpu(), sample_rate=32000)\n```\n\n### Melody-conditioned generation\n\n```python\nfrom audiocraft.models import MusicGen\nimport torchaudio\n\n# Load melody model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-melody')\nmodel.set_generation_params(duration=30)\n\n# Load melody audio\nmelody, sr = torchaudio.load(\"melody.wav\")\n\n# Generate with melody conditioning\ndescriptions = [\"acoustic guitar folk song\"]\nwav = model.generate_with_chroma(descriptions, melody, sr)\n\ntorchaudio.save(\"melody_conditioned.wav\", wav[0].cpu(), sample_rate=32000)\n```\n\n### Stereo generation\n\n```python\nfrom audiocraft.models import MusicGen\n\n# Load stereo model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-stereo-medium')\nmodel.set_generation_params(duration=15)\n\ndescriptions = [\"ambient electronic music with wide stereo panning\"]\nwav = model.generate(descriptions)\n\n# wav shape: [batch, 2, samples] for stereo\nprint(f\"Stereo shape: {wav.shape}\")  # [1, 2, 480000]\ntorchaudio.save(\"stereo.wav\", wav[0].cpu(), sample_rate=32000)\n```\n\n### Audio continuation\n\n```python\nfrom transformers import AutoProcessor, MusicgenForConditionalGeneration\n\nprocessor = AutoProcessor.from_pretrained(\"facebook\u002Fmusicgen-medium\")\nmodel = MusicgenForConditionalGeneration.from_pretrained(\"facebook\u002Fmusicgen-medium\")\n\n# Load audio to continue\nimport torchaudio\naudio, sr = torchaudio.load(\"intro.wav\")\n\n# Process with text and audio\ninputs = processor(\n    audio=audio.squeeze().numpy(),\n    sampling_rate=sr,\n    text=[\"continue with a epic chorus\"],\n    padding=True,\n    return_tensors=\"pt\"\n)\n\n# Generate continuation\naudio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=512)\n```\n\n## MusicGen-Style usage\n\n### Style-conditioned generation\n\n```python\nfrom audiocraft.models import MusicGen\n\n# Load style model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-style')\n\n# Configure generation with style\nmodel.set_generation_params(\n    duration=30,\n    cfg_coef=3.0,\n    cfg_coef_beta=5.0  # Style influence\n)\n\n# Configure style conditioner\nmodel.set_style_conditioner_params(\n    eval_q=3,          # RVQ quantizers (1-6)\n    excerpt_length=3.0  # Style excerpt length\n)\n\n# Load style reference\nstyle_audio, sr = torchaudio.load(\"reference_style.wav\")\n\n# Generate with text + style\ndescriptions = [\"upbeat dance track\"]\nwav = model.generate_with_style(descriptions, style_audio, sr)\n```\n\n### Style-only generation (no text)\n\n```python\n# Generate matching style without text prompt\nmodel.set_generation_params(\n    duration=30,\n    cfg_coef=3.0,\n    cfg_coef_beta=None  # Disable double CFG for style-only\n)\n\nwav = model.generate_with_style([None], style_audio, sr)\n```\n\n## AudioGen usage\n\n### Sound effect generation\n\n```python\nfrom audiocraft.models import AudioGen\nimport torchaudio\n\nmodel = AudioGen.get_pretrained('facebook\u002Faudiogen-medium')\nmodel.set_generation_params(duration=10)\n\n# Generate various sounds\ndescriptions = [\n    \"thunderstorm with heavy rain and lightning\",\n    \"busy city traffic with car horns\",\n    \"ocean waves crashing on rocks\",\n    \"crackling campfire in forest\"\n]\n\nwav = model.generate(descriptions)\n\nfor i, audio in enumerate(wav):\n    torchaudio.save(f\"sound_{i}.wav\", audio.cpu(), sample_rate=16000)\n```\n\n## EnCodec usage\n\n### Audio compression\n\n```python\nfrom audiocraft.models import CompressionModel\nimport torch\nimport torchaudio\n\n# Load EnCodec\nmodel = CompressionModel.get_pretrained('facebook\u002Fencodec_32khz')\n\n# Load audio\nwav, sr = torchaudio.load(\"audio.wav\")\n\n# Ensure correct sample rate\nif sr != 32000:\n    resampler = torchaudio.transforms.Resample(sr, 32000)\n    wav = resampler(wav)\n\n# Encode to tokens\nwith torch.no_grad():\n    encoded = model.encode(wav.unsqueeze(0))\n    codes = encoded[0]  # Audio codes\n\n# Decode back to audio\nwith torch.no_grad():\n    decoded = model.decode(codes)\n\ntorchaudio.save(\"reconstructed.wav\", decoded[0].cpu(), sample_rate=32000)\n```\n\n## Common workflows\n\n### Workflow 1: Music generation pipeline\n\n```python\nimport torch\nimport torchaudio\nfrom audiocraft.models import MusicGen\n\nclass MusicGenerator:\n    def __init__(self, model_name=\"facebook\u002Fmusicgen-medium\"):\n        self.model = MusicGen.get_pretrained(model_name)\n        self.sample_rate = 32000\n\n    def generate(self, prompt, duration=30, temperature=1.0, cfg=3.0):\n        self.model.set_generation_params(\n            duration=duration,\n            top_k=250,\n            temperature=temperature,\n            cfg_coef=cfg\n        )\n\n        with torch.no_grad():\n            wav = self.model.generate([prompt])\n\n        return wav[0].cpu()\n\n    def generate_batch(self, prompts, duration=30):\n        self.model.set_generation_params(duration=duration)\n\n        with torch.no_grad():\n            wav = self.model.generate(prompts)\n\n        return wav.cpu()\n\n    def save(self, audio, path):\n        torchaudio.save(path, audio, sample_rate=self.sample_rate)\n\n# Usage\ngenerator = MusicGenerator()\naudio = generator.generate(\n    \"epic cinematic orchestral music\",\n    duration=30,\n    temperature=1.0\n)\ngenerator.save(audio, \"epic_music.wav\")\n```\n\n### Workflow 2: Sound design batch processing\n\n```python\nimport json\nfrom pathlib import Path\nfrom audiocraft.models import AudioGen\nimport torchaudio\n\ndef batch_generate_sounds(sound_specs, output_dir):\n    \"\"\"\n    Generate multiple sounds from specifications.\n\n    Args:\n        sound_specs: list of {\"name\": str, \"description\": str, \"duration\": float}\n        output_dir: output directory path\n    \"\"\"\n    model = AudioGen.get_pretrained('facebook\u002Faudiogen-medium')\n    output_dir = Path(output_dir)\n    output_dir.mkdir(exist_ok=True)\n\n    results = []\n\n    for spec in sound_specs:\n        model.set_generation_params(duration=spec.get(\"duration\", 5))\n\n        wav = model.generate([spec[\"description\"]])\n\n        output_path = output_dir \u002F f\"{spec['name']}.wav\"\n        torchaudio.save(str(output_path), wav[0].cpu(), sample_rate=16000)\n\n        results.append({\n            \"name\": spec[\"name\"],\n            \"path\": str(output_path),\n            \"description\": spec[\"description\"]\n        })\n\n    return results\n\n# Usage\nsounds = [\n    {\"name\": \"explosion\", \"description\": \"massive explosion with debris\", \"duration\": 3},\n    {\"name\": \"footsteps\", \"description\": \"footsteps on wooden floor\", \"duration\": 5},\n    {\"name\": \"door\", \"description\": \"wooden door creaking and closing\", \"duration\": 2}\n]\n\nresults = batch_generate_sounds(sounds, \"sound_effects\u002F\")\n```\n\n### Workflow 3: Gradio demo\n\n```python\nimport gradio as gr\nimport torch\nimport torchaudio\nfrom audiocraft.models import MusicGen\n\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-small')\n\ndef generate_music(prompt, duration, temperature, cfg_coef):\n    model.set_generation_params(\n        duration=duration,\n        temperature=temperature,\n        cfg_coef=cfg_coef\n    )\n\n    with torch.no_grad():\n        wav = model.generate([prompt])\n\n    # Save to temp file\n    path = \"temp_output.wav\"\n    torchaudio.save(path, wav[0].cpu(), sample_rate=32000)\n    return path\n\ndemo = gr.Interface(\n    fn=generate_music,\n    inputs=[\n        gr.Textbox(label=\"Music Description\", placeholder=\"upbeat electronic dance music\"),\n        gr.Slider(1, 30, value=8, label=\"Duration (seconds)\"),\n        gr.Slider(0.5, 2.0, value=1.0, label=\"Temperature\"),\n        gr.Slider(1.0, 10.0, value=3.0, label=\"CFG Coefficient\")\n    ],\n    outputs=gr.Audio(label=\"Generated Music\"),\n    title=\"MusicGen Demo\"\n)\n\ndemo.launch()\n```\n\n## Performance optimization\n\n### Memory optimization\n\n```python\n# Use smaller model\nmodel = MusicGen.get_pretrained('facebook\u002Fmusicgen-small')\n\n# Clear cache between generations\ntorch.cuda.empty_cache()\n\n# Generate shorter durations\nmodel.set_generation_params(duration=10)  # Instead of 30\n\n# Use half precision\nmodel = model.half()\n```\n\n### Batch processing efficiency\n\n```python\n# Process multiple prompts at once (more efficient)\ndescriptions = [\"prompt1\", \"prompt2\", \"prompt3\", \"prompt4\"]\nwav = model.generate(descriptions)  # Single batch\n\n# Instead of\nfor desc in descriptions:\n    wav = model.generate([desc])  # Multiple batches (slower)\n```\n\n### GPU memory requirements\n\n| Model | FP32 VRAM | FP16 VRAM |\n|-------|-----------|-----------|\n| musicgen-small | ~4GB | ~2GB |\n| musicgen-medium | ~8GB | ~4GB |\n| musicgen-large | ~16GB | ~8GB |\n\n## Common issues\n\n| Issue | Solution |\n|-------|----------|\n| CUDA OOM | Use smaller model, reduce duration |\n| Poor quality | Increase cfg_coef, better prompts |\n| Generation too short | Check max duration setting |\n| Audio artifacts | Try different temperature |\n| Stereo not working | Use stereo model variant |\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Training, fine-tuning, deployment\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues and solutions\n\n## Resources\n\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Faudiocraft\n- **Paper (MusicGen)**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2306.05284\n- **Paper (AudioGen)**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2209.15352\n- **HuggingFace**: https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002Fmusicgen-small\n- **Demo**: https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Ffacebook\u002FMusicGen\n",{"name":5,"license":15,"metadata":50,"description":7},{"tags":51,"author":53,"version":54,"dependencies":55},[52,36,35,34,33],"Multimodal","Orchestra Research","1.0.0",[26,56,57],"torch>=2.0.0","transformers>=4.30.0","main","2b749c82b5d11fac39d9a6e021ce3f5b8a541bd1","cli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fmultimodal-audiocraft",3931,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates","https:\u002F\u002Faitmpl.com","https:\u002F\u002Fgithub.com\u002Fdavila7","https:\u002F\u002Fdanielavila.me","Building AI dev tools with LLMs","2026-11-14 06:14:46",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add davila7\u002Fclaude-code-templates --skill multimodal-audiocraft",{"tool":74,"command":75},"bunx","bunx skills add davila7\u002Fclaude-code-templates --skill multimodal-audiocraft",{"tool":77,"command":78},"pnpm","pnpm dlx skills add davila7\u002Fclaude-code-templates --skill multimodal-audiocraft","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fmultimodal-audiocraft\u002FSKILL.md",true,[82,88,92],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fadvanced-usage.md","REFERENCE","参考文档",16953,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fmultimodal-audiocraft\u002Freferences\u002Fadvanced-usage.md",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Ftroubleshooting.md",11412,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fmultimodal-audiocraft\u002Freferences\u002Ftroubleshooting.md",{"path":93,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":96,"sourceHtmlUrl":97},"SKILL.md.tmpl","OTHER","其他",3851,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fgstack\u002Fqa-only\u002FSKILL.md.tmpl",[99,128,155,188,223,247],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":108,"publishedAt":45},"01M70NHBTQ8BV0A2SCAZXEPHCX","wealthville-pool-scoring","Score DeFi liquidity pools before providing liquidity. Returns a 0-100 pool score and an Enter\u002FHold\u002FExit\u002FReduce\u002FAvoid verdict with calibrated confidence for ~68,800 Solana pools and 575 EVM pools, plus a public miss-inclusive track record. Use when asked whether a pool is worth LPing into, which pools look best right now, or how accurate the scores have actually been.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fweb-data\u002Fwealthville-pool-scoring\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[109,110,111,112,113,114,115,116,117,28,118,119,120,121,122,123,124,125,126,127],"scoring","pool","wealthville pool scoring","liquidity","which","for","exit","now","use","reduce","with","record","track","verdict","evm","solana","how","public","look",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":135,"publishedAt":45},"01M70MB6VR8ERJ4EM8D5KHBMEV","technical-debt-auditor","Scans a codebase and produces a quantified technical debt report with a prioritized remediation plan. Analyzes dead code, TODO\u002FFIXME\u002FHACK markers, dependency staleness, complexity hotspots, code duplication signals, test coverage gaps, unused exports, and outdated patterns. Use this skill when the user asks to audit their codebase for tech debt, wants a health check of their code quality, says things like \"where should I focus refactoring\", \"find code smells\", \"audit my codebase\", \"what technical debt do we have\", \"prioritize cleanup work\", or asks about code quality metrics. Also trigger when the user mentions \"code rot\", \"legacy cleanup\", \"refactoring priorities\", or wants to understand the overall health of a project before a major effort. Trigger even if the user doesn't say \"technical debt\" explicitly — any request to systematically assess code quality and identify improvement priorities belongs here.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdevelopment\u002Ftechnical-debt-auditor\u002FSKILL.md",[134],{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},[136,137,138,139,140,141,142,143,144,145,146,28,147,148,149,150,151,152,153,154],"technical debt","debt","technical","technical debt auditor","auditor","coverage","complexity","markers","project","cleanup","unused","code","todo","work","plan","focus","signals","audit","dependency",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":170,"publishedAt":45},"01M70KPYH9QNHCNME5GJQGE22K","readonly-sql-guard","Make an agent's database access provably read-only. Use when an agent runs caller-supplied SQL against a production\u002FERP\u002Fanalytics database (a \"query\" MCP tool, text-to-SQL, an admin console), or when reviewing DB-access code for write\u002FDDL\u002Fside-effect\u002Ftransaction-escape risks. Checks what a statement CALLS, not just its shape.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdatabase\u002Freadonly-sql-guard\u002FSKILL.md",[161,164,165],{"categoryNo":162,"categoryName":163,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":166,"categoryName":167,"taxonomyType":168,"taxonomyTypeDesc":169},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[171,172,173,174,175,176,177,114,178,179,180,181,182,183,184,117,185,186,28,187],"readonly","guard","sql guard","sql","readonly sql guard","erp","effect","read-only","db","just","tool","calls","only","MCP","access","database","query",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":192,"licenseFileUrl":193,"sourceHtmlUrl":194,"categories":195,"keywords":199,"publishedAt":45},"01M6AFY6F7CC2BBZP1QD6VTNVC","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[196],{"categoryNo":197,"categoryName":198,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,114,222],"artifacts builder","web","web artifacts builder","artifacts","builder","state","routing","state management","component","css","frontend","ui","Tools","file","components","shadcn","react","Tailwind","suite","jsx","html","single-file","ui components",{"skillNo":224,"name":225,"nameZh":6,"description":226,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":192,"licenseFileUrl":227,"sourceHtmlUrl":228,"categories":229,"keywords":234,"publishedAt":45},"01M6AFWF33SFV9Z3SF4PEEE4BF","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[230,233],{"categoryNo":231,"categoryName":232,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":197,"categoryName":198,"taxonomyType":21,"taxonomyTypeDesc":22},[235,236,237,238,239,201,240,210,211,241,242,243,244,114,245,119,246],"webapp testing","testing","webapp","browser","playwright","applications","debugging","toolkit","logs","screenshots","local","behavior",{"skillNo":248,"name":249,"nameZh":6,"description":250,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":192,"licenseFileUrl":251,"sourceHtmlUrl":252,"categories":253,"keywords":261,"publishedAt":45},"01M6AF67Q67JJJ5V51JR2P52KA","discernment-nudge","After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FSKILL.md",[254,257,258],{"categoryNo":255,"categoryName":256,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":259,"categoryName":260,"taxonomyType":168,"taxonomyTypeDesc":169},"01JBSEEDCAT000000000000036","内容创作者",[262,263,264,265,266,267,268,269,203,270,213,147,271,272,273,274,275,183,276,28,31,277,278,279,280,125,281],"discernment nudge","nudge","interpretation","help","run","reasoning","data","writing","lookup","content","review","conversation","short","up","invoke","analysis","claims","argument","assemble","recommendations"]