Update readme & analysis

This commit is contained in:
remsky 2025-01-06 03:49:31 -07:00
parent 720c1fb97d
commit 5199d4ca9a
9 changed files with 3024 additions and 687 deletions

View file

@ -10,12 +10,12 @@
Dockerized FastAPI wrapper for [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) text-to-speech model
- OpenAI-compatible Speech endpoint, with voice combination functionality
- NVIDIA GPU accelerated inference (or CPU) option
- very fast generation time (~35x real time factor via 4060Ti)
- very fast generation time (~30x real time factor via 4060Ti)
- automatic chunking/stitching for long texts
- streaming support w/ variable chunking to control latency
- simple audio generation web ui utility
## Quick Start
The service can be accessed through either the API endpoints or the Gradio web interface.
@ -162,6 +162,76 @@ If you only want the API, just comment out everything in the docker-compose.yml
Currently, voices created via the API are accessible here, but voice combination/creation has not yet been added
</details>
<details>
<summary>Streaming Support</summary>
```python
# OpenAI-compatible streaming
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8880", api_key="not-needed")
# Stream to file
with client.audio.speech.with_streaming_response.create(
model="kokoro",
voice="af_bella",
input="Hello world!"
) as response:
response.stream_to_file("output.mp3")
# Stream to speakers (requires PyAudio)
import pyaudio
player = pyaudio.PyAudio().open(
format=pyaudio.paInt16,
channels=1,
rate=24000,
output=True
)
with client.audio.speech.with_streaming_response.create(
model="kokoro",
voice="af_bella",
response_format="pcm",
input="Hello world!"
) as response:
for chunk in response.iter_bytes(chunk_size=1024):
player.write(chunk)
```
Or via requests:
```python
import requests
response = requests.post(
"http://localhost:8880/v1/audio/speech",
json={
"input": "Hello world!",
"voice": "af_bella",
"response_format": "pcm"
},
stream=True
)
for chunk in response.iter_content(chunk_size=1024):
if chunk:
# Process streaming chunks
pass
```
<p align="center">
<img src="assets/gpu_first_token_timeline_openai.png" width="45%" alt="GPU First Token Timeline" style="border: 2px solid #333; padding: 10px; margin-right: 1%;">
<img src="assets/cpu_first_token_timeline_stream_openai.png" width="45%" alt="CPU First Token Timeline" style="border: 2px solid #333; padding: 10px;">
</p>
Key Streaming Metrics:
- First token latency @ chunksize
- ~300ms (GPU) @ 400
- ~3500ms (CPU) @ 200
- Adjustable chunking settings for real-time playback
*Note: Artifacts in intonation can increase with smaller chunks*
</details>
## Processing Details
<details>
<summary>Performance Benchmarks</summary>

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,23 @@
=== Benchmark Statistics (with correct RTF) ===
Total tokens processed: 1800
Total audio generated (s): 568.53
Total test duration (s): 306.02
Average processing rate (tokens/s): 5.75
Average RTF: 0.55
Average Real Time Speed: 1.81
=== Per-chunk Stats ===
Average chunk size (tokens): 600.00
Min chunk size (tokens): 300
Max chunk size (tokens): 900
Average processing time (s): 101.89
Average output length (s): 189.51
=== Performance Ranges ===
Processing rate range (tokens/s): 5.30 - 6.26
RTF range: 0.51x - 0.59x
Real Time Speed range: 1.69x - 1.96x

View file

