The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea.
1. claude mcp add runapi -s user -- npx -y @runapi.ai/mcp
2. 重启 Claude Code
3. 粘贴这个 prompt:生成音频:"The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
1. codex plugin install runapi-mcp@agents
2. 重启 Codex
3. 粘贴这个 prompt:生成音频:"The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
1. npx @runapi.ai/mcp init cursor
2. 重启 Cursor
3. 粘贴这个 prompt:生成音频:"The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
1. npx @runapi.ai/mcp init windsurf
2. 重启 Windsurf
3. 粘贴这个 prompt:生成音频:"The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-multilingual-v2",
"text": "The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
}
JSON
import { ElevenlabsClient } from "@runapi.ai/elevenlabs";
const client = new ElevenlabsClient({
apiKey: process.env.RUNAPI_API_KEY,
});
const result = await client.textToSound.run({
"model": "text-to-speech-multilingual-v2",
"text": "The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
});
console.log(result.id);
require "runapi/elevenlabs"
client = RunApi::Elevenlabs::Client.new
result = client.text_to_sound.run(
model: "text-to-speech-multilingual-v2",
text: "The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea."
)
puts result.id
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader("{\"model\":\"text-to-speech-multilingual-v2\",\"text\":\"The old lighthouse keeper climbed the spiral staircase one last time. Each iron step rang out beneath his boots, echoing off the curved stone walls as it had for thirty-seven years. At the top, he paused to catch his breath and looked out across the Atlantic. The beam would spin tonight without him. Tomorrow, the automation engineers would arrive, and the light would keep itself. He pressed his palm flat against the cold glass of the lantern room and whispered goodbye to the sea.\"}")
req, err := http.NewRequestWithContext(context.Background(), http.MethodPost, "https://runapi.ai/api/v1/elevenlabs/text_to_sound", body)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("RUNAPI_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}
text-to-speech-multilingual-v2/api/v1/elevenlabs/text_to_sound获取 API Key
Hold on, let me think. <break time="1.5s" /> Alright, I've got it. The key to understanding this phenomenon is not in the data itself, but in what the data leaves out.
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-multilingual-v2",
"text": "Hold on, let me think. <break time=\"1.5s\" /> Alright, I've got it. The key to understanding this phenomenon is not in the data itself, but in what the data leaves out."
}
JSON