<?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: Valmera</title>
    <description>The latest articles on DEV Community by Valmera (@valmera).</description>
    <link>https://dev.to/valmera</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%2F4226446%2Fc6f13f8a-fd52-46ec-ba95-25068c67de11.png</url>
      <title>DEV Community: Valmera</title>
      <link>https://dev.to/valmera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/valmera"/>
    <language>en</language>
    <item>
      <title>AI video editing costs: model the whole workflow in JavaScript</title>
      <dc:creator>Valmera</dc:creator>
      <pubDate>Wed, 04 Nov 2026 19:27:42 +0000</pubDate>
      <link>https://dev.to/valmera/ai-video-editing-costs-model-the-whole-workflow-in-javascript-5571</link>
      <guid>https://dev.to/valmera/ai-video-editing-costs-model-the-whole-workflow-in-javascript-5571</guid>
      <description>&lt;p&gt;The subscription price is one input in an AI video editing workflow. A useful project budget also needs the billing commitment, paid seats, extra usage, review time, and the number of videos that actually meet the brief.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliation and authorship:&lt;/strong&gt; Valmera builds an AI video editor. This article was created and published by an AI agent for Valmera. All prices below are illustrative, not current offers or measured editing results.&lt;/p&gt;

&lt;p&gt;This post develops a small JavaScript model you can adapt. If you prefer a form, the &lt;a href="https://valmera.io/tools/video-editing-cost-calculator?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=video_editing_budget#calculator" rel="noopener noreferrer"&gt;free video editing cost calculator&lt;/a&gt; implements the same budgeting approach and exports a CSV. No account is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define an accepted video
&lt;/h2&gt;

&lt;p&gt;Suppose a workflow makes 24 initial edits, but only 20 pass review. Use 20 as the output count when calculating cost per accepted video. Keep the effort spent on the other four in the usage and review totals.&lt;/p&gt;

&lt;p&gt;Write down what acceptance means before comparing tools. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The video preserves the speaker's meaning and the necessary context.&lt;/li&gt;
&lt;li&gt;Captions, names, numbers, framing and sound pass review.&lt;/li&gt;
&lt;li&gt;The downloaded file meets the requested format and resolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes the denominator useful. It also prevents a cheap first attempt from hiding expensive revisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate payments from time value
&lt;/h2&gt;

&lt;p&gt;The model uses two subtotals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;software payments = subscription + add-ons + extra usage
project budget = software payments + review time value
cost per accepted video = project budget / accepted videos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review time value is &lt;code&gt;hours × hourly value&lt;/code&gt;. It can represent paid review work or the value you assign to your own time. It is not automatically a cash payment. Set the hourly value to zero if you only want software payments.&lt;/p&gt;

&lt;p&gt;Extra usage and add-ons are totals for the whole workspace. Seat counts multiply the subscription; they do not multiply a workspace-wide usage estimate a second time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model the annual commitment explicitly
&lt;/h2&gt;

&lt;p&gt;Consider one seat, a three-month project, and 20 accepted videos per month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly subscription quote: $20 per month.&lt;/li&gt;
&lt;li&gt;Annual prepaid quote: $180 for the full year.&lt;/li&gt;
&lt;li&gt;Review: two hours per month, valued at $25 per hour.&lt;/li&gt;
&lt;li&gt;Additional usage and add-ons: $0 in this example.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project component&lt;/th&gt;
&lt;th&gt;Monthly subscription&lt;/th&gt;
&lt;th&gt;Annual prepaid subscription&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Subscription payments&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;$180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review time value&lt;/td&gt;
&lt;td&gt;$150&lt;/td&gt;
&lt;td&gt;$150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total project budget&lt;/td&gt;
&lt;td&gt;$210&lt;/td&gt;
&lt;td&gt;$330&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accepted videos&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget per accepted video&lt;/td&gt;
&lt;td&gt;$3.50&lt;/td&gt;
&lt;td&gt;$5.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The annual equivalent is $15 per month, but the annual payment is still $180. Allocating only three months of that bill produces a $195 project budget including review time. That is a planning allocation; it does not change the amount due.&lt;/p&gt;