@ -3,10 +3,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.4376556873321533,
"time_to_first_chunk": 0.4189143180847168,
"total_time": 1.818483829498291,
"time_to_first_chunk": 1.8067498207092285,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run1_stream.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run1_stream.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -15,10 +15,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.37163758277893066,
"time_to_first_chunk": 0.34892702102661133,
"total_time": 1.6271553039550781,
"time_to_first_chunk": 1.610968828201294,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run2_stream.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run2_stream.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -27,10 +27,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.2654602527618408,
"time_to_first_chunk": 0.2409076690673828,
"total_time": 1.5759549140930176,
"time_to_first_chunk": 1.561316967010498,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run3_stream.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run3_stream.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -39,10 +39,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.24376440048217773,
"time_to_first_chunk": 0.23003816604614258,
"total_time": 1.615680456161499,
"time_to_first_chunk": 1.6035709381103516,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run4_stream.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run4_stream.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -51,10 +51,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.25968003273010254,
"time_to_first_chunk": 0.24081206321716309,
"total_time": 1.6515357494354248,
"time_to_first_chunk": 1.6268820762634277,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run5_stream.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens10_run5_stream.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -63,11 +63,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 1.049060344696045,
"time_to_first_chunk": 0.3336215019226074,
"total_time": 7.368175268173218,
"time_to_first_chunk": 3.4540352821350098,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run1_stream.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run1_stream.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 1
@ -75,11 +75,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 0.8934676647186279,
"time_to_first_chunk": 0.3011031150817871,
"total_time": 6.931752443313599,
"time_to_first_chunk": 3.1553661823272705,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run2_stream.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run2_stream.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 2
@ -87,11 +87,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 0.9444286823272705,
"time_to_first_chunk": 0.3198091983795166,
"total_time": 6.867500066757202,
"time_to_first_chunk": 3.127124309539795,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run3_stream.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run3_stream.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 3
@ -99,11 +99,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 0.9735183715820312,
"time_to_first_chunk": 0.369948148727417,
"total_time": 6.933881521224976,
"time_to_first_chunk": 3.1872360706329346,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run4_stream.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run4_stream.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 4
@ -111,11 +111,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 0.8089118003845215,
"time_to_first_chunk": 0.30179858207702637,
"total_time": 7.605916738510132,
"time_to_first_chunk": 3.6397976875305176,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run5_stream.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens50_run5_stream.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 5
@ -123,11 +123,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.641003131866455,
"time_to_first_chunk": 0.2979745864868164,
"total_time": 14.777218580245972,
"time_to_first_chunk": 3.625889778137207,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run1_stream.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run1_stream.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 1
@ -135,11 +135,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.3709619045257568,
"time_to_first_chunk": 0.4272146224975586,
"total_time": 13.911701202392578,
"time_to_first_chunk": 3.298157215118408,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run2_stream.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run2_stream.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 2
@ -147,11 +147,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.2554471492767334,
"time_to_first_chunk": 0.29790568351745605,
"total_time": 14.451806783676147,
"time_to_first_chunk": 3.8353848457336426,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run3_stream.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run3_stream.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 3
@ -159,11 +159,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.3761844635009766,
"time_to_first_chunk": 0.32633328437805176,
"total_time": 13.941124200820923,
"time_to_first_chunk": 3.3754897117614746,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run4_stream.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run4_stream.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 4
@ -171,11 +171,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.56705904006958,
"time_to_first_chunk": 0.32801246643066406,
"total_time": 15.717307329177856,
"time_to_first_chunk": 3.6421003341674805,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run5_stream.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens100_run5_stream.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 5
@ -183,11 +183,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 5.086699962615967,
"time_to_first_chunk": 0.33925390243530273,
"total_time": 41.16162133216858,
"time_to_first_chunk": 3.7044918537139893,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run1_stream.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run1_stream.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 1
@ -195,11 +195,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 3.827953338623047,
"time_to_first_chunk": 0.39266157150268555,
"total_time": 35.43009877204895,
"time_to_first_chunk": 3.1040024757385254,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run2_stream.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run2_stream.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 2
@ -207,11 +207,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 3.9389824867248535,
"time_to_first_chunk": 0.3231511116027832,
"total_time": 35.285505294799805,
"time_to_first_chunk": 3.657808780670166,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run3_stream.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run3_stream.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 3
@ -219,11 +219,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 3.942399740219116,
"time_to_first_chunk": 0.34731340408325195,
"total_time": 34.47842836380005,
"time_to_first_chunk": 3.2033851146698,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run4_stream.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run4_stream.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 4
@ -231,11 +231,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 3.7748308181762695,
"time_to_first_chunk": 0.40787601470947266,
"total_time": 36.50936222076416,
"time_to_first_chunk": 3.1159815788269043,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run5_stream.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens250_run5_stream.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 5
@ -243,11 +243,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 9.003147840499878,
"time_to_first_chunk": 0.5455703735351562,
"total_time": 86.84899735450745,
"time_to_first_chunk": 5.405678987503052,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run1_stream.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run1_stream.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 1
@ -255,11 +255,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 10.081491231918335,
"time_to_first_chunk": 0.4591703414916992,
"total_time": 74.72578477859497,
"time_to_first_chunk": 3.966891050338745,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run2_stream.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run2_stream.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 2
@ -267,11 +267,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 9.767668962478638,
"time_to_first_chunk": 0.31237053871154785,
"total_time": 68.1974081993103,
"time_to_first_chunk": 3.27712082862854,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run3_stream.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run3_stream.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 3
@ -279,11 +279,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 9.090342998504639,
"time_to_first_chunk": 0.41753244400024414,
"total_time": 72.68819260597229,
"time_to_first_chunk": 3.153608560562134,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run4_stream.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run4_stream.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 4
@ -291,11 +291,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 9.876578330993652,
"time_to_first_chunk": 0.3965120315551758,
"total_time": 67.94887590408325,
"time_to_first_chunk": 3.954728841781616,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run5_stream.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream\\benchmark_tokens500_run5_stream.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 5
@ -303,35 +303,35 @@
],
"summary": {
"10": {
"avg_time_to_first_chunk": 0.296,
"avg_total_time": 0.316,
"avg_time_to_first_chunk": 1.642,
"avg_total_time": 1.658,
"avg_audio_length": 3.45,
"num_successful_runs": 5
},
"50": {
"avg_time_to_first_chunk": 0.325,
"avg_total_time": 0.934,
"avg_audio_length": 15.925,
"avg_time_to_first_chunk": 3.313,
"avg_total_time": 7.141,
"avg_audio_length": 15.825,
"num_successful_runs": 5
},
"100": {
"avg_time_to_first_chunk": 0.335,
"avg_total_time": 1.442,
"avg_audio_length": 30.5,
"avg_time_to_first_chunk": 3.555,
"avg_total_time": 14.56,
"avg_audio_length": 30.35,
"num_successful_runs": 5
},
"250": {
"avg_time_to_first_chunk": 0.362,
"avg_total_time": 4.114,
"avg_audio_length": 78.775,
"avg_time_to_first_chunk": 3.357,
"avg_total_time": 36.573,
"avg_audio_length": 78.175,
"num_successful_runs": 5
},
"500": {
"avg_time_to_first_chunk": 0.426,
"avg_total_time": 9.564,
"avg_audio_length": 156.475,
"avg_time_to_first_chunk": 3.952,
"avg_total_time": 74.082,
"avg_audio_length": 155.125,
"num_successful_runs": 5
}
},
"timestamp": "2025-01-06 00:00:43"
"timestamp": "2025-01-06 03:31:37"
}

