<?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: Xu Liu</title>
    <description>The latest articles on DEV Community by Xu Liu (@aicontractgen).</description>
    <link>https://dev.to/aicontractgen</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3941444%2Ffd375101-dad5-452e-9e55-91c2903d489e.png</url>
      <title>DEV Community: Xu Liu</title>
      <link>https://dev.to/aicontractgen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aicontractgen"/>
    <language>en</language>
    <item>
      <title>Turning Any Story Into a Short Drama Video with AI — A Practical Workflow</title>
      <dc:creator>Xu Liu</dc:creator>
      <pubDate>Sat, 23 May 2026 16:49:34 +0000</pubDate>
      <link>https://dev.to/aicontractgen/turning-any-story-into-a-short-drama-video-with-ai-a-practical-workflow-52h3</link>
      <guid>https://dev.to/aicontractgen/turning-any-story-into-a-short-drama-video-with-ai-a-practical-workflow-52h3</guid>
      <description>&lt;p&gt;If you've ever wanted to turn a short story, a chapter from a novel, or even a fanfiction snippet into a full short drama video — without learning Premiere, DaVinci Resolve, or a TTS pipeline — the AI tooling has finally caught up.&lt;/p&gt;

&lt;p&gt;This post walks through a practical end-to-end workflow my team has been iterating on for the past few months.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 hard problems of story-to-video
&lt;/h2&gt;

&lt;p&gt;Anyone who's tried this manually knows the painful parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Character consistency across scenes&lt;/strong&gt; — the protagonist needs the same face, hair, outfit shot after shot. Stable Diffusion alone drifts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene segmentation&lt;/strong&gt; — turning a paragraph of prose into a sequence of visually coherent storyboard panels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voiceover variety&lt;/strong&gt; — narrator vs. character dialog, with distinct voices that don't sound robotic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style choice&lt;/strong&gt; — realistic vs. anime vs. Ghibli vs. cinematic — each requires different prompt grammar and model weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stitching&lt;/strong&gt; — pulling images, voice tracks, and subtitles into a final timeline.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solving any one of these is a weekend hack. Solving all five end-to-end is what makes a real product.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workflow that actually scales
&lt;/h2&gt;

&lt;p&gt;The pipeline I've settled on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Story text
    │
    ├── LLM pass 1: characters + visual identities
    ├── LLM pass 2: scene breakdown (storyboard JSON)
    ├── Image gen per scene (reference-locked for character consistency)
    ├── TTS per character (multi-voice)
    └── Render: subtitles + transitions + BGM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pass 1 is the unlock. You ask the LLM to read the whole story and emit a JSON like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"characters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Anna"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"hair"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"short black bob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"outfit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"navy trench coat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"voice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"female_warm_alto"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"David"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"hair"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"messy brown"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"outfit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gray hoodie"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"voice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"male_low_thoughtful"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then every scene render gets the character's identity sheet appended to its prompt. That's how you keep the same face from scene 1 to scene 30.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-built option
&lt;/h2&gt;

&lt;p&gt;If you don't want to build this yourself, &lt;a href="https://storyintovideo.com/" rel="noopener noreferrer"&gt;StoryIntoVideo&lt;/a&gt; is the pre-built version of basically the same pipeline. Paste a novel chapter, pick a style (realistic, anime, Ghibli, cinematic, oil painting, watercolor), and it does all of the above — character extraction, storyboard, multi-voice narration, render. Free tier exists for trying it on a chapter or two before committing.&lt;/p&gt;

&lt;p&gt;I keep coming back to it for two reasons: character consistency across long stories actually holds, and the voice-per-character thing is automatic — no manual per-line voice tagging.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd still love to see improved
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Editable storyboards&lt;/strong&gt; before render — preview the JSON, tweak one scene's prompt, re-render just that scene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom voice cloning&lt;/strong&gt; with 30s samples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Longer outputs&lt;/strong&gt; — most tools cap at ~5 minutes; novel chapters often need 10+.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're playing with this space, the bottleneck right now isn't generation quality — it's the orchestration layer. That's where most of the magic happens.&lt;/p&gt;

&lt;p&gt;Curious what others are using. Drop your stack in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>I built an AI Contract Generator so freelancers stop drafting NDAs at 1am</title>
      <dc:creator>Xu Liu</dc:creator>
      <pubDate>Wed, 20 May 2026 06:03:26 +0000</pubDate>
      <link>https://dev.to/aicontractgen/i-built-an-ai-contract-generator-so-freelancers-stop-drafting-ndas-at-1am-4mbm</link>
      <guid>https://dev.to/aicontractgen/i-built-an-ai-contract-generator-so-freelancers-stop-drafting-ndas-at-1am-4mbm</guid>
      <description>&lt;h1&gt;
  
  
  Why I built it
&lt;/h1&gt;

&lt;p&gt;A freelancer friend lost a four-figure project because the client ghosted right after the work was done — no NDA, no signed service agreement, just a Slack thread and good faith. Lawyers wanted &lt;strong&gt;$300+&lt;/strong&gt; to draft a one-page NDA. Templates from random PDF sites were either out of date or copy-pasted to the point where their clauses contradicted each other.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://contractgenerator.net/" rel="noopener noreferrer"&gt;AI Contract Generator&lt;/a&gt; — a free AI contract generator tool that turns plain-English descriptions into a real, downloadable PDF contract in about a minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually does
&lt;/h2&gt;

&lt;p&gt;You describe what you need in natural language:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Two-month service agreement between me (freelance developer) and an early-stage startup, net-15 payment terms, mutual NDA on tech stack details, 30-day kill-fee clause."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI picks the right template (service / NDA / employment / partnership / rental), drafts the clauses, and drops you into an inline editor where you can change names, dates, payment terms — anything — and export to PDF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I bothered
&lt;/h2&gt;

&lt;p&gt;Most "free legal template" sites are SEO traps. You search "free NDA template", land on a PDF that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;has a placeholder city in California even though you're in the UK,&lt;/li&gt;
&lt;li&gt;references "Exhibit A" which doesn't exist,&lt;/li&gt;
&lt;li&gt;has the wrong jurisdiction in the dispute resolution clause.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a tool where:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You don't need to know legalese.&lt;/strong&gt; Describe the situation in your own words, the AI translates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The output is editable.&lt;/strong&gt; Generated clause too aggressive? Edit it inline. Want to soften the kill-fee? Change one line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's actually free to try.&lt;/strong&gt; No card before you see the output.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The stack (for the dev nerds)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Next.js App Router on the front&lt;/li&gt;
&lt;li&gt;LLM orchestration with structured output for clause generation (so the JSON schema is enforced, not vibes)&lt;/li&gt;
&lt;li&gt;PDF rendering server-side so layout stays consistent&lt;/li&gt;
&lt;li&gt;Inline editor synced back to the contract JSON so "edit then export" round-trips cleanly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trickiest part wasn't the model — it was the &lt;strong&gt;constraint encoding&lt;/strong&gt;: making sure when someone says "net-15 payment, late fee 1.5% per month", the resulting clause reads as a real lawyer would write it, not as ChatGPT word soup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Freelancers who need NDAs and service agreements without paying $300/contract&lt;/li&gt;
&lt;li&gt;Landlords drafting rental agreements&lt;/li&gt;
&lt;li&gt;Founders sealing partnership / employment deals&lt;/li&gt;
&lt;li&gt;Small business owners who need a contract today, not in two weeks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's free to try — no signup wall before the first contract. If you've ever spent an hour copy-pasting clauses out of a PDF you don't trust, give it a go: &lt;code&gt;contractgenerator.net&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Feedback welcome — what contract types do you want next? I'm reading every comment.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building this in public — follow along for more notes on AI + legal tooling.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