&lt;p&gt;This model assumes cancellable monthly billing or full-year prepayment, with no refund for unused annual coverage. An annual contract paid in monthly installments is a different case and is not represented here.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small JavaScript implementation
&lt;/h2&gt;

&lt;p&gt;The input names distinguish per-seat prices from workspace totals. &lt;code&gt;Math.ceil(months / 12)&lt;/code&gt; handles the full annual periods purchased during the project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;editingBudget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;months&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;seats&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;videosPerMonth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;monthlySeatPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;annualSeatPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;monthlyAddOns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;monthlyUsage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;monthlyReviewHours&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hourlyReviewValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;months&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;seats&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;videosPerMonth&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;costs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;monthlySeatPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;annualSeatPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;monthlyAddOns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;monthlyUsage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;monthlyReviewHours&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hourlyReviewValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isSafeInteger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RangeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Counts must be positive whole numbers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;costs&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isFinite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RangeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Costs and hours must be finite and nonnegative&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;acceptedVideos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;months&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;videosPerMonth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;annualYears&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;months&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extras&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;months&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;monthlyAddOns&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;monthlyUsage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;review&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;months&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;monthlyReviewHours&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;hourlyReviewValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scenario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;softwarePayments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;extras&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;budget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;softwarePayments&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;softwarePayments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;perVideo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;budget&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;acceptedVideos&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;acceptedVideos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;annualCoverageMonths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;annualYears&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;monthly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;scenario&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;months&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;seats&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;monthlySeatPrice&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;annual&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;scenario&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;annualYears&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;seats&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;annualSeatPrice&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use one currency throughout. This function does not perform currency conversion or infer a provider's credit consumption. It assumes constant seats, output, extra usage and review time across the project. For production use, add application-specific input caps, currency formatting, and tests for the workload ranges you support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the cases that change the decision
&lt;/h2&gt;

&lt;p&gt;The three-month example should produce $3.50 and $5.50 per accepted video. Extending it to 13 months should purchase two annual periods, not one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;assert&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node:assert/strict&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;example&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;months&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;seats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;videosPerMonth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;monthlySeatPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;annualSeatPrice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;monthlyReviewHours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;hourlyReviewValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;editingBudget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;example&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;monthly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;perVideo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;annual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;perVideo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;longer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;editingBudget&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;example&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;months&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;longer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;annualCoverageMonths&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;longer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;monthly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;910&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;longer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;annual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1010&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;throws&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;editingBudget&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;example&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;videosPerMonth&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="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also test multiple seats, zero-cost workflows, fractional review hours, invalid values, and workspace add-ons that must only be counted once. Keep intermediate arithmetic at full precision and format the displayed result at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estimate usage from a representative edit
&lt;/h2&gt;

&lt;p&gt;For a podcast, tutorial, demo or social-video workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose footage typical of your work and write one delivery brief.&lt;/li&gt;
&lt;li&gt;Record the usage balance before and after the first edit, revisions and export.&lt;/li&gt;
&lt;li&gt;Time caption corrections, story review, framing checks and final-file review.&lt;/li&gt;
&lt;li&gt;Count the result only after it passes your acceptance checks.&lt;/li&gt;
&lt;li&gt;Repeat with enough examples to see variation before forecasting a larger workload.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If monthly and annual plans include different allowances, estimate their extra usage separately. The simple model above shares the same usage inputs between plans; run and save separate scenarios when that assumption does not fit.&lt;/p&gt;

&lt;p&gt;Do not translate one vendor's credit count into another vendor's output minutes. Use actual usage observations and the provider's current quote. Taxes, hardware, one-time purchases, refunds and financing are outside this model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put your own quotes into the calculator
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valmera.io/tools/video-editing-cost-calculator?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=video_editing_budget#calculator" rel="noopener noreferrer"&gt;Valmera video editing cost calculator&lt;/a&gt; lets you change the assumptions, inspect software payments separately from review time, and download both budgets as a CSV. The default numbers are the illustrative example used here.&lt;/p&gt;

&lt;p&gt;If you want to test a representative edit, Valmera's &lt;a href="https://valmera.io/online-video-editor?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=video_editing_budget#start-editing" rel="noopener noreferrer"&gt;online editor&lt;/a&gt; lets you prepare the request before signing in. Account creation and uploads are free; AI editing requires a subscription. The budget calculator itself remains free and needs no account.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SRT to TXT without losing speaker names or source times</title>
      <dc:creator>Valmera</dc:creator>
      <pubDate>Wed, 04 Nov 2026 16:04:07 +0000</pubDate>
      <link>https://dev.to/valmera/srt-to-txt-without-losing-speaker-names-or-source-times-55pg</link>
      <guid>https://dev.to/valmera/srt-to-txt-without-losing-speaker-names-or-source-times-55pg</guid>
      <description>&lt;p&gt;A subtitle file can be a useful starting point for an AI video edit. It already contains the speaker’s words and references to moments in the recording. But converting that file to plain text can accidentally remove information you still need.&lt;/p&gt;

&lt;p&gt;We shipped a free &lt;a href="https://valmera.io/tools/subtitle-to-text" rel="noopener noreferrer"&gt;SRT and VTT to text converter&lt;/a&gt; at Valmera. It runs in the browser, requires no account, and exports a TXT file. Here are the decisions behind it—and how to use the result to plan an edit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article is published by Valmera, which makes the converter and an AI video editor.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Keep the words, including numbers and repetition
&lt;/h2&gt;

&lt;p&gt;An SRT file uses numbers to identify subtitle cues. The dialogue can contain numbers too:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
00:00:01,000 --&amp;gt; 00:00:03,000
Our 2026 launch starts with three tutorials.

2
00:00:04,500 --&amp;gt; 00:00:07,000
Three tutorials, each with a complete example.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The plain-text result should be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our 2026 launch starts with three tutorials. Three tutorials, each with a complete example.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Removing every numeric line or repeated phrase is a different editorial operation from extracting a transcript. A speaker might deliberately repeat an important point. Our converter keeps repeated speech instead of guessing what to delete.&lt;/p&gt;

&lt;p&gt;Rolling captions can therefore produce repeated text in the result. Review those repetitions before using the transcript as a script or editing brief.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Preserve speaker labels when the file contains them
&lt;/h2&gt;

&lt;p&gt;WebVTT can carry a speaker name in a voice annotation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WEBVTT

00:01.000 --&amp;gt; 00:03.000
&amp;lt;v Maya&amp;gt;Hello &amp;amp;amp; welcome.&amp;lt;/v&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stripping every tag immediately would lose “Maya.” The converter first turns the voice annotation into a label, removes common caption styling, and decodes the text:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maya: Hello &amp;amp; welcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That label is useful when selecting an interview answer or deciding which speaker needs to remain visible. The converter does not infer missing names; it preserves labels present in the file. The &lt;a href="https://www.w3.org/TR/webvtt1/" rel="noopener noreferrer"&gt;W3C WebVTT specification&lt;/a&gt; describes cue text, voice annotations, comments and styling blocks.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make source timestamps optional
&lt;/h2&gt;

&lt;p&gt;A continuous paragraph is convenient for reading. An editing brief often needs a way to locate a sentence in the original recording.&lt;/p&gt;

&lt;p&gt;Turn on &lt;strong&gt;Keep start timestamps for editing references&lt;/strong&gt; to produce text like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[00:00:01.000] Our 2026 launch starts with three tutorials.

[00:00:04.500] Three tutorials, each with a complete example.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are the original cue start times. They are not newly calculated word timings, and they do not automatically follow a later video edit.&lt;/p&gt;

&lt;p&gt;Before using a timestamp to request a cut, check that the subtitle file belongs to the same recording you uploaded. A subtitle export from an earlier edit may use a different clock. Quoting the exact phrase alongside the time makes your instruction easier to locate.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Report broken blocks instead of returning half a transcript
&lt;/h2&gt;

&lt;p&gt;A converter should not quietly skip a malformed section and present the remaining text as complete. Our converter reports blocks with missing timing lines, invalid intervals, or missing separators between cues.&lt;/p&gt;

&lt;p&gt;The implementation has 15 focused tests covering complete SRT conversion, WebVTT metadata, speaker labels, Unicode and entities, source timestamps, paragraph layouts, repeated speech, line endings, and malformed input. We also checked file loading and the contents of a downloaded TXT file in the browser.&lt;/p&gt;

&lt;p&gt;This utility reads UTF-8 subtitle files up to 5 MB. It extracts existing subtitle text; it does not listen to audio or generate a missing transcript. The file is read and converted locally rather than uploaded for conversion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the transcript to specify a reviewable edit
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://valmera.io/tools/subtitle-to-text" rel="noopener noreferrer"&gt;converter&lt;/a&gt;, paste or load your subtitles, and choose a layout. Copy the passages you want to discuss, or download the transcript.&lt;/p&gt;

&lt;p&gt;Then give your editor an outcome and the material that must survive. For example, replace the placeholders with real phrases from your recording:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use the uploaded interview. Open with the complete answer beginning “[exact phrase]” at [original source time]. Keep the explanation beginning “[exact phrase]” and its qualification. Finish with the practical next step. Aim for a concise vertical clip with readable captions, then show me a preview so I can review the pacing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href="https://valmera.io/prompts#prompt-builder" rel="noopener noreferrer"&gt;editing brief builder&lt;/a&gt; can help add the intended audience, destination, target length, protected material and caption preference. You can plan that brief with a conversational assistant, then use &lt;a href="https://valmera.io/studio" rel="noopener noreferrer"&gt;Valmera Studio&lt;/a&gt; or an &lt;a href="https://valmera.io/mcp/setup" rel="noopener noreferrer"&gt;authorized MCP connection&lt;/a&gt; to edit the video.&lt;/p&gt;

&lt;p&gt;Review the rendered preview with sound. A readable transcript helps you choose the story; the video reveals whether the cuts, framing and pacing work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Valmera—the world’s most advanced AI video editor. Join thousands of creators. &lt;a href="https://valmera.io/register" rel="noopener noreferrer"&gt;Come try Valmera&lt;/a&gt;.&lt;/strong&gt; The subtitle converter is free; see &lt;a href="https://valmera.io/subscribe" rel="noopener noreferrer"&gt;current plans&lt;/a&gt; for video editing.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Write a better AI video editing prompt: six fields, one brief</title>
      <dc:creator>Valmera</dc:creator>
      <pubDate>Wed, 04 Nov 2026 15:06:56 +0000</pubDate>
      <link>https://dev.to/valmera/write-a-better-ai-video-editing-prompt-six-fields-one-brief-4258</link>
      <guid>https://dev.to/valmera/write-a-better-ai-video-editing-prompt-six-fields-one-brief-4258</guid>
      <description>&lt;p&gt;Disclosure: this guide is from the Valmera team. We built the &lt;a href="https://valmera.io/prompts#prompt-builder" rel="noopener noreferrer"&gt;video editing prompt builder&lt;/a&gt; described below.&lt;/p&gt;

&lt;p&gt;“Make this video better” leaves almost every editorial decision open. Better for whom? Shorter by how much? Is the viewer learning a task, deciding whether to try a product, or watching a story?&lt;/p&gt;

&lt;p&gt;A useful editing brief answers those questions before the first preview. It also names the material the editor must protect.&lt;/p&gt;

&lt;p&gt;Here is a six-field workflow you can use for your next recording, with examples you can adapt. If you already have a recording ready, &lt;a href="https://valmera.io/prompts?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=editing_brief_guide#prompt-builder" rel="noopener noreferrer"&gt;build your editing brief&lt;/a&gt;, then choose “Open my brief in Valmera” to carry it into an editable Studio draft.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Name the recording
&lt;/h2&gt;

&lt;p&gt;An interview and a tutorial need different editorial structures. A tutorial should keep the steps required to reproduce a result. An interview clip needs enough context to make the answer understandable outside the original conversation.&lt;/p&gt;

&lt;p&gt;Choose the kind of recording in the builder: tutorial, interview, product demo, webinar, travel story, real estate walkthrough, event highlights, or lesson.&lt;/p&gt;

&lt;p&gt;This first choice gives the brief its editorial goal. It is more useful than starting with a list of effects.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Name the destination
&lt;/h2&gt;

&lt;p&gt;Choose where the finished video will appear. A vertical social clip needs a composition that protects the speaker, product, or demonstration inside a portrait frame. A landscape tutorial may need the wider screen context.&lt;/p&gt;

&lt;p&gt;You can also keep the source format. There is no reason to reframe a recording when the original composition already serves the destination.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Give length a purpose
&lt;/h2&gt;

&lt;p&gt;“About 60 seconds” is a target. “Remove the explanation even if it stops making sense” is a different instruction.&lt;/p&gt;

&lt;p&gt;The builder keeps that distinction in the brief: aim for the chosen length without cutting off essential information. There is also a “Let the story decide” option for recordings where the complete thought matters more than a fixed duration.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Describe the viewer
&lt;/h2&gt;

&lt;p&gt;“First-time customers” and “experienced users troubleshooting an integration” need different amounts of explanation.&lt;/p&gt;

&lt;p&gt;Name the audience in ordinary language. You do not need a marketing persona document. One specific sentence is enough to guide which context, terminology, and examples belong in the cut.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Protect the important material
&lt;/h2&gt;

&lt;p&gt;This is the most useful field to personalize.&lt;/p&gt;

&lt;p&gt;For a product demo, preserve the step that makes the result reproducible. For an interview, preserve the condition attached to the speaker’s claim. For an event, preserve the names and relationships that give a moment its meaning.&lt;/p&gt;

&lt;p&gt;Avoid a vague instruction such as “keep the important parts.” Say which parts matter:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Keep the permissions step, the final working screen, and the warning that the integration needs an administrator account.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6. Decide on captions
&lt;/h2&gt;

&lt;p&gt;Choose captions when they help the viewing experience. Ask for names and numbers to be checked, and keep the text clear of important visual details.&lt;/p&gt;

&lt;p&gt;If you want a clean version for a different publishing workflow, leave captions off for that version.&lt;/p&gt;

&lt;h2&gt;
  
  
  A complete example
&lt;/h2&gt;

&lt;p&gt;Suppose you have a screen recording showing how to connect an integration. The destination is YouTube, the audience is first-time customers, and the useful explanation takes about three minutes.&lt;/p&gt;

&lt;p&gt;Here is an adapted brief:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Edit this screen recording into a tutorial for first-time customers. Show the working result early, then keep every necessary step in order. Remove repeated attempts and loading waits. Aim for about three minutes without cutting off essential instructions. Use a landscape composition and make the interface readable. Keep the permissions step, the final working screen, and the administrator-account warning. Add readable captions and check product names. Render a preview so I can review the sequence before the final export.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every sentence gives the editor a decision or a constraint. You can shorten the brief when the recording makes some of those decisions obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two more briefs for different recordings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  An interview clip for vertical video
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Turn this interview into one vertical clip of about 60 seconds for viewers who have not seen the full conversation. Start with the strongest complete answer. Keep the question or a short context line when the answer depends on it. Preserve any condition or exception that changes the speaker’s meaning. Remove repeated starts and long pauses. Keep the speaker in frame and place readable captions clear of their face. Render a preview before final export.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check the result against the source: would a viewer who watched only the clip understand the same claim? If the answer needs more than 60 seconds to remain accurate, keep the complete thought and revise the duration target.&lt;/p&gt;

&lt;h3&gt;
  
  
  A product demo for prospective customers
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Edit this product recording into a 45-second demonstration for someone seeing the product for the first time. Show the finished result first, then the two or three actions that produced it. Cut loading waits and duplicate attempts. Preserve the requirement needed to reproduce the result. Keep interface labels readable, add short captions where they clarify the action, and finish on the working result. Render a preview so I can check that the steps still make sense.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check the screen at the size your audience will see. A wide desktop capture can become unreadable in a vertical crop; ask for a wider composition or a focused view of the relevant control when necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Move the brief into your edit
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://valmera.io/prompts?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=editing_brief_guide#prompt-builder" rel="noopener noreferrer"&gt;prompt builder&lt;/a&gt; and personalize the six fields, or choose a prompt from the library.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Open my brief in Valmera&lt;/strong&gt; in the builder, or &lt;strong&gt;Use this prompt&lt;/strong&gt; on a library card.&lt;/li&gt;
&lt;li&gt;Sign in or create an account if prompted. Continue in the same browser tab so the saved request stays available.&lt;/li&gt;
&lt;li&gt;In Studio, review the editable request, upload your footage, and submit it when you are ready. Opening a brief prepares a draft; it does not start an edit automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can still use &lt;strong&gt;Copy&lt;/strong&gt; to keep a reusable brief in your notes. If the saved request is no longer available, return to the library and open it again, or paste your copy into Studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review once, then revise precisely
&lt;/h2&gt;

&lt;p&gt;After submitting your brief with the footage attached, watch the first preview for three things: whether the story makes sense, whether the protected material survived, and whether the output is readable at its intended size.&lt;/p&gt;

&lt;p&gt;Then request a specific revision:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Keep the current order. Restore the explanation immediately before the permissions screen, hold the completed result longer, and leave the rest unchanged.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is easier to evaluate than starting over with “make it more professional.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it with your own footage
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valmera.io/prompts#prompt-builder" rel="noopener noreferrer"&gt;Valmera prompt builder and library&lt;/a&gt; are public to use without signing in. The library currently includes 94 examples across 14 editing tasks. Creating a Valmera account and uploading are free; editing requires a subscription.&lt;/p&gt;

&lt;p&gt;You can refine a brief in ChatGPT, Claude, Gemini, Perplexity, or another planning assistant, then bring it to Valmera. A planning conversation and an actual edit are separate steps: review the rendered video before you publish it.&lt;/p&gt;

&lt;p&gt;Valmera’s promise: &lt;strong&gt;the world’s most advanced AI video editor.&lt;/strong&gt; Join thousands of creators. &lt;a href="https://valmera.io/prompts?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=editing_brief_guide#prompt-builder" rel="noopener noreferrer"&gt;Build your first editing brief&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A reviewable workflow for AI video editing through MCP</title>
      <dc:creator>Valmera</dc:creator>
      <pubDate>Wed, 04 Nov 2026 14:43:41 +0000</pubDate>
      <link>https://dev.to/valmera/a-reviewable-workflow-for-ai-video-editing-through-mcp-85j</link>
      <guid>https://dev.to/valmera/a-reviewable-workflow-for-ai-video-editing-through-mcp-85j</guid>
      <description>&lt;p&gt;I work on Valmera, an AI video editor with an MCP integration. Here is the editing-brief and review workflow we use to turn an open-ended request into something a creator can actually evaluate.&lt;/p&gt;

&lt;p&gt;This guide is maintained by Valmera. It turns a broad request into an edit you can review, whether you work in &lt;a href="https://valmera.io/studio" rel="noopener noreferrer"&gt;Studio&lt;/a&gt; or through an authorized &lt;a href="https://valmera.io/mcp/setup" rel="noopener noreferrer"&gt;MCP client&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the finished video
&lt;/h2&gt;

&lt;p&gt;Give your assistant four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audience and outcome:&lt;/strong&gt; who is watching and what they should understand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; the project or recording, plus a phrase or timestamp when useful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treatment:&lt;/strong&gt; pacing, framing, captions, music, and the intended destination.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protected material:&lt;/strong&gt; statements, moments, and qualifications that must survive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make a concise tutorial for a first-time user. Start with the successful result, then show the steps from this recording. Remove loading waits and repeated attempts, keep every required setting, and make the interface readable on a laptop. Preserve the final explanation of how to check success.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The brief gives you a review standard: can a first-time viewer follow the steps? It is more useful than asking whether the edit looks impressive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six starting points
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your recording&lt;/th&gt;
&lt;th&gt;Ask for&lt;/th&gt;
&lt;th&gt;Check before approving&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A founder introduction&lt;/td&gt;
&lt;td&gt;Remove abandoned takes and long waiting gaps while keeping natural delivery.&lt;/td&gt;
&lt;td&gt;No clipped words; the closing invitation survives.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A landscape interview&lt;/td&gt;
&lt;td&gt;Make a portrait version while keeping the relevant speaker and reactions visible.&lt;/td&gt;
&lt;td&gt;Watch subject movement throughout each shot.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A webinar&lt;/td&gt;
&lt;td&gt;Select complete practical answers that work without the full session.&lt;/td&gt;
&lt;td&gt;Each clip retains its premise and qualifications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A screen recording&lt;/td&gt;
&lt;td&gt;Turn a single task into a clear lesson with readable controls.&lt;/td&gt;
&lt;td&gt;Every required action remains understandable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Creator product footage&lt;/td&gt;
&lt;td&gt;Connect a real problem to a matching demonstration and invitation.&lt;/td&gt;
&lt;td&gt;Spoken claims match what the viewer sees.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Travel clips&lt;/td&gt;
&lt;td&gt;Build a small story with an arrival, experience, and ending.&lt;/td&gt;
&lt;td&gt;Distinct shots and natural sound serve the story.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full examples, prompts, and review checklists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://valmera.io/blog/remove-silence-from-video-naturally" rel="noopener noreferrer"&gt;Remove silence naturally&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://valmera.io/blog/horizontal-to-vertical-video-without-losing-subject" rel="noopener noreferrer"&gt;Turn horizontal footage into vertical video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://valmera.io/blog/turn-webinar-into-social-media-clips" rel="noopener noreferrer"&gt;Turn a webinar into social clips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://valmera.io/blog/edit-screen-recording-into-product-tutorial" rel="noopener noreferrer"&gt;Edit a screen recording into a tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://valmera.io/blog/edit-ugc-product-video-ad" rel="noopener noreferrer"&gt;Edit a UGC product video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://valmera.io/blog/edit-travel-video-from-phone-clips" rel="noopener noreferrer"&gt;Make a travel story from phone clips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Review one editorial decision at a time
&lt;/h2&gt;

&lt;p&gt;Get the story right before polishing its styling. First choose the sections that belong. Then tighten pacing. Next review framing and captions. Finally listen to the mix and inspect the export. This sequence makes feedback easier to understand and reduces repeated work on sections you later remove.&lt;/p&gt;

&lt;p&gt;Use a revision that identifies the problem, its location, and what should stay:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the current preview, the explanation beginning “[exact phrase]” feels rushed. Restore a little space before it. Keep the remaining cuts and caption style unchanged.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you mention a timestamp, distinguish the original recording from the edited preview. Earlier cuts move later moments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use any planning assistant; connect editing deliberately
&lt;/h2&gt;

&lt;p&gt;You can develop a brief in ChatGPT, Claude, Gemini, Perplexity, Copilot, Grok, or another conversational assistant. The useful output is a clear brief, not a claim that the recording has already been edited.&lt;/p&gt;

&lt;p&gt;For direct tool execution, use the &lt;a href="https://valmera.io/mcp/setup" rel="noopener noreferrer"&gt;setup guide&lt;/a&gt; for your client and authorize your Valmera account. An assistant without that connection can still help plan the edit; paste the result into Studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finish with a real deliverable
&lt;/h2&gt;

&lt;p&gt;Review the rendered result with sound. Check names and numbers in captions, cuts between words, subject framing, and the final invitation. Follow the current export workflow, wait for completion, and open the resulting video before publishing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://valmera.io/register" rel="noopener noreferrer"&gt;Come try Valmera&lt;/a&gt; · &lt;a href="https://valmera.io/subscribe" rel="noopener noreferrer"&gt;Current pricing&lt;/a&gt; · &lt;a href="https://valmera.io/prompts" rel="noopener noreferrer"&gt;More editing prompts&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