View file

@ -3,10 +3,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.7105245590209961,
"time_to_first_chunk": 0.6905441284179688,
"total_time": 1.638200044631958,
"time_to_first_chunk": 1.6232295036315918,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run1_stream_openai.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run1_stream_openai.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -15,10 +15,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.35063982009887695,
"time_to_first_chunk": 0.32647228240966797,
"total_time": 1.4960439205169678,
"time_to_first_chunk": 1.4854960441589355,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run2_stream_openai.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run2_stream_openai.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -27,10 +27,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.43519043922424316,
"time_to_first_chunk": 0.41011548042297363,
"total_time": 1.5055279731750488,
"time_to_first_chunk": 1.4948456287384033,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run3_stream_openai.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run3_stream_openai.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -39,10 +39,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.33886170387268066,
"time_to_first_chunk": 0.32068943977355957,
"total_time": 1.496837854385376,
"time_to_first_chunk": 1.4835176467895508,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run4_stream_openai.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run4_stream_openai.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -51,10 +51,10 @@
{
"text_length": 37,
"token_count": null,
"total_time": 0.31725525856018066,
"time_to_first_chunk": 0.29624342918395996,
"total_time": 1.7330272197723389,
"time_to_first_chunk": 1.7219843864440918,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run5_stream_openai.wav",
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens10_run5_stream_openai.wav",
"audio_length": 3.45,
"target_tokens": 10,
"actual_tokens": 10,
@ -63,11 +63,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 1.0215234756469727,
"time_to_first_chunk": 0.38323354721069336,
"total_time": 6.865253925323486,
"time_to_first_chunk": 3.1809072494506836,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run1_stream_openai.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run1_stream_openai.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 1
@ -75,11 +75,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 1.38511061668396,
"time_to_first_chunk": 0.47052764892578125,
"total_time": 7.975425720214844,
"time_to_first_chunk": 3.2910428047180176,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run2_stream_openai.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run2_stream_openai.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 2
@ -87,11 +87,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 1.0185234546661377,
"time_to_first_chunk": 0.3535764217376709,
"total_time": 6.793715715408325,
"time_to_first_chunk": 3.210068464279175,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run3_stream_openai.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run3_stream_openai.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 3
@ -99,11 +99,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 0.8875925540924072,
"time_to_first_chunk": 0.3373105525970459,
"total_time": 6.639606237411499,
"time_to_first_chunk": 3.0641400814056396,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run4_stream_openai.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run4_stream_openai.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 4
@ -111,11 +111,11 @@
{
"text_length": 212,
"token_count": null,
"total_time": 0.9557526111602783,
"time_to_first_chunk": 0.3364882469177246,
"total_time": 8.100529193878174,
"time_to_first_chunk": 3.3910109996795654,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run5_stream_openai.wav",
"audio_length": 15.925,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens50_run5_stream_openai.wav",
"audio_length": 15.825,
"target_tokens": 50,
"actual_tokens": 50,
"run_number": 5
@ -123,11 +123,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.569596767425537,
"time_to_first_chunk": 0.42070746421813965,
"total_time": 15.246968984603882,
"time_to_first_chunk": 3.1980819702148438,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run1_stream_openai.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run1_stream_openai.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 1
@ -135,11 +135,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.5172030925750732,
"time_to_first_chunk": 0.3982264995574951,
"total_time": 15.934760332107544,
"time_to_first_chunk": 4.23082709312439,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run2_stream_openai.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run2_stream_openai.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 2
@ -147,11 +147,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.5318474769592285,
"time_to_first_chunk": 0.3533785343170166,
"total_time": 13.799078226089478,
"time_to_first_chunk": 3.42996883392334,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run3_stream_openai.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run3_stream_openai.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 3
@ -159,11 +159,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.3858752250671387,
"time_to_first_chunk": 0.3360786437988281,
"total_time": 13.400063037872314,
"time_to_first_chunk": 3.2097883224487305,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run4_stream_openai.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run4_stream_openai.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 4
@ -171,11 +171,11 @@
{
"text_length": 448,
"token_count": null,
"total_time": 1.7841475009918213,
"time_to_first_chunk": 0.34446048736572266,
"total_time": 14.833694219589233,
"time_to_first_chunk": 3.1589744091033936,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run5_stream_openai.wav",
"audio_length": 30.5,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens100_run5_stream_openai.wav",
"audio_length": 30.35,
"target_tokens": 100,
"actual_tokens": 100,
"run_number": 5
@ -183,11 +183,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 4.334965467453003,
"time_to_first_chunk": 0.4336512088775635,
"total_time": 35.49378156661987,
"time_to_first_chunk": 3.852027177810669,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run1_stream_openai.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run1_stream_openai.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 1
@ -195,11 +195,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 5.265941858291626,
"time_to_first_chunk": 0.5461773872375488,
"total_time": 33.59433174133301,
"time_to_first_chunk": 3.2059006690979004,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run2_stream_openai.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run2_stream_openai.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 2
@ -207,11 +207,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 5.66066575050354,
"time_to_first_chunk": 0.4757547378540039,
"total_time": 34.23120045661926,
"time_to_first_chunk": 3.1464977264404297,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run3_stream_openai.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run3_stream_openai.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 3
@ -219,11 +219,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 9.289174318313599,
"time_to_first_chunk": 0.40159058570861816,
"total_time": 36.18487215042114,
"time_to_first_chunk": 3.188844919204712,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run4_stream_openai.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run4_stream_openai.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 4
@ -231,11 +231,11 @@
{
"text_length": 1140,
"token_count": null,
"total_time": 4.425869703292847,
"time_to_first_chunk": 0.40808558464050293,
"total_time": 38.142744302749634,
"time_to_first_chunk": 3.6997063159942627,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run5_stream_openai.wav",
"audio_length": 78.775,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens250_run5_stream_openai.wav",
"audio_length": 78.175,
"target_tokens": 250,
"actual_tokens": 250,
"run_number": 5
@ -243,11 +243,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 9.600461483001709,
"time_to_first_chunk": 0.3966805934906006,
"total_time": 71.48920440673828,
"time_to_first_chunk": 3.148237943649292,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run1_stream_openai.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run1_stream_openai.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 1
@ -255,11 +255,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 8.82239580154419,
"time_to_first_chunk": 0.3900904655456543,
"total_time": 73.53017520904541,
"time_to_first_chunk": 3.464594841003418,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run2_stream_openai.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run2_stream_openai.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 2
@ -267,11 +267,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 10.99152159690857,
"time_to_first_chunk": 0.4041757583618164,
"total_time": 75.52278685569763,
"time_to_first_chunk": 3.5506417751312256,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run3_stream_openai.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run3_stream_openai.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 3
@ -279,11 +279,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 9.12995958328247,
"time_to_first_chunk": 0.43430614471435547,
"total_time": 69.45922994613647,
"time_to_first_chunk": 3.495962619781494,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run4_stream_openai.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run4_stream_openai.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 4
@ -291,11 +291,11 @@
{
"text_length": 2232,
"token_count": null,
"total_time": 10.043727159500122,
"time_to_first_chunk": 0.41181445121765137,
"total_time": 66.66928672790527,
"time_to_first_chunk": 3.301323175430298,
"error": null,
"audio_path": "C:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run5_stream_openai.wav",
"audio_length": 156.475,
"audio_path": "c:\\Users\\jerem\\Desktop\\Kokoro-FastAPI\\examples\\assorted_checks\\benchmarks\\output_audio_stream_openai\\benchmark_tokens500_run5_stream_openai.wav",
"audio_length": 155.125,
"target_tokens": 500,
"actual_tokens": 500,
"run_number": 5
@ -303,35 +303,35 @@
],
"summary": {
"10": {
"avg_time_to_first_chunk": 0.409,
"avg_total_time": 0.43,
"avg_time_to_first_chunk": 1.562,
"avg_total_time": 1.574,
"avg_audio_length": 3.45,
"num_successful_runs": 5
},
"50": {
"avg_time_to_first_chunk": 0.376,
"avg_total_time": 1.054,
"avg_audio_length": 15.925,
"avg_time_to_first_chunk": 3.227,
"avg_total_time": 7.275,
"avg_audio_length": 15.825,
"num_successful_runs": 5
},
"100": {
"avg_time_to_first_chunk": 0.371,
"avg_total_time": 1.558,
"avg_audio_length": 30.5,
"avg_time_to_first_chunk": 3.446,
"avg_total_time": 14.643,
"avg_audio_length": 30.35,
"num_successful_runs": 5
},
"250": {
"avg_time_to_first_chunk": 0.453,
"avg_total_time": 5.795,
"avg_audio_length": 78.775,
"avg_time_to_first_chunk": 3.419,
"avg_total_time": 35.529,
"avg_audio_length": 78.175,
"num_successful_runs": 5
},
"500": {
"avg_time_to_first_chunk": 0.407,
"avg_total_time": 9.718,
"avg_audio_length": 156.475,
"avg_time_to_first_chunk": 3.392,
"avg_total_time": 71.334,
"avg_audio_length": 155.125,
"num_successful_runs": 5
}
},
"timestamp": "2025-01-06 00:02:21"
"timestamp": "2025-01-06 03:42:32"
}

View file

@ -1,9 +1,9 @@
=== Benchmark Statistics (with correct RTF) ===
Total tokens processed: 3150
Total audio generated (s): 1056.03
Total test duration (s): 70.20
Average processing rate (tokens/s): 46.46
Total audio generated (s): 994.22
Total test duration (s): 73.81
Average processing rate (tokens/s): 49.36
Average RTF: 0.07
Average Real Time Speed: 15.00
@ -12,12 +12,12 @@ Average Real Time Speed: 15.00
Average chunk size (tokens): 525.00
Min chunk size (tokens): 150
Max chunk size (tokens): 900
Average processing time (s): 11.57
Average output length (s): 176.00
Average processing time (s): 12.12
Average output length (s): 165.70
=== Performance Ranges ===
Processing rate range (tokens/s): 40.07 - 53.57
RTF range: 0.06x - 0.08x
Real Time Speed range: 12.50x - 16.67x
Processing rate range (tokens/s): 30.33 - 63.56
RTF range: 0.05x - 0.10x
Real Time Speed range: 10.00x - 20.00x

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

After

Width:  |  Height:  |  Size: 260 KiB