How CallTweet works
From your voice to a numbered thread, one step at a time, with the limits we know about.
CallTweet takes what you say and gives you posts that fit X. Four pieces do the work: the browser's speech recognition, a punctuation step, a character counter that follows X's rules, and a thread splitter. All of it runs in the page you have open.
1. Your browser listens
When you press the mic in Chrome, Edge or Safari, CallTweet calls the Web Speech API, a speech-to-text feature built into those browsers. The first time, the browser asks whether calltweet.com may use your microphone. Say yes and it starts streaming results back to the page.
Results come in two kinds. Interim results are the browser's running guess while you're mid-sentence; they show in grey under the text box and change as you go. A final result arrives when the browser is confident about a phrase, usually after a short pause. Only final results are added to your draft.
The browser does the actual recognition, and in most cases that means sending the audio to the browser maker's online speech service. Chrome uses Google's, Edge uses Microsoft's and Safari uses Apple's. CallTweet only ever sees the text that comes back. The privacy page has the details for each browser.
Pick the language you'll speak from the list before you start. Recognition is noticeably worse when the setting and the speaker don't match, and accents matter too: English (UK) or English (India) can do better than English (US) for some voices.
Browsers without working speech recognition
Firefox doesn't give web pages speech recognition at all, and some Chromium-based browsers, such as Brave, Opera and the browsers built into other apps, have the feature but can't reach Google's speech service. In those browsers CallTweet uses its own speech service instead. You'll see a short notice the first time it switches.
It works a little differently. Press the mic, talk for up to a minute, and press it again. The page turns the recording into a small WAV file on your device and sends it to our service on Cloudflare, where the open-source Whisper model writes it out. The text appears in the box a few seconds later and the audio is thrown away. There are no grey interim results in this mode, but Whisper adds its own punctuation, so you can skip saying "comma" if you like.
The service has a daily limit per visitor and an overall daily limit, so it stays free. If a limit is reached, the page tells you, and you can still type or use your system's dictation: Win + H on Windows, the Microphone key or Edit > Start Dictation on a Mac, or the microphone key on your phone's keyboard.
If the browser says no
When microphone access is blocked, CallTweet shows what went wrong instead of failing silently. The usual causes:
- You pressed Block on the permission prompt. Click the icon at the left of the address bar, set Microphone to Allow, and press the mic again.
- Your phone hasn't given the browser microphone access. That switch lives in the system settings, under the browser app.
- No microphone is connected, or the wrong one is selected in your sound settings.
- You're offline. Chrome and Edge can't recognize speech without the internet.
2. Punctuation, on your terms
Speech engines add some punctuation on their own, with mixed results. With spoken punctuation switched on, you can also say the mark you want. "This is great comma honestly exclamation mark" becomes "This is great, honestly!"
The tool knows comma, period (or full stop), question mark, exclamation mark or point, colon, semicolon, "dot dot dot", new line and new paragraph. "Hashtag" followed by a word becomes a hashtag. After converting, it cleans up the spacing, so there's no gap before a comma and there's one space after it, and it capitalizes the first word of each sentence.
These words are English only. When you pick another language the option switches off, because the words for "comma" and "period" are different and some of them are ordinary words in other languages. There's one catch in English too: "period" in a phrase like "a trial period" turns into a dot. If you're talking about periods, turn the option off for that draft. The Fix punctuation button runs the same cleanup on anything you've typed or pasted.
3. Counting like X
X doesn't count characters the way a word processor does, so CallTweet follows X's published rules:
- The limit for a standard post is 280.
- Every link counts as 23 characters, because X shortens all links with t.co. That includes bare addresses like example.com.
- Emoji count as 2, even the ones built from several pieces, like a family or a flag.
- Chinese, Japanese and Korean characters count as 2. Most other scripts, including Latin, Cyrillic, Arabic and Devanagari, count 1 per character.
- Text is normalized first, so an accented letter counts once however your keyboard produced it.
The counter turns red past 280. Paid X accounts can publish longer posts, but the tool sticks to 280 because that's what most readers see before the "Show more" cut.
4. Splitting into a thread
If your draft goes over the limit, CallTweet breaks it into posts:
- It looks for forced breaks first. A line containing only three dashes (
---), which you get by saying "next post", always starts a new post. - Within each part, it fills a post one sentence at a time and starts the next post when the next sentence wouldn't fit.
- A single sentence that's longer than a whole post gets split between words. A word longer than a post, which mostly happens with pasted junk, is cut where it has to be.
- With numbering on, it adds " 1/4", " 2/4" and so on, and it reserves room for the label before packing, so every numbered post still fits.
The result appears under the editor as a list of cards, each with its own count. Edit the text box and they rebuild instantly.
5. Getting it onto X
The first card has a Post on X button. It opens X's documented share link, x.com/intent/tweet, with your text filled in. You're in X's own composer, logged in as yourself, and nothing is published until you press Post there.
That link can only carry a single post, so a thread takes one more step. Publish post 1, open it, and reply with post 2 using its Copy button. Then reply to post 2 with post 3, and keep going. If you'd rather publish everything at once, X's composer has a plus button that adds another post to the thread; paste each one in order and post them together.
Saving your draft
Your text and settings are stored in your browser's local storage as you work, so a reload doesn't lose anything. If your browser blocks storage, as some private modes do, the tool still works and simply won't remember the draft.
Questions
Why does the mic stop by itself?
Browsers end a listening session after a pause or after a while of speech. CallTweet starts a new session straight away as long as you haven't pressed stop, so you can keep talking. If it keeps stopping, check your connection, because Chrome and Edge need the internet for speech.
Can I use it with a keyboard only?
Yes. Tab to the mic button and press Enter or Space to start and stop. Alt+M toggles the mic from anywhere on the page, and Escape stops listening. Every other control is a normal button, checkbox or text box.
Why does my thread have one more post than I expected?
With numbering on, each post needs room for its label, such as " 2/5". The splitter reserves that space first, and on a long thread the extra characters can push one sentence into a new post. Turn numbering off if you'd rather not have labels.
What happens to my draft when I close the tab?
It's saved in your browser's local storage and comes back the next time you open CallTweet on the same device and browser. Nothing is sent anywhere. Press Clear to remove it.