WeDispatch, 1.23 to 1.51: everything that changed for you
The catalogue goes from 13 to 153 voices, French is read by written rules instead of a model, patching becomes free, the lexicon opens up to the API. Plus the list of what we got wrong, because your audio carried the traces.
The last release note covered 1.33 and nothing else. Twenty-eight versions have shipped since, several
of which change what your listeners hear. Here is the full tour since 1.22, organised by what it does
for you rather than by version number.
One remark before we start. The second half of this note is called "what we got wrong", and it is
long. This is not false modesty: those defects were live, on your accounts, in your audio. You are
entitled to know which ones you may have been subjected to, and from which version they are gone.
French is now read by written rules
This is the most important change of the period, and it fits in one sentence: numbers, dates, times,
scores, percentages, units, currencies and acronyms no longer go through a language model. They go
through deterministic rules that are written down, published, and checked on every deployment.
In your articles, concretely:
- "23-11" is read as a score one way and as a regulation number another way. They are not the same object, and they are not read alike.
- "02 99 12 34 56" is spoken in pairs, with the leading zero. That zero used to get lost, and a wrong number on air is a number nobody calls back.
- "article L. 123-4" is no longer read as a score. Neither is "2019/882".
- "-5 °C" now says "minus five". The negative sign was being swallowed: the value came out inverted, with the same confidence as the correct ones.
- Fractions, Roman numerals, ordinals, currencies with multipliers.
- Common press acronyms are expanded at first occurrence, with the right article and elision.
Two consequences that may matter more than the list itself.
It works in charter mode. A newsroom that bans AI on its content had to choose between accuracy
and a correct reading of French. That was a false choice, and it no longer exists: rules are not a
model.
It costs nothing. No network call, no credit, no added latency.
The full public record of what these rules hold, failures included, is on the
Reading French page. The "what is spoken" column is computed as the page
renders, not copied in: if a rule breaks, the page shows it before you have to write to us.
See how a text will be read, before paying
New screen in your dashboard: the reading sheet. You paste a text and you see what will be said
differently, which homographs need a decision, and which acronyms are candidates for your lexicon.
No credit, no synthesis, no model call. It is the screen to open before an important piece, or simply
to understand what the product does with your writing.
From that sheet, a homograph is settled in one click. The entry goes into your newsroom's lexicon, and
the case is closed for every article that follows.
Your pronunciation lexicon becomes programmable
The lexicon is the least imitable thing this product has. No rule can guess that Ploërmel is said
"Plo-air-mel": you have to know the town. You know, we do not, and what you teach us once holds for
everything that follows.
What changes:
- Your corrections feed suggestions. Below your lexicon, entries suggested from what you have already corrected, with "add" or "dismiss". Nothing is written without your click.
- Every confirmed correction becomes a regression test on our side: the product cannot re-break what it learned from you.
- The lexicon now has its own API address (
/v1/pronunciations), to read, add and remove. Plus three assistant tools, for those who drive production from a conversation. - It can also be set from WordPress, as plain text, one line per entry,
written = spoken. A line without an equals sign is ignored rather than guessed at.
One detail that matters if you automate: adding now merges instead of replacing. Before this
version, writing the lexicon through the API replaced the whole list, so a tool sending the single
entry it knew about wiped everything else. That was our fault, not yours: the shape of the interface
invited that mistake.
Voices: from 13 to 153
The catalogue went from 13 to 153 voices, 22 of them in French. Each was listened to and named one by
one before going into service, on a real press sentence with a number, a proper noun and a breath in
the middle, because that is where a voice gives itself away.
- A default voice per language. Your English or Spanish edition no longer reads with "the first voice in the catalogue", which is to say the first result of an alphabetical sort.
- Any paid volume opens the whole catalogue. The free trial offers two, the most neutral ones.
- A single reading engine, chosen for word-level timing. Direct consequence: the free trial now gets synced highlighting and subtitles, which it did not have.
Twelve player templates, and one that folds away everywhere
The player catalogue went from six to twelve. New since 1.22:
- Guided reading: the whole article under the bar, each word lighting up as the voice moves, click a word to jump there.
- Episode: cover art, clickable table of contents with the current chapter, fifteen-second skip.
- Summary first, floating bar, and the eleventh, the shareable quote, which had its own note.
- Wave (the twelfth): the waveform replaces the bar and doubles as the seek track. You see how much is left without reading the counter. The bar colour is derived from your accent rather than fixed: your brand stays yours.
The always-visible player is now a setting of its own, valid for all twelve templates. It used to
be locked inside "floating bar": wanting Episode meant giving it up. Two independent choices presented
as one, so one of them sacrificed. All twelve now fold down to a 54 px bar with play, seek and time
remaining.
You can also force your own colours (data-accent, data-bg, data-fg) and force or refuse the
sticky player at a specific spot (data-colle), without touching the site setting.
What your listeners see, and what they choose
Synced text and subtitles now show your article, not our pronunciation draft. That is new, and it
is a fix we come back to below.
A listener's reading speed is remembered per site, not globally. Text size, dyslexia-friendly font
and increased contrast stay global: those are accessibility needs that follow the person everywhere,
whereas speed is a comfort setting that belongs on your site.
A new public page per article: the provenance certificate. Preparation mode, whether a model was
involved, where processing happened, voice tier, date, version, transformations applied. It also
states technical fallbacks, for instance "preparation performed outside the EU". It republishes
neither your text, nor your title, nor your name, and it is not indexed.
The player starts faster: one round trip instead of two in a queue, and a placeholder at the exact
size shown immediately so your article no longer jumps.
Billing
- Your patches are free. 300 characters of correction included per article, in as many patches as you like.
- Moving up in volume takes effect at once, mid-month, with the difference settled pro rata. A monthly increase triggers no twelve-month commitment: only buying a year does that.
- Quota reached: just raise your volume, and it is immediate. No more "upgrade to the higher plan".
- Everything is included from the first paid plan. Only the signature voice is an option, and voice cloning is available on every paid plan rather than as an enterprise offer.
- Consumption is counted in credits, article by article, both on screen and at the gate.
- The pricing block shows both prices side by side, no toggle, and the gap is expressed in euros rather than as a percentage.
The dashboard
The overview has been rebuilt: nine blocks oriented around "what is happening" rather than "what is
blocked". The real player mounted on your latest audio, four indicators with a thirty-day trend, the
completion rate per article, consumption per site.
Two new blocks worth pointing out:
- "What we corrected for you": the monthly record of the normalisations applied to your texts, percentages, acronyms, dates, ordinals. Invisible work made visible.
- "One lead, from your own numbers": a single suggested action, backed by a real figure from your account. It disappears when there is nothing honest to say, rather than inventing advice.
General rule for that screen: a block with no data disappears instead of showing an empty figure.
"0 plays" is information; a missing measurement is not.
On phones, about twenty action links were ten to twelve pixels tall. You aimed at them correctly with a
mouse and missed them with a thumb. They are now 44 px on touch screens, with no change at all on
desktop. Checkboxes and the audio player in the list followed.
WordPress and the API
- The plugin downloads without an account from the WordPress page. Install it, see that it works, sign up afterwards.
- Eleven more settings in the plugin: player CSS, intro jingle, background music and its volume, mid-roll break, per-section jingle, pronunciation lexicon, the five signup-wall texts, and the default voice per language.
- The API reference covers all eighteen endpoints, with webhooks, rate limits, the eleven player templates and what each one requires. It is generated from the code: it can no longer describe a route that does not exist, nor forget one that does.
GET /v1/accountexposes your real, computed offer instead of a dead plan name.
What we got wrong
Here is the part few vendors publish. It is here because these defects may have affected you, and you
had no way of guessing them.
Your listeners sometimes saw something other than your article
The most embarrassing of the period: synced text and subtitles displayed our pronunciation draft,
not your text. "Gyökeres" appeared as "Gueukeurech", "23-11" appeared spelled out, "SNCF" appeared as
its letter-by-letter spelling. In other words, a spelling mistake attributed to your publication.
Fixed: the displayed text is yours, and the pronunciation spelling only ever reaches the engine.
The language model was damaging your text, and we measured it on ten lines: a word deleted, the last
pair of a phone number lost, an invented misspelling, and a phrase invented outright. It no longer
touches numbers or acronyms: it keeps only editorial spotting, photo credits, "read also", pull quotes.
"14h30" was read as "half past two". That is a paraphrase, not a reading: it shifts register and
puts in your publication's mouth a wording it did not choose.
A regulation number was read as a score. And "2016/679" said "slash" out loud as a word, when the
slash is a writing convention, not a word.
A web address was dictated by halves, losing its slash, which made it impossible to write down,
which is the only use of an address read aloud.
Wrong numbers on our own pages
The most visited page announced "120 acronyms expanded" when the dictionary held 83, a 45 % gap.
Worse: it was surrounded by three accurate figures, and three verified numbers lend the fourth a
credibility it has not earned. All four now query their source on every render.
A promise the code did not keep: the subscription page promised that a volume increase took effect
immediately, pro rata, while the code deferred it to the following month. A customer hitting their
ceiling on the 20th was promised an immediate button that would have made them wait, which is exactly
when their newsroom is at a standstill. The page was not corrected; the code caught up with it.
Three surfaces promised that patching "only counts the characters of the re-synthesised passage",
which is arithmetically impossible since the billable unit is the credit. And in the code, patching
counted nothing at all. So customers were giving up on fixing a mistake because they believed it cost
money. The rule is now written the same way everywhere: 300 characters included per article.
The site was still selling a pricing grid that had been removed, with plan names and amounts that no
longer existed. And GET /v1/account still returned those dead names a month after their removal: they
were therefore living on production screens at your end.
Video generation was advertised on eight surfaces, right down to the terms and conditions, while the
product contains no encoding and no route for it. It was the only promise on the site that rested on
nothing. It has been removed everywhere.
Features that shipped and did nothing
"I turn on the always-visible player and nothing happens." Reported twice. Three stacked causes, the
third hiding the other two. The preview on the Appearance screen was not even passing the setting to the
player it displayed: it could not show anything, whatever the state of the switch.
A player fix could take up to 25 hours to reach you, while our cache header said one hour. A
revalidation setting allowed your listeners' browsers to serve the old version for another day. Today a
fix arrives on the next page load.
The player sometimes painted itself black on black. It samples the colour of the first link in your
article to match your site; if that first link is a button with dark text on a light background, it took
that dark colour for your accent. The trap existed at any publisher with a call to action at the top of
an article. A sampled colour that does not stand out from the background is no longer accepted, and you
can impose your own.
"Playback starts at 2×", reported three times. Nobody had set anything to 2×: the maximum speed
offered to a publisher is 1.1. It was a listener preference, stored globally, that followed the same
person from one customer site to another. It is now stored per site.
Settings screens that erased settings
A settings screen must never erase what it cannot display. The service moved to ten player templates
while the WordPress plugin knew six: an account set to "Episode" saw "Bar" preselected, and that value
was sent to the service on the first save, even when only changing the speed. The setting was lost with
nobody touching it. The same fault applied to voices, and it triggered when the catalogue was unreadable,
which is to say when the service is down, which is to say exactly when you come to look at your settings.
Twenty-two settings saved on click, twelve waited for a button, sometimes at the bottom of a card
collapsed under thirteen fields. You would pick a voice, the row would say "selected", you would change
screen, and nothing had been sent. The interface said yes and the account said no. Nobody writes in to
report that: you assume you misclicked. Everything now saves by itself, except things that create
something, which deliberately keep a button.
And a display defect that grew with the content
A section taller than one screen would never appear, because its appearance threshold was a
percentage of its own height. The more a section had to show, the less chance it had of showing it.
What we removed, and why
We had put audio samples on the Reading French page, "without our rules" and "with our rules", to let
you hear the difference. We have removed them.
The reason is worth stating. Listening to all seventy-one pairs one by one, it turned out that
twenty-four were handled by the raw engine alone: our layer added nothing audible. And of two
random checks on cases where we claimed the credit, both reversed.
So our general reading rules are worth less than the page claimed. They are worth a great deal on hard
cases, and nothing on the ones the engine already handles. Rather than keep a demonstration that only
stayed honest at the cost of permanent re-listening, we kept what verifies itself: the table of
seventy-five cases, whose "what is spoken" column is computed as the page renders.
What that teaches us, and what it steers next: our real advantage is your lexicon, not our general
rules. Which is why it has just gained an API and a set of assistant tools.
Where this is going
Current work is on the dashboard rather than the sales pages: managing what exists better, and opening
up what is not yet open. If you have an idea of what you are missing, we are more interested in that
than in a vote on a feature list.
Give your articles a voice with WeDispatch
This blog is itself voiced by WeDispatch. Curious how it sounds on your content?
Book a demo