bedvibe.studio

BedVibe Studios — Engineering

Panagiotis (Panos) Gkilis, machine learning engineer and founder of BedVibe Studios

Panagiotis (Panos) Gkilis

Machine Learning Engineer · Independent Researcher · Founder of BedVibe Studios

Full profile and CV

I build AI and speech systems end to end — and then I build the instruments that tell me when those systems are lying about being correct. A fault that returns an error is one you fix that afternoon. A fault that returns a plausible success is one you ship.

That habit came out of the laboratory. Years of natural-sciences coursework and bench work train one reflex above all others: an experiment is not finished when it produces a number, but when the error on that number has been characterised, bounded and stated. Systematic versus random error, propagation, precision against accuracy, and the discipline of declaring what a measurement cannot resolve — those are the same habits that make an evaluation gate worth trusting.

730Mparameter speech model, trained from scratch
10published research records with DOIs
4verification libraries on PyPI

What this is all building toward

Most of the projects below are steps, not destinations. There are two long arcs, and nearly everything here belongs to one of them.

1 · Measuring the human voice

How far can a voice move — in pitch, effort, emotion, phonation — before the machines that recognise it decide it belongs to someone else? The speaker-drift replication, the fourteen-encoder benchmark, the in-house parallel corpus and spkproof are all instruments pointed at the same question: what the space of one person’s voice actually looks like, and where every current model misreads it.

2 · Agents that can say “I don’t know”

One rule, applied at every layer: an absent or invalid value must never be able to read as a good one. Retrieval, coverage accounting, typed tool contracts, admission control and observation sit behind a single protocol boundary — so that separate agents, working on separate problems, can see and trust each other’s verdicts instead of each re-deciding in private.

Python libraries

All four are on PyPI, MIT, and installable. They are the measurement tools — not the whole of the work. The full record is in the portfolio.

ttsproof

v0.4.0active

Automated failure-mode QA for text-to-speech.

trainproof

v0.21.0active

A deterministic linter for ML training runs.

notchecked

v0.2.0active

Coverage accounting for validators: what was checked, what could not be checked, and what was never in scope.

spkproof

v0.3.0active

Deterministic checks for speaker-verification studies.

Sections

The same writing, grouped by what kind of work it is.

Latest Articles

Genuine Human Speech, Called Synthetic. Nothing Was Generated.

September 2026

Thirteen frozen synthetic-speech detectors, declared and hashed before any was scored. Hold the speaker, words, performance, room and microphone fixed on genuine studio recordings, apply an ordinary transformation that generates no speech, and measure the paired change. A neural-codec encode-decode moved 9 of 13 detectors past Holm correction, three of them fully prospective at 47 of 47 utterances with rank-biserial of exactly -1.000. Griffin-Lim, a 1984 algorithm with no neural network, moved 12 of 13, so the phenomenon is about reconstruction history rather than codecs. The codec-trained and ASVspoof-era families fail on opposite inputs, so choosing a detector is choosing which false positive to accept. No mechanism is identified, no listening test was run, and thirteen of the author's own claims were withdrawn after three rounds of independent adversarial audit.

Three of Twenty Decoders Actually Stream. My Quality Metric Was Beaten by an Algorithm from 1984.

September 2026

Twenty neural audio decoders, five pre-registered gates, identical audio. Only three reproduce full-context output from partial input with load-bearing state - the causal FocalCodec configurations, at state ratios of 3,530 to 36,740 against a threshold of 10 - while fifteen are stateless chunking and the non-causal negative controls sit at exactly 1. The sole pre-registered cross-arm quality metric was topped by Griffin-Lim, zero trained parameters, in six states of six; the obvious explanation was tested and refuted. A second measurement sharing no implementation, speaker-embedding retention across three separately calibrated encoders, found a near-zero median additional change for the same three arms when streamed - offline-streamed cosine 0.999866 to 0.999946 - where thirteen others lose -0.078 to -0.742 on the separate retention delta. Five independent audits found three defects that changed conclusions, and a fifth round after publication found the advertised reproduction commands did not run. Corrected in v1.0.1; no measurement changed. No listening test was run.

I Wrote the Kernel. Then I Measured It, and at My Model's Shape It Was 1.67x Slower Than Doing Nothing.

September 2026

A hand-written Triton LayerNorm against PyTorch eager and torch.compile on one RTX 5080, at six batch sizes. Above roughly 4,096 rows the kernel wins on time and wins harder on memory - 1.36x faster at 65,536 rows using half the peak memory, 258.5 MB against 512.5 MB. Below that crossover it loses, and this model trains at 128 rows, where it is 1.67x slower than doing nothing. Nothing at that shape is bandwidth-bound: the cost is kernel launch, so the right optimisation is fewer launches, not a better kernel. Includes the two defects the harness found in itself and one cell too unstable to quote.

The Compiler Got 5% Slower. The Benchmark Called It a 10% Regression a Quarter of the Time.

September 2026

IBM's Benchpress pins the seeds that build its circuits and passes no seed to the code that compiles them, so every gate count it reports is one draw from an unmeasured distribution. On bv_n140 over 400 seeds per version across 21 processes, the real change between Qiskit 1.4.3 and 2.0.0 is +5.37% [+4.27, +6.50] — yet the suite's own three-run protocol calls it a >=10% regression 24.4% of the time [19.5, 31.1]. A disjoint 200-seed sample across ten fresh processes reproduces it at 22.6%. Twenty runs per version, about forty hours of compute, still leaves 3.74%. A pre-registered replication over 39 circuits is reported in full, along with four claims withdrawn on the record and six defects an independent audit found in the measuring apparatus itself.