<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hands-On AI Tools</title>
    <description>The latest articles on DEV Community by Hands-On AI Tools (@handsonaitools).</description>
    <link>https://dev.to/handsonaitools</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4225527%2Fc9e84b19-47f3-4151-8295-6f58875f6d4d.png</url>
      <title>DEV Community: Hands-On AI Tools</title>
      <link>https://dev.to/handsonaitools</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/handsonaitools"/>
    <language>en</language>
    <item>
      <title>Gamma 5 Free Plan Review: I Turned One of My Articles Into a 10-Slide Deck</title>
      <dc:creator>Hands-On AI Tools</dc:creator>
      <pubDate>Wed, 04 Nov 2026 06:51:31 +0000</pubDate>
      <link>https://dev.to/handsonaitools/gamma-5-free-plan-review-i-turned-one-of-my-articles-into-a-10-slide-deck-1in5</link>
      <guid>https://dev.to/handsonaitools/gamma-5-free-plan-review-i-turned-one-of-my-articles-into-a-10-slide-deck-1in5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From pasted article to a finished 10-slide deck took about two and a half minutes in English, including one error that a page refresh fixed, and about three minutes in Chinese.&lt;/li&gt;
&lt;li&gt;The results table came through with every number right in both languages. Elsewhere the agent added claims my article never made, such as "22x faster", and then told me it had added nothing.&lt;/li&gt;
&lt;li&gt;Asking the agent to fix one slide worked: it changed only that slide, in under a minute, and showed the original and the edit side by side.&lt;/li&gt;
&lt;li&gt;On the free plan a deck cost me about 130 to 140 of the 400 signup credits, Gamma stops at 10 slides per prompt, and every exported slide carries a "Made with Gamma" badge.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tested on:&lt;/strong&gt; Gamma 5 on the free plan, Standard effort, November 3, 2026, in Chrome on Windows 11. The PPTX export was opened in Microsoft PowerPoint.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wanted to know whether &lt;a href="https://gamma.app" rel="noopener noreferrer"&gt;Gamma&lt;/a&gt; could turn something I had already written into slides I would actually present, without me rewriting it first. So I gave it a real document: my &lt;a href="https://handsonaitools.com/posts/elevenlabs-free-vs-qwen3-tts-chinese/" rel="noopener noreferrer"&gt;ElevenLabs vs Qwen3-TTS test&lt;/a&gt;, with its methods, its seven-version results table and its caveats. Then I read every slide against the original.&lt;/p&gt;

&lt;p&gt;I used a new account on the free plan. When I logged in, Gamma opened with an announcement for Gamma 5, which it calls its biggest update so far: an agent you chat with now plans, writes and designs the whole thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc6gfiiksz1eer4w57t6j.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc6gfiiksz1eer4w57t6j.webp" alt="Gamma 5 announcement shown at first login" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I gave it
&lt;/h2&gt;

&lt;p&gt;The home screen asks "What should we create together?" and offers Presentation, Document, Carousel, Image, Beautify and Import. A balance in the top corner showed 400 credits. Next to the prompt box is an effort setting with three levels: Lite, Standard and Max, where Max needs the Pro plan and more effort uses more credits. I left it on Standard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcncv30oph0wjexmwc1p8.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcncv30oph0wjexmwc1p8.webp" alt="Gamma home screen with the prompt box and the 400-credit balance" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I picked Presentation and pasted the article, about 4 KB of text with my instructions at the top: ten slides, keep every number and conclusion, add no facts that are not in the article, and give the results table its own slide. Gamma turned the long paste into an attachment called "Pasted text", so I added one line in the box itself: "Make a 10-slide presentation from the attached article. Keep all numbers as written."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fai3fcsk3a0wswh9ylf6q.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fai3fcsk3a0wswh9ylf6q.webp" alt="The pasted article as an attachment, with the one-line instruction underneath" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The first try failed, the refresh worked
&lt;/h2&gt;

&lt;p&gt;Sending it gave me a cat with a magnifying glass and "Couldn't open chat. Refresh the page to try again."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F75elh7w4lxo2x0aph4w2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F75elh7w4lxo2x0aph4w2.webp" alt="Error after the first submit: Couldn't open chat" width="600" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a refresh the job was already running. The agent named the deck "ElevenLabs vs local TTS deck", showed "Creating Plan" and then "Creating your gamma".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fukt2w35o2ax9gpc81xvp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fukt2w35o2ax9gpc81xvp.webp" alt="After the refresh: the agent creating a plan" width="760" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before it finished, it posted a note saying the first draft was done and it was going over it again, because a few lines were smaller than the text around them, one title didn't match the others and one panel sat off the margin. Then it reported that the deck was ready, that it had kept every number and conclusion as written, and that the results table was on slide 6. From pressing send to that message took about two and a half minutes, refresh included.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ip17dsaa9emdersn9jb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ip17dsaa9emdersn9jb.webp" alt="The finished deck with the agent's summary on the left" width="799" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking the slides against the article
&lt;/h2&gt;

&lt;p&gt;The style it chose is called Freeform: heavy black headlines, a decorative selection box with corner handles around the title, a cursor icon, a barcode, and glossy AI images of a blue glass microphone and yellow glass spheres. Every slide also repeats the full article title in tiny spaced capitals at the top, which looks odd at that length.&lt;/p&gt;

&lt;p&gt;The results table is the slide I expected to break, and it was perfect. Every cell matched my table, and it highlighted the "Most natural" ranking and the preset voice's misread English name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzwdnm4xpj9cby2plj2kp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzwdnm4xpj9cby2plj2kp.webp" alt="Slide 6, the results table, with every number matching the article" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slide 8 was wrong in two ways. It put the 176 to 184 seconds per take under the cloned voice, when that figure belongs to the preset voice; the clone's figure is 3 to 6 seconds of computing per second of speech. It also ended with "Cloud synthesis delivered 22x faster turnaround than the 14-core Intel laptop CPU". My article contains neither "22x" nor "14-core". The second is true of that processor, and the first is arithmetic the agent did on its own, but I had asked for no added facts, and the summary told me it had kept to the article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4rz7haqhmvnghpgbmiy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4rz7haqhmvnghpgbmiy.webp" alt="Slide 8 before the fix, with the misplaced timing and the added &amp;quot;22x&amp;quot; claim" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slide 7 had a layout problem: the three boxes on the right run into the edge of the slide. The agent's own note said it had left slide 7 as drafted. The other slides held up, apart from small additions such as an IPA spelling of "Muse".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxqyhwy37pi1mx66ishom.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxqyhwy37pi1mx66ishom.webp" alt="Slide 7, with the right-hand boxes touching the slide edge" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Asking it to fix one slide
&lt;/h2&gt;

&lt;p&gt;I told the agent what was wrong with slide 8, gave it the correct figure and asked it to change only that slide. It replied with its plan, and less than a minute later it was done. The clone's box now said 3 to 6 seconds of computing per second of speech, and both added claims were gone. It also corrected the slide's speaker notes, which had repeated the same mix-up, and confirmed that no other slides changed.&lt;/p&gt;

&lt;p&gt;The panel then showed the original and the modified slide side by side, with the new one selected and a "Compare all edits" link. If the fix had been wrong, I could have picked the original back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66zevl8lgrkzg2fsc1qy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66zevl8lgrkzg2fsc1qy.webp" alt="Slide 8 after the fix, with the original and modified versions in the agent panel" width="799" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The same test in Chinese
&lt;/h2&gt;

&lt;p&gt;My readers include Chinese speakers, so I ran the Chinese version of the article through the same steps. The agent replied in Chinese, named the deck 中文AI配音测评 and finished in about 175 seconds. Chinese text rendered cleanly in a different style, with soft 3D illustrations, and the results table was again correct.&lt;/p&gt;

&lt;p&gt;It also hit the free plan's limit. The agent had planned 11 slides, the free plan creates at most 10, and the slide it dropped was the last one, "What I did not test". The agent said so plainly, and a banner offered an upgrade to finish the deck.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faemneftj85tsbeln7lev.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faemneftj85tsbeln7lev.webp" alt="The Chinese deck with the banner: Free includes up to 10 slides, created 10 of 11" width="799" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Chinese deck added more than the English one. Slide 4 described a blind test with the seven audio files shuffled at random, when I had simply listened to them one after another. Slide 7 gained a "core conclusion" in bold that I never wrote, saying that realism in voiceover comes from the breathing room between punctuation marks. Slide 8 calculated a "22.5x" efficiency gap and said ElevenLabs runs on a cloud cluster. The agent's summary again said it had added nothing beyond the article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1khjfoot5ogiwa6rzv1y.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1khjfoot5ogiwa6rzv1y.webp" alt="Chinese slide 7 with an added &amp;quot;core conclusion&amp;quot;" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Exporting to PowerPoint
&lt;/h2&gt;

&lt;p&gt;The export panel offers PDF, PowerPoint, Google Slides and PNGs, at Basic, Standard or Detailed quality. "Hide Made with Gamma badge" is a Plus feature. The panel also suggests installing two fonts, Outfit and Urbanist, and warns that gradient text and frosted backgrounds fall back to simpler styles in PDF and PowerPoint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fecok63maezzqkr758u4z.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fecok63maezzqkr758u4z.webp" alt="Export options, with the badge toggle marked PLUS and the font note" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The PowerPoint file took under half a minute and came to 2.36 MB. Inside were 10 slides of editable text, a real PowerPoint table on slide 6, speaker notes on every slide and the six font files embedded, so it displayed correctly in PowerPoint without installing anything.&lt;/p&gt;

&lt;p&gt;Every slide had the "Made with Gamma" badge in the bottom right corner. The title wrapped differently from the web version, so the decorative box no longer lines up with the text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ferg5l8wtikc8d3rnzdws.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ferg5l8wtikc8d3rnzdws.webp" alt="The exported title slide in PowerPoint, with the Made with Gamma badge in the corner" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On slide 8 the corrected sentence is longer than the original, and in PowerPoint its last word spills just below the box.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtl1ug2gc6e9vfojg08d.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtl1ug2gc6e9vfojg08d.webp" alt="Exported slide 8 in PowerPoint, with the last word running past the box" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the free plan gets you
&lt;/h2&gt;

&lt;p&gt;The balance went from 400 to 270 after the English deck and the one-slide fix, then to 131 after the Chinese deck, so a 10-slide deck cost me 130 to 140 credits. That is about three decks from the signup credits. The credit panel says upgrading gets you credits that refresh monthly; according to Gamma's pricing page, the free plan's 400 come once, at signup.&lt;/p&gt;

&lt;p&gt;On the pricing page on November 3, 2026, Plus cost $12 a month, or $9 a month billed yearly, for 1,500 credits a month, up to 100 slides per prompt and no Gamma branding. Pro cost $25, or $18 billed yearly, for 4,000 credits a month, better image models and custom branding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Would I use it?
&lt;/h2&gt;

&lt;p&gt;For a first draft of a deck from my own writing, yes. It took a long article and produced a structured, good-looking deck faster than I could pick a template, and the hardest slide, the table, was exact. The fix-one-slide request was the best part of the test.&lt;/p&gt;

&lt;p&gt;What I wouldn't do is present it unchecked. In both languages it added numbers and conclusions I never wrote, and its own summary said it hadn't, so the summary is no substitute for reading every slide against the source. The free credits are enough to try that on two or three of your own documents before paying. I tested only the Presentation mode, Standard effort and one article in two languages.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://handsonaitools.com/posts/gamma-5-free-plan-review/" rel="noopener noreferrer"&gt;Hands-On AI Tools&lt;/a&gt;, where I test AI tools on real tasks. Cover: the title slide Gamma generated in this test; the images on it were made by Gamma.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>review</category>
      <category>tools</category>
    </item>
    <item>
      <title>How I Clone My Own Voice on a Laptop With No GPU (Qwen3-TTS)</title>
      <dc:creator>Hands-On AI Tools</dc:creator>
      <pubDate>Wed, 04 Nov 2026 06:48:52 +0000</pubDate>
      <link>https://dev.to/handsonaitools/how-i-clone-my-own-voice-on-a-laptop-with-no-gpu-qwen3-tts-3j10</link>
      <guid>https://dev.to/handsonaitools/how-i-clone-my-own-voice-on-a-laptop-with-no-gpu-qwen3-tts-3j10</guid>
      <description>&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A laptop with no GPU can run Qwen3-TTS voice cloning. Expect 3 to 6 seconds of computing per second of speech.&lt;/li&gt;
&lt;li&gt;Use reference clips of 7 to 15 seconds. About 30 seconds in total was enough for me.&lt;/li&gt;
&lt;li&gt;If your reference is casual talking, use x-vector only mode, or the clone will copy your hesitations.&lt;/li&gt;
&lt;li&gt;Generate 3 to 5 takes per line and pick by where the pauses fall.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tested on:&lt;/strong&gt; Windows 11 laptop, Intel Core i9-13900H, 32 GB RAM, integrated graphics only (no NVIDIA GPU). Qwen3-TTS-12Hz-1.7B-Base, qwen-tts 0.1.1, Python 3.11.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I post short animated videos that explain AI topics, narrated in Chinese. Recording the narration was the slowest part of every video. I stumble, re-record, and takes from different days don't sound the same. I wanted to type the script and get narration in my own voice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.claude.com/product/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;, an AI coding assistant, set this up on my laptop. I described what I wanted, listened to the results and made the calls. You can skip the code blocks; the settings that mattered are explained in plain words.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I used
&lt;/h2&gt;

&lt;p&gt;The model is Qwen3-TTS-12Hz-1.7B-Base, an open-source text-to-speech model from Alibaba's Qwen team (Apache-2.0 license, code at &lt;a href="https://github.com/Qwen/Qwen3-TTS" rel="noopener noreferrer"&gt;github.com/Qwen/Qwen3-TTS&lt;/a&gt;). The "Base" version is the one that clones voices. I downloaded the weights from ModelScope, which was by far the fastest source where I live.&lt;/p&gt;

&lt;p&gt;It runs through the &lt;code&gt;qwen-tts&lt;/code&gt; Python package, version 0.1.1, in a Python 3.11 virtual environment. My system Python was newer than the machine-learning packages supported, so a separate 3.11 environment saved a lot of trouble.&lt;/p&gt;

&lt;p&gt;Everything runs on the CPU in float32, with no CUDA and no NVIDIA card.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Reference audio from a recording I already had
&lt;/h2&gt;

&lt;p&gt;I didn't record anything new. I had a long screen recording where I was talking, and I cut three clips from it, about 33 seconds in total.&lt;/p&gt;

&lt;p&gt;Longer clips sounded more like me. Clips of 7 to 15 seconds gave a clearly closer match than 4-second clips.&lt;/p&gt;

&lt;p&gt;If there is music or noise behind your voice, remove it first. On my CPU, the BS-Roformer separation model needed about two hours for three minutes of audio. The Kim_Vocal_2 model in the &lt;code&gt;audio-separator&lt;/code&gt; package did the same job in about three minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: The setting that decides whether it sounds fluent
&lt;/h2&gt;

&lt;p&gt;Qwen3-TTS Base can clone a voice in two ways:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;What you give it&lt;/th&gt;
&lt;th&gt;What it copies&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ICL (the default)&lt;/td&gt;
&lt;td&gt;One clip plus its exact transcript&lt;/td&gt;
&lt;td&gt;Your voice and the way you spoke in that clip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x-vector only&lt;/td&gt;
&lt;td&gt;One or more clips, no transcript&lt;/td&gt;
&lt;td&gt;Only the sound of your voice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I started with ICL because it's the default. The problem was my reference clip: unscripted talking, with hesitations and uneven pace. The clone copied that too. Every line came out with the same stop-start rhythm, and it didn't sound fluent.&lt;/p&gt;

&lt;p&gt;Switching to x-vector only mode fixed it. The model keeps my voice but uses its own steadier pacing, which is what narration needs. Since no transcript is needed, I could also feed it several clips at once.&lt;/p&gt;

&lt;p&gt;If your reference is clean read-aloud speech, ICL may be fine. If it's casual talking, try x-vector first.&lt;/p&gt;

&lt;p&gt;This is a simplified version of the script on my laptop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;soundfile&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;qwen_tts&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Qwen3TTSModel&lt;/span&gt;

&lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_num_threads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# how many CPU threads to use
&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Qwen3TTSModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;models/Qwen3-TTS-12Hz-1.7B-Base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;device_map&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cpu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;float32&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Join a few clips of my voice (mono WAV) with a short silence between them
&lt;/span&gt;&lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_voice.wav&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;float32&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;gap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zeros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;float32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;clips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="mf"&gt;12.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;23.5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;61.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;72.7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;130.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;141.1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;  &lt;span class="c1"&gt;# start, end in seconds
&lt;/span&gt;&lt;span class="n"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;clips&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt; &lt;span class="n"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ref&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concatenate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# x-vector only: copy the voice, not the rhythm. No transcript needed.
&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_voice_clone_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;ref_audio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;ref_text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x_vector_only_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;wavs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;out_sr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_voice_clone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;大家好，今天聊聊怎么用 AI 给视频配音。&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chinese&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;voice_clone_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;line01.wav&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wavs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;out_sr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For ICL mode you pass one clip, its exact transcript as &lt;code&gt;ref_text&lt;/code&gt;, and &lt;code&gt;x_vector_only_mode=False&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Make several takes and keep the best one
&lt;/h2&gt;

&lt;p&gt;The same line comes out a little different every time. Some takes pause in the right places, some rush through a comma. So I generate every line 3 to 5 times and pick one.&lt;/p&gt;

&lt;p&gt;What I listen for: does it pause at the commas, and does it avoid long gaps in the middle of a phrase. That matters more than small differences in tone.&lt;/p&gt;

&lt;p&gt;With twenty-odd lines and several takes each, listening to everything gets tiring. So a script ranks the takes first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It transcribes each take with a speech recognizer (Paraformer, for Chinese) and compares it with the script, to catch swallowed or wrong words.&lt;/li&gt;
&lt;li&gt;It measures how close the voice is to a separate sample of my real voice that wasn't used for cloning (CAM++ speaker verification).&lt;/li&gt;
&lt;li&gt;It counts the pauses and compares them with the commas in the line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I only listen to the top few.&lt;/p&gt;

&lt;h2&gt;
  
  
  How fast is it on a CPU?
&lt;/h2&gt;

&lt;p&gt;From my logs, generating up to six lines per batch: roughly 3 to 6 seconds of computing for each second of speech. One batch produced 37 seconds of speech in 127 seconds; another produced 24 seconds in 147 seconds.&lt;/p&gt;

&lt;p&gt;For a two-minute narration that means about 7 to 12 minutes per take, or roughly half an hour for three takes. It's slow, but it runs in the background. Loading the model also takes time, so I generate all the lines in one run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller things that helped
&lt;/h2&gt;

&lt;p&gt;Some Chinese characters have more than one pronunciation, and the model sometimes picks the wrong one. When that happens I swap in a same-sounding character in the text sent to the model and keep the correct word in the subtitles. For example, 长连接 became 常连接, and 回调 became 回掉.&lt;/p&gt;

&lt;p&gt;Not every video needs my voice, either. For quick news videos I use a preset voice from the CustomVoice version of the same model, which needs no reference audio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Only clone voices you have permission to use
&lt;/h2&gt;

&lt;p&gt;Clone your own voice, or a voice whose owner has agreed. Don't publish a cloned voice of anyone else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Would a paid service be easier?
&lt;/h2&gt;

&lt;p&gt;Probably. Hosted services such as &lt;a href="https://elevenlabs.io" rel="noopener noreferrer"&gt;ElevenLabs&lt;/a&gt; need no setup. I have since run the same script through ElevenLabs' free plan, and its stock Mandarin voices sounded more natural than my clone: &lt;a href="https://handsonaitools.com/posts/elevenlabs-free-vs-qwen3-tts-chinese/" rel="noopener noreferrer"&gt;ElevenLabs free plan vs a local open-source model&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://handsonaitools.com/posts/clone-your-voice-on-a-laptop-without-gpu/" rel="noopener noreferrer"&gt;Hands-On AI Tools&lt;/a&gt;, where I test AI tools on real tasks. Cover: official Qwen3-TTS introduction graphic from the Qwen team's GitHub repository.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
