{
  "schemaVersion": "1.0",
  "item": {
    "slug": "sam-tts",
    "name": "SAM TTS",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/fourthdensity/sam-tts",
    "canonicalUrl": "https://clawhub.ai/fourthdensity/sam-tts",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/sam-tts",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=sam-tts",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "package-lock.json",
      "package.json",
      "scripts/sam-tts-wrapper.js",
      "scripts/sam-tts.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/sam-tts"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/sam-tts",
    "agentPageUrl": "https://openagent3.xyz/skills/sam-tts/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sam-tts/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sam-tts/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "SAM TTS - Software Automatic Mouth",
        "body": "Generate WAV audio files using the classic SAM text-to-speech engine -- the iconic robotic voice from the Commodore 64 era."
      },
      {
        "title": "Requirements",
        "body": "Node.js 18+\nRun npm install in the skill directory to install dependencies"
      },
      {
        "title": "SAM Mode Toggle",
        "body": "State file: memory/sam-mode.json"
      },
      {
        "title": "/sam on -- Enable SAM Mode",
        "body": "When SAM mode is enabled, ALL text responses are converted to SAM voice messages.\n\nImplementation:\n\nSet enabled: true in memory/sam-mode.json\nConfirm with voice message: \"SAM mode enabled. I will now speak in robotic voice.\""
      },
      {
        "title": "/sam off -- Disable SAM Mode",
        "body": "Return to normal text-to-text communication.\n\nImplementation:\n\nSet enabled: false in memory/sam-mode.json\nConfirm with text: \"SAM mode disabled. Back to text.\""
      },
      {
        "title": "Check current mode",
        "body": "Read memory/sam-mode.json at session start to know current state."
      },
      {
        "title": "When SAM mode is ON:",
        "body": "Generate response text as normal\nConvert to SAM TTS: node scripts/sam-tts-wrapper.js \"response\" --output=/tmp/sam-XXX.wav --quiet\nSend the generated WAV file as audio output\nInclude brief text caption if helpful"
      },
      {
        "title": "When SAM mode is OFF:",
        "body": "Respond with normal text (default behavior)."
      },
      {
        "title": "/sam <text>",
        "body": "Generate a one-time voice message using SAM TTS (works regardless of SAM mode state).\n\nImplementation:\n\nExtract text after /sam \nGenerate WAV: node scripts/sam-tts-wrapper.js \"text\" --output=/tmp/sam-XXX.wav --quiet\nReturn the WAV file as audio output"
      },
      {
        "title": "/sam on",
        "body": "Enable SAM mode for all responses."
      },
      {
        "title": "/sam off",
        "body": "Disable SAM mode."
      },
      {
        "title": "/sam status",
        "body": "Report current SAM mode state (text response)."
      },
      {
        "title": "Voice Parameters",
        "body": "All parameters accept 0-255 range values. Store defaults in memory/sam-mode.json:\n\nParameterDefaultEffectpitch64Voice pitch (higher = higher pitch)speed72Speech speed (lower = faster)mouth128Mouth cavity size (affects resonance)throat128Throat size (affects timbre)"
      },
      {
        "title": "/sam pitch <number>",
        "body": "Set pitch parameter (0-255)."
      },
      {
        "title": "/sam speed <number>",
        "body": "Set speed parameter (1-255, lower is faster)."
      },
      {
        "title": "/sam mouth <number>",
        "body": "Set mouth parameter (0-255)."
      },
      {
        "title": "/sam throat <number>",
        "body": "Set throat parameter (0-255)."
      },
      {
        "title": "scripts/sam-tts-wrapper.js",
        "body": "Primary wrapper script. Outputs JSON metadata for automation.\n\nnode scripts/sam-tts-wrapper.js \"Hello world\" --output=/tmp/out.wav --quiet\nnode scripts/sam-tts-wrapper.js \"Hello world\" --output=/tmp/out.wav --quiet --pitch=80 --speed=60\n\nOptions:\n\n--output=PATH (required) - Output WAV file path\n--quiet - Suppress debug output, output only JSON\n--pitch=N, --speed=N, --mouth=N, --throat=N - Voice parameters\n--phonetic - Input is phonetic notation\n\nOutput format:\n\n{\"success\":true,\"outputPath\":\"/tmp/sam.wav\",\"duration\":1.44,\"size\":31741}"
      },
      {
        "title": "scripts/sam-tts.js",
        "body": "Standalone CLI tool with human-readable output.\n\nnode scripts/sam-tts.js \"Hello world\" output.wav --pitch=80 --speed=60"
      },
      {
        "title": "File: memory/sam-mode.json",
        "body": "{\n  \"enabled\": false,\n  \"pitch\": 64,\n  \"speed\": 72,\n  \"mouth\": 128,\n  \"throat\": 128\n}\n\nRead at session start. Update when user toggles mode or changes parameters. Create the memory/ directory if it doesn't exist."
      },
      {
        "title": "Enable SAM mode",
        "body": "User: /sam on\nAgent: [Voice: \"SAM mode enabled. I will now speak in robotic voice.\"]"
      },
      {
        "title": "Normal conversation in SAM mode",
        "body": "User: \"What's the weather?\"\nAgent: [Voice: \"Current temperature is 72 degrees with partly cloudy skies.\"]"
      },
      {
        "title": "Disable SAM mode",
        "body": "User: /sam off\nAgent: SAM mode disabled. Back to text."
      },
      {
        "title": "One-time voice (even when mode is off)",
        "body": "User: /sam Hello there\nAgent: [Voice: \"Hello there\"]"
      },
      {
        "title": "Custom voice parameters",
        "body": "User: /sam pitch 100\nAgent: Pitch set to 100.\n\nUser: /sam Testing higher pitch\nAgent: [Voice with pitch=100: \"Testing higher pitch\"]"
      },
      {
        "title": "Phonetic Notation",
        "body": "For precise pronunciation, use --phonetic flag:\n\nVowels: IY (bee), IH (bit), EY (bay), AE (bat), AA (father), AH (bought), AO (hot), OW (boat), UH (book), UW (boot), ER (bird), AX (about)\nNumbers 1-8 indicate stress: HEH4LOW (emphasized second syllable)\n\nSee references/phonemes.md for the full phoneme chart."
      },
      {
        "title": "Output Format",
        "body": "Format: WAV (RIFF/WAVE PCM)\nSample rate: 22050 Hz\nBit depth: 8-bit\nChannels: Mono"
      },
      {
        "title": "Directory Structure",
        "body": "sam-tts/\n+-- SKILL.md\n+-- package.json\n+-- scripts/\n|   +-- sam-tts-wrapper.js\n|   +-- sam-tts.js\n+-- references/\n|   +-- phonemes.md\n+-- memory/\n    +-- sam-mode.json"
      },
      {
        "title": "Platform Integration",
        "body": "The skill outputs WAV format by default. Some messaging platforms require different audio formats."
      },
      {
        "title": "Format Conversion (Optional)",
        "body": "(Warning): Before installing ffmpeg or any conversion tools, the agent MUST ask the user for confirmation. Do not auto-install dependencies.\n\nExample agent prompt:\n\n\"This platform requires OGG/OPUS format. I need to install ffmpeg for audio conversion. Would you like me to proceed with the installation?\"\n\nOnly proceed with installation after explicit user approval."
      },
      {
        "title": "Telegram / WhatsApp (OGG/OPUS)",
        "body": "ffmpeg -i input.wav -c:a libopus -b:a 24k output.ogg"
      },
      {
        "title": "Discord (MP3/OGG)",
        "body": "ffmpeg -i input.wav -c:a libmp3lame -b:a 64k output.mp3"
      },
      {
        "title": "Web / Direct Playback",
        "body": "WAV works directly -- no conversion needed.\n\nNote: The agent should detect the target platform and handle format conversion as needed, but always with user consent for any new dependencies."
      },
      {
        "title": "Credits",
        "body": "Skill by: fourthdensity\n\nActive Dependency: sam-js by discordier\n\nThe npm package used for TTS synthesis (JavaScript/Node.js port)\n\nHistorical Lineage: sam-js builds upon earlier community ports:\n\nSAM by Stefan Macke (C adaptation)\nSAM by Vidar Hokstad (refactoring)\nSAM by 8BitPimp (refactoring)\n\nOriginal SAM (Software Automatic Mouth) (c) 1982 Don't Ask Software (now SoftVoice, Inc.)\n\nLicense Note: The original SAM software is considered abandonware. The JavaScript adaptation is provided as-is. See the sam-js repository for full license details."
      }
    ],
    "body": "SAM TTS - Software Automatic Mouth\n\nGenerate WAV audio files using the classic SAM text-to-speech engine -- the iconic robotic voice from the Commodore 64 era.\n\nRequirements\nNode.js 18+\nRun npm install in the skill directory to install dependencies\nSAM Mode Toggle\n\nState file: memory/sam-mode.json\n\n/sam on -- Enable SAM Mode\n\nWhen SAM mode is enabled, ALL text responses are converted to SAM voice messages.\n\nImplementation:\n\nSet enabled: true in memory/sam-mode.json\nConfirm with voice message: \"SAM mode enabled. I will now speak in robotic voice.\"\n/sam off -- Disable SAM Mode\n\nReturn to normal text-to-text communication.\n\nImplementation:\n\nSet enabled: false in memory/sam-mode.json\nConfirm with text: \"SAM mode disabled. Back to text.\"\nCheck current mode\n\nRead memory/sam-mode.json at session start to know current state.\n\nResponse Behavior\nWhen SAM mode is ON:\nGenerate response text as normal\nConvert to SAM TTS: node scripts/sam-tts-wrapper.js \"response\" --output=/tmp/sam-XXX.wav --quiet\nSend the generated WAV file as audio output\nInclude brief text caption if helpful\nWhen SAM mode is OFF:\n\nRespond with normal text (default behavior).\n\nChat Commands\n/sam <text>\n\nGenerate a one-time voice message using SAM TTS (works regardless of SAM mode state).\n\nImplementation:\n\nExtract text after /sam\nGenerate WAV: node scripts/sam-tts-wrapper.js \"text\" --output=/tmp/sam-XXX.wav --quiet\nReturn the WAV file as audio output\n/sam on\n\nEnable SAM mode for all responses.\n\n/sam off\n\nDisable SAM mode.\n\n/sam status\n\nReport current SAM mode state (text response).\n\nVoice Parameters\n\nAll parameters accept 0-255 range values. Store defaults in memory/sam-mode.json:\n\nParameter\tDefault\tEffect\npitch\t64\tVoice pitch (higher = higher pitch)\nspeed\t72\tSpeech speed (lower = faster)\nmouth\t128\tMouth cavity size (affects resonance)\nthroat\t128\tThroat size (affects timbre)\n/sam pitch <number>\n\nSet pitch parameter (0-255).\n\n/sam speed <number>\n\nSet speed parameter (1-255, lower is faster).\n\n/sam mouth <number>\n\nSet mouth parameter (0-255).\n\n/sam throat <number>\n\nSet throat parameter (0-255).\n\nScripts\nscripts/sam-tts-wrapper.js\n\nPrimary wrapper script. Outputs JSON metadata for automation.\n\nnode scripts/sam-tts-wrapper.js \"Hello world\" --output=/tmp/out.wav --quiet\nnode scripts/sam-tts-wrapper.js \"Hello world\" --output=/tmp/out.wav --quiet --pitch=80 --speed=60\n\n\nOptions:\n\n--output=PATH (required) - Output WAV file path\n--quiet - Suppress debug output, output only JSON\n--pitch=N, --speed=N, --mouth=N, --throat=N - Voice parameters\n--phonetic - Input is phonetic notation\n\nOutput format:\n\n{\"success\":true,\"outputPath\":\"/tmp/sam.wav\",\"duration\":1.44,\"size\":31741}\n\nscripts/sam-tts.js\n\nStandalone CLI tool with human-readable output.\n\nnode scripts/sam-tts.js \"Hello world\" output.wav --pitch=80 --speed=60\n\nState Management\nFile: memory/sam-mode.json\n{\n  \"enabled\": false,\n  \"pitch\": 64,\n  \"speed\": 72,\n  \"mouth\": 128,\n  \"throat\": 128\n}\n\n\nRead at session start. Update when user toggles mode or changes parameters. Create the memory/ directory if it doesn't exist.\n\nExamples\nEnable SAM mode\n\nUser: /sam on Agent: [Voice: \"SAM mode enabled. I will now speak in robotic voice.\"]\n\nNormal conversation in SAM mode\n\nUser: \"What's the weather?\" Agent: [Voice: \"Current temperature is 72 degrees with partly cloudy skies.\"]\n\nDisable SAM mode\n\nUser: /sam off Agent: SAM mode disabled. Back to text.\n\nOne-time voice (even when mode is off)\n\nUser: /sam Hello there Agent: [Voice: \"Hello there\"]\n\nCustom voice parameters\n\nUser: /sam pitch 100 Agent: Pitch set to 100.\n\nUser: /sam Testing higher pitch Agent: [Voice with pitch=100: \"Testing higher pitch\"]\n\nPhonetic Notation\n\nFor precise pronunciation, use --phonetic flag:\n\nVowels: IY (bee), IH (bit), EY (bay), AE (bat), AA (father), AH (bought), AO (hot), OW (boat), UH (book), UW (boot), ER (bird), AX (about)\nNumbers 1-8 indicate stress: HEH4LOW (emphasized second syllable)\n\nSee references/phonemes.md for the full phoneme chart.\n\nOutput Format\nFormat: WAV (RIFF/WAVE PCM)\nSample rate: 22050 Hz\nBit depth: 8-bit\nChannels: Mono\nDirectory Structure\nsam-tts/\n+-- SKILL.md\n+-- package.json\n+-- scripts/\n|   +-- sam-tts-wrapper.js\n|   +-- sam-tts.js\n+-- references/\n|   +-- phonemes.md\n+-- memory/\n    +-- sam-mode.json\n\nPlatform Integration\n\nThe skill outputs WAV format by default. Some messaging platforms require different audio formats.\n\nFormat Conversion (Optional)\n\n(Warning): Before installing ffmpeg or any conversion tools, the agent MUST ask the user for confirmation. Do not auto-install dependencies.\n\nExample agent prompt:\n\n\"This platform requires OGG/OPUS format. I need to install ffmpeg for audio conversion. Would you like me to proceed with the installation?\"\n\nOnly proceed with installation after explicit user approval.\n\nTelegram / WhatsApp (OGG/OPUS)\nffmpeg -i input.wav -c:a libopus -b:a 24k output.ogg\n\nDiscord (MP3/OGG)\nffmpeg -i input.wav -c:a libmp3lame -b:a 64k output.mp3\n\nWeb / Direct Playback\n\nWAV works directly -- no conversion needed.\n\nNote: The agent should detect the target platform and handle format conversion as needed, but always with user consent for any new dependencies.\n\nCredits\n\nSkill by: fourthdensity\n\nActive Dependency: sam-js by discordier\n\nThe npm package used for TTS synthesis (JavaScript/Node.js port)\n\nHistorical Lineage: sam-js builds upon earlier community ports:\n\nSAM by Stefan Macke (C adaptation)\nSAM by Vidar Hokstad (refactoring)\nSAM by 8BitPimp (refactoring)\n\nOriginal SAM (Software Automatic Mouth) (c) 1982 Don't Ask Software (now SoftVoice, Inc.)\n\nLicense Note: The original SAM software is considered abandonware. The JavaScript adaptation is provided as-is. See the sam-js repository for full license details."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/fourthdensity/sam-tts",
    "publisherUrl": "https://clawhub.ai/fourthdensity/sam-tts",
    "owner": "fourthdensity",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/sam-tts",
    "downloadUrl": "https://openagent3.xyz/downloads/sam-tts",
    "agentUrl": "https://openagent3.xyz/skills/sam-tts/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sam-tts/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sam-tts/agent.md"
  }
}