{"id":7866,"date":"2026-10-20T10:04:07","date_gmt":"2026-10-20T17:04:07","guid":{"rendered":"https:\/\/www.visla.us\/blog\/?p=7866"},"modified":"2026-10-20T10:04:18","modified_gmt":"2026-10-20T17:04:18","slug":"how-to-make-a-video-in-chatgpt","status":"publish","type":"post","link":"https:\/\/www.visla.us\/blog\/how-tos\/how-to-make-a-video-in-chatgpt\/","title":{"rendered":"How to Make a Video in ChatGPT"},"content":{"rendered":"\n<div class=\"wp-block-group has-base-2-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-34a480d6 wp-block-group-is-layout-constrained\" style=\"border-top-left-radius:30px;border-top-right-radius:30px;border-bottom-left-radius:30px;border-bottom-right-radius:30px;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\">\n<p class=\"wp-block-paragraph\"><strong>Quick answer:<\/strong> You can make a video from any ChatGPT conversation with the Visla Video Maker plugin. Develop the idea, research, or script in ChatGPT, then call <strong>@Visla Video Maker<\/strong> when you\u2019re ready to make the video. Choose AI-generated visuals or stock footage, then open the project in Visla if you want to keep editing.<\/p>\n<\/div>\n\n\n\n<style data-wp-block-html=\"css\">\n\/* =========================================================\nVISLA CHAT DEMO \u2014 INTERACTIVE SCRIPTED WALKTHROUGH\nScoped to .visla-chat-demo for WordPress safety.\n========================================================= *\/\n\n.visla-chat-demo {\n  --vcd-bg: #ffffff;\n  --vcd-user: #f4f4f4;\n  --vcd-soft: #f7f7f7;\n  --vcd-text: #202123;\n  --vcd-muted: #666666;\n  --vcd-line: #e5e5e5;\n  --vcd-dark: #202123;\n  --vcd-focus: #4667f2;\n  --vcd-radius-lg: 20px;\n  --vcd-radius-md: 14px;\n\n  color: var(--vcd-text);\n  font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  line-height: 1.6;\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  overflow-wrap: anywhere;\n  margin: 2.25rem auto;\n  max-width: 920px;\n}\n\n.visla-chat-demo *,\n.visla-chat-demo *::before,\n.visla-chat-demo *::after {\n  box-sizing: border-box;\n}\n\n.visla-chat-demo a {\n  color: var(--vcd-text);\n  text-decoration-color: #969696;\n  text-decoration-thickness: 1px;\n  text-underline-offset: 0.2em;\n}\n\n.visla-chat-demo button,\n.visla-chat-demo textarea,\n.visla-chat-demo a {\n  font: inherit;\n  -webkit-tap-highlight-color: transparent;\n}\n\n.visla-chat-demo button:focus-visible,\n.visla-chat-demo textarea:focus-visible,\n.visla-chat-demo a:focus-visible {\n  outline: 3px solid var(--vcd-focus);\n  outline-offset: 3px;\n}\n\n.visla-chat-demo .vcd-intro {\n  max-width: 760px;\n  margin: 0 auto 22px;\n  padding: 0 20px;\n  text-align: center;\n}\n\n.visla-chat-demo .vcd-kicker {\n  display: inline-flex;\n  align-items: center;\n  border: 1px solid var(--vcd-line);\n  background: #fafafa;\n  color: #555;\n  border-radius: 999px;\n  padding: 5px 10px;\n  font-size: 0.8rem;\n  font-weight: 600;\n}\n\n.visla-chat-demo .vcd-intro h2 {\n  margin: 16px auto 9px;\n  max-width: 720px;\n  font-size: clamp(1.75rem, 4vw, 2.55rem);\n  line-height: 1.12;\n  letter-spacing: -0.035em;\n  font-weight: 650;\n  text-wrap: balance;\n}\n\n.visla-chat-demo .vcd-intro p {\n  margin: 0 auto;\n  max-width: 650px;\n  color: var(--vcd-muted);\n  font-size: 0.98rem;\n  line-height: 1.55;\n}\n\n.visla-chat-demo .vcd-shell {\n  height: min(680px, 78vh);\n  min-height: 560px;\n  display: grid;\n  grid-template-rows: auto minmax(0, 1fr) auto;\n  background: var(--vcd-bg);\n  border: 1px solid var(--vcd-line);\n  border-radius: var(--vcd-radius-lg);\n  overflow: hidden;\n  box-shadow: 0 14px 38px rgba(0, 0, 0, 0.055);\n}\n\n.visla-chat-demo .vcd-topbar {\n  min-height: 58px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  padding: 10px 14px 10px 16px;\n  border-bottom: 1px solid var(--vcd-line);\n  background: rgba(255, 255, 255, 0.97);\n  z-index: 3;\n}\n\n.visla-chat-demo .vcd-brand {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  min-width: 0;\n}\n\n.visla-chat-demo .vcd-brandmark,\n.visla-chat-demo .vcd-avatar {\n  display: grid;\n  place-items: center;\n  flex: 0 0 auto;\n  font-weight: 750;\n  letter-spacing: -0.03em;\n}\n\n.visla-chat-demo .vcd-brandmark {\n  width: 30px;\n  height: 30px;\n  border-radius: 9px;\n  font-size: 13px;\n  background: var(--vcd-dark);\n  color: #fff;\n}\n\n.visla-chat-demo .vcd-brandtext {\n  min-width: 0;\n}\n\n.visla-chat-demo .vcd-brandtext strong {\n  display: block;\n  font-size: 0.91rem;\n  line-height: 1.2;\n  letter-spacing: -0.01em;\n  font-weight: 650;\n}\n\n.visla-chat-demo .vcd-brandtext span {\n  display: block;\n  margin-top: 1px;\n  font-size: 0.75rem;\n  line-height: 1.2;\n  color: var(--vcd-muted);\n}\n\n.visla-chat-demo .vcd-topbar-actions {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.visla-chat-demo .vcd-show-all {\n  appearance: none;\n  border: 0;\n  background: transparent;\n  color: #5e5e5e;\n  padding: 8px 5px;\n  min-height: 40px;\n  cursor: pointer;\n  font-size: 0.8rem;\n  line-height: 1;\n  text-decoration: underline;\n  text-decoration-color: #b7b7b7;\n  text-underline-offset: 0.2em;\n}\n\n.visla-chat-demo .vcd-show-all:hover {\n  color: var(--vcd-text);\n}\n\n.visla-chat-demo .vcd-progress {\n  color: #777;\n  font-size: 0.76rem;\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n  min-width: 34px;\n  text-align: right;\n}\n\n.visla-chat-demo .vcd-chat-log {\n  min-height: 0;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  scrollbar-gutter: stable;\n  scroll-behavior: smooth;\n  padding: 28px clamp(18px, 4vw, 44px) 34px;\n}\n\n.visla-chat-demo .vcd-welcome,\n.visla-chat-demo .vcd-assistant {\n  display: grid;\n  grid-template-columns: 30px minmax(0, 1fr);\n  gap: 12px;\n  align-items: start;\n  max-width: 760px;\n  margin: 0 auto 28px;\n}\n\n.visla-chat-demo .vcd-user-row {\n  display: flex;\n  justify-content: flex-end;\n  max-width: 760px;\n  margin: 0 auto 20px;\n}\n\n.visla-chat-demo .vcd-user {\n  max-width: min(610px, 86%);\n  background: var(--vcd-user);\n  color: var(--vcd-text);\n  padding: 11px 16px;\n  border-radius: 18px;\n  font-size: 0.98rem;\n  font-weight: 450;\n}\n\n.visla-chat-demo .vcd-avatar {\n  width: 28px;\n  height: 28px;\n  border-radius: 50%;\n  font-size: 9px;\n  margin-top: 1px;\n  background: #fff;\n  color: var(--vcd-text);\n  border: 1px solid #d7d7d7;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n}\n\n.visla-chat-demo .vcd-answer {\n  min-width: 0;\n  padding-top: 1px;\n  font-size: 0.985rem;\n}\n\n.visla-chat-demo .vcd-answer p {\n  margin: 0 0 13px;\n}\n\n.visla-chat-demo .vcd-answer p:last-child {\n  margin-bottom: 0;\n}\n\n.visla-chat-demo .vcd-answer strong {\n  font-weight: 650;\n}\n\n.visla-chat-demo .vcd-prompt {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) auto;\n  align-items: start;\n  gap: 12px;\n  margin: 15px 0 5px;\n  border: 1px solid var(--vcd-line);\n  background: var(--vcd-soft);\n  border-radius: 12px;\n  padding: 14px;\n}\n\n.visla-chat-demo .vcd-prompt code {\n  display: block;\n  padding: 0;\n  margin: 0;\n  background: transparent;\n  color: #303030;\n  border: 0;\n  white-space: normal;\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n  font-size: 0.875rem;\n  line-height: 1.55;\n}\n\n.visla-chat-demo .vcd-copy {\n  min-width: 44px;\n  min-height: 44px;\n  border: 1px solid #d8d8d8;\n  background: #fff;\n  color: #3f3f3f;\n  border-radius: 9px;\n  padding: 8px 10px;\n  cursor: pointer;\n  font-size: 0.8rem;\n  line-height: 1;\n  font-weight: 600;\n}\n\n.visla-chat-demo .vcd-copy:hover {\n  background: #f1f1f1;\n}\n\n.visla-chat-demo .vcd-media {\n  margin: 18px 0 3px;\n  padding: 0;\n  border: 1px solid var(--vcd-line);\n  border-radius: 12px;\n  background: #fff;\n  overflow: hidden;\n}\n\n.visla-chat-demo .vcd-media img {\n  display: block;\n  width: 100%;\n  height: auto;\n  max-width: 100%;\n}\n\n.visla-chat-demo .vcd-cta-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 16px;\n}\n\n.visla-chat-demo .vcd-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 44px;\n  padding: 8px 13px;\n  border-radius: 9px;\n  font-weight: 600;\n  font-size: 0.86rem;\n  text-decoration: none !important;\n  border: 1px solid transparent;\n}\n\n.visla-chat-demo .vcd-btn-primary {\n  color: #fff !important;\n  background: var(--vcd-dark);\n}\n\n.visla-chat-demo .vcd-btn-primary:hover {\n  background: #333;\n}\n\n.visla-chat-demo .vcd-btn-secondary {\n  color: #303030 !important;\n  background: #fff;\n  border-color: var(--vcd-line);\n}\n\n.visla-chat-demo .vcd-btn-secondary:hover {\n  background: #f6f6f6;\n}\n\n.visla-chat-demo .vcd-composer,\n.visla-chat-demo .vcd-finish {\n  border-top: 1px solid var(--vcd-line);\n  background: rgba(255, 255, 255, 0.98);\n  padding: 14px clamp(14px, 3vw, 24px);\n  z-index: 3;\n}\n\n.visla-chat-demo .vcd-composer-field {\n  position: relative;\n  max-width: 760px;\n  margin: 0 auto;\n  border: 1px solid #d7d7d7;\n  background: #fff;\n  border-radius: 22px;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.055);\n  padding: 10px 52px 10px 15px;\n}\n\n.visla-chat-demo .vcd-next-question {\n  display: block;\n  width: 100%;\n  min-height: 48px;\n  max-height: 78px;\n  resize: none;\n  overflow-y: auto;\n  border: 0;\n  outline: 0;\n  background: transparent;\n  color: #313131;\n  padding: 4px 0;\n  font-size: 0.95rem;\n  line-height: 1.45;\n  cursor: default;\n}\n\n.visla-chat-demo .vcd-next-question:focus-visible {\n  outline: none;\n}\n\n.visla-chat-demo .vcd-composer-field:focus-within {\n  box-shadow: 0 0 0 3px var(--vcd-focus);\n}\n\n.visla-chat-demo .vcd-send {\n  position: absolute;\n  right: 9px;\n  bottom: 9px;\n  width: 36px;\n  height: 36px;\n  display: grid;\n  place-items: center;\n  border: 0;\n  border-radius: 50%;\n  background: var(--vcd-dark);\n  color: #fff;\n  cursor: pointer;\n  font-size: 1.15rem;\n  line-height: 1;\n  font-weight: 650;\n}\n\n.visla-chat-demo .vcd-send:hover {\n  background: #343434;\n}\n\n.visla-chat-demo .vcd-send:disabled {\n  opacity: 0.45;\n  cursor: wait;\n}\n\n.visla-chat-demo .vcd-typing {\n  display: grid;\n  grid-template-columns: 30px minmax(0, 1fr);\n  gap: 12px;\n  align-items: center;\n  max-width: 760px;\n  margin: 0 auto 28px;\n}\n\n.visla-chat-demo .vcd-typing-dots {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  min-height: 28px;\n}\n\n.visla-chat-demo .vcd-typing-dots i {\n  width: 5px;\n  height: 5px;\n  display: block;\n  border-radius: 50%;\n  background: #8d8d8d;\n  animation: vcd-dot 900ms infinite ease-in-out;\n}\n\n.visla-chat-demo .vcd-typing-dots i:nth-child(2) {\n  animation-delay: 120ms;\n}\n\n.visla-chat-demo .vcd-typing-dots i:nth-child(3) {\n  animation-delay: 240ms;\n}\n\n@keyframes vcd-dot {\n  0%, 60%, 100% { opacity: 0.35; transform: translateY(0); }\n  30% { opacity: 1; transform: translateY(-2px); }\n}\n\n.visla-chat-demo .vcd-finish {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) auto;\n  gap: 18px;\n  align-items: center;\n}\n\n.visla-chat-demo .vcd-finish[hidden] {\n  display: none;\n}\n\n.visla-chat-demo .vcd-finish strong {\n  display: block;\n  font-size: 0.93rem;\n  margin-bottom: 2px;\n}\n\n.visla-chat-demo .vcd-finish span {\n  display: block;\n  color: var(--vcd-muted);\n  font-size: 0.84rem;\n  line-height: 1.4;\n}\n\n.visla-chat-demo .vcd-finish-actions {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  gap: 8px;\n}\n\n.visla-chat-demo .vcd-noscript {\n  padding: 14px 18px;\n  border-top: 1px solid var(--vcd-line);\n  background: #fff8e6;\n  color: #4d4232;\n  font-size: 0.9rem;\n}\n\n.visla-chat-demo .vcd-screenreader {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n@media (max-width: 700px) {\n  .visla-chat-demo {\n    margin: 1.5rem 0;\n  }\n\n  .visla-chat-demo .vcd-intro {\n    padding: 0 4px;\n    text-align: left;\n  }\n\n  .visla-chat-demo .vcd-shell {\n    height: 72svh;\n    min-height: 520px;\n    border-radius: 15px;\n  }\n\n  .visla-chat-demo .vcd-topbar {\n    padding: 9px 11px 9px 12px;\n  }\n\n  .visla-chat-demo .vcd-brandtext span {\n    display: none;\n  }\n\n  .visla-chat-demo .vcd-show-all {\n    min-height: 44px;\n  }\n\n  .visla-chat-demo .vcd-chat-log {\n    padding: 22px 15px 28px;\n    scrollbar-gutter: auto;\n  }\n\n  .visla-chat-demo .vcd-welcome,\n  .visla-chat-demo .vcd-assistant,\n  .visla-chat-demo .vcd-typing {\n    grid-template-columns: 27px minmax(0, 1fr);\n    gap: 9px;\n  }\n\n  .visla-chat-demo .vcd-avatar {\n    width: 26px;\n    height: 26px;\n    font-size: 8px;\n  }\n\n  .visla-chat-demo .vcd-user {\n    max-width: 93%;\n  }\n.visla-chat-demo .vcd-composer,\n  .visla-chat-demo .vcd-finish {\n    padding: 11px;\n  }\n\n  .visla-chat-demo .vcd-finish {\n    grid-template-columns: 1fr;\n  }\n\n  .visla-chat-demo .vcd-finish-actions {\n    justify-content: flex-start;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .visla-chat-demo *,\n  .visla-chat-demo *::before,\n  .visla-chat-demo *::after {\n    scroll-behavior: auto !important;\n    transition: none !important;\n    animation: none !important;\n  }\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\n\/*\nVisla Video Maker scripted walkthrough \u2014 WordPress-safe version.\n\nImportant WordPress compatibility note:\nThis code intentionally avoids the logical-AND operator because WordPress Custom\nHTML has had a bug where that operator can be converted into HTML entities when\ncontent is saved, which makes the JavaScript invalid.\n\nThis script makes no network requests, uses no analytics\/cookies\/storage, reads\nno clipboard data, and injects no user-supplied HTML.\n*\/\n(function () {\n  \"use strict\";\n\n  function initVislaChatDemos(rootDocument) {\n    var demos = rootDocument.querySelectorAll(\".visla-chat-demo\");\n\n    Array.prototype.forEach.call(demos, function (demo) {\n      if (demo.dataset.vcdInitialized === \"true\") {\n        return;\n      }\n\n      demo.dataset.vcdInitialized = \"true\";\n\n      var shell = demo.querySelector(\".vcd-shell\");\n      var log = demo.querySelector(\".vcd-chat-log\");\n      var composer = demo.querySelector(\".vcd-composer\");\n      var field = demo.querySelector(\".vcd-next-question\");\n      var send = demo.querySelector(\".vcd-send\");\n      var showAll = demo.querySelector(\".vcd-show-all\");\n      var finish = demo.querySelector(\".vcd-finish\");\n      var progressValue = demo.querySelector(\".vcd-progress-value\");\n      var copyStatus = demo.querySelector(\".vcd-copy-status\");\n      var steps = Array.prototype.slice.call(demo.querySelectorAll(\"template.vcd-step\"));\n      var current = 0;\n      var busy = false;\n      var win = rootDocument.defaultView;\n\n      if (!win) {\n        win = window;\n      }\n\n      var reducedMotion = false;\n      if (win.matchMedia) {\n        reducedMotion = win.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n      }\n\n      if (!shell) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!log) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!composer) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!field) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!send) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!finish) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!progressValue) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n      if (!steps.length) {\n        demo.dataset.vcdInitialized = \"false\";\n        return;\n      }\n\n      function questionFor(index) {\n        if (index >= steps.length) {\n          return \"\";\n        }\n\n        var question = steps[index].getAttribute(\"data-question\");\n        if (!question) {\n          return \"\";\n        }\n\n        return question;\n      }\n\n      function setProgress(value) {\n        progressValue.textContent = value + \" \/ \" + steps.length;\n      }\n\n      function setComposerQuestion(index) {\n        field.value = questionFor(index);\n      }\n\n      function scrollToBottom() {\n        if (typeof log.scrollTo === \"function\") {\n          log.scrollTo({\n            top: log.scrollHeight,\n            behavior: reducedMotion ? \"auto\" : \"smooth\"\n          });\n          return;\n        }\n\n        log.scrollTop = log.scrollHeight;\n      }\n\n      function makeUserMessage(question) {\n        var row = rootDocument.createElement(\"div\");\n        row.className = \"vcd-user-row\";\n\n        var bubble = rootDocument.createElement(\"div\");\n        bubble.className = \"vcd-user\";\n\n        var prefix = rootDocument.createElement(\"span\");\n        prefix.className = \"vcd-screenreader\";\n        prefix.textContent = \"User asks: \";\n\n        bubble.appendChild(prefix);\n        bubble.appendChild(rootDocument.createTextNode(question));\n        row.appendChild(bubble);\n\n        return row;\n      }\n\n      function makeTypingIndicator() {\n        var wrap = rootDocument.createElement(\"div\");\n        wrap.className = \"vcd-typing\";\n        wrap.setAttribute(\"aria-label\", \"Visla is responding\");\n\n        var avatar = rootDocument.createElement(\"div\");\n        avatar.className = \"vcd-avatar\";\n        avatar.setAttribute(\"aria-hidden\", \"true\");\n        avatar.textContent = \"V\";\n\n        var dots = rootDocument.createElement(\"div\");\n        dots.className = \"vcd-typing-dots\";\n        dots.setAttribute(\"aria-hidden\", \"true\");\n\n        var index = 0;\n        while (index < 3) {\n          dots.appendChild(rootDocument.createElement(\"i\"));\n          index += 1;\n        }\n\n        wrap.appendChild(avatar);\n        wrap.appendChild(dots);\n\n        return wrap;\n      }\n\n      function assistantFragment(index) {\n        return steps[index].content.cloneNode(true);\n      }\n\n      function completeWalkthrough() {\n        composer.hidden = true;\n        finish.hidden = false;\n\n        if (showAll) {\n          showAll.textContent = \"Complete\";\n          showAll.disabled = true;\n        }\n\n        setProgress(steps.length);\n      }\n\n      function finishStep(index, preserveScroll, previousScrollTop) {\n        log.appendChild(assistantFragment(index));\n        current = index + 1;\n        setProgress(current);\n\n        if (current >= steps.length) {\n          completeWalkthrough();\n        } else {\n          setComposerQuestion(current);\n        }\n\n        if (preserveScroll) {\n          log.scrollTop = previousScrollTop;\n        } else {\n          scrollToBottom();\n        }\n      }\n\n      function appendStep(index, animate, preserveScroll) {\n        if (index >= steps.length) {\n          completeWalkthrough();\n          return Promise.resolve();\n        }\n\n        var previousScrollTop = log.scrollTop;\n        var question = questionFor(index);\n\n        log.appendChild(makeUserMessage(question));\n\n        if (!preserveScroll) {\n          scrollToBottom();\n        }\n\n        if (!animate) {\n          finishStep(index, preserveScroll, previousScrollTop);\n          return Promise.resolve();\n        }\n\n        if (reducedMotion) {\n          finishStep(index, preserveScroll, previousScrollTop);\n          return Promise.resolve();\n        }\n\n        var typing = makeTypingIndicator();\n        log.appendChild(typing);\n        scrollToBottom();\n\n        return new Promise(function (resolve) {\n          win.setTimeout(function () {\n            typing.remove();\n            finishStep(index, false, previousScrollTop);\n            resolve();\n          }, 520);\n        });\n      }\n\n      function submitCurrent() {\n        if (busy) {\n          return;\n        }\n\n        if (current >= steps.length) {\n          return;\n        }\n\n        busy = true;\n        send.disabled = true;\n        field.setAttribute(\"aria-busy\", \"true\");\n\n        appendStep(current, true, false).then(function () {\n          busy = false;\n          send.disabled = false;\n          field.removeAttribute(\"aria-busy\");\n\n          if (current < steps.length) {\n            try {\n              field.focus({ preventScroll: true });\n            } catch (error) {\n              field.focus();\n            }\n          }\n        });\n      }\n\n      send.addEventListener(\"click\", function (event) {\n        event.preventDefault();\n        submitCurrent();\n      });\n\n      field.addEventListener(\"keydown\", function (event) {\n        if (event.key !== \"Enter\") {\n          return;\n        }\n\n        if (event.shiftKey) {\n          return;\n        }\n\n        event.preventDefault();\n        submitCurrent();\n      });\n\n      if (showAll) {\n        showAll.addEventListener(\"click\", function (event) {\n          event.preventDefault();\n\n          if (busy) {\n            return;\n          }\n\n          if (current >= steps.length) {\n            return;\n          }\n\n          busy = true;\n          var preserved = log.scrollTop;\n\n          while (current < steps.length) {\n            var index = current;\n            log.appendChild(makeUserMessage(questionFor(index)));\n            log.appendChild(assistantFragment(index));\n            current += 1;\n          }\n\n          setProgress(steps.length);\n          completeWalkthrough();\n          log.scrollTop = preserved;\n          busy = false;\n        });\n      }\n\n      demo.addEventListener(\"click\", function (event) {\n        var button = event.target.closest(\".vcd-copy\");\n\n        if (!button) {\n          return;\n        }\n\n        if (!demo.contains(button)) {\n          return;\n        }\n\n        var prompt = button.closest(\".vcd-prompt\");\n        if (!prompt) {\n          return;\n        }\n\n        var code = prompt.querySelector(\"code\");\n        if (!code) {\n          return;\n        }\n\n        var text = code.textContent.trim();\n        var originalLabel = button.textContent.trim();\n\n        if (copyStatus) {\n          copyStatus.textContent = \"\";\n        }\n\n        if (!navigator.clipboard) {\n          if (copyStatus) {\n            copyStatus.textContent =\n              \"Copy is unavailable in this browser. Select the prompt text and copy it manually.\";\n          }\n          return;\n        }\n\n        if (!win.isSecureContext) {\n          if (copyStatus) {\n            copyStatus.textContent =\n              \"Copy is unavailable in this browser. Select the prompt text and copy it manually.\";\n          }\n          return;\n        }\n\n        navigator.clipboard.writeText(text).then(function () {\n          button.textContent = \"Copied\";\n\n          if (copyStatus) {\n            copyStatus.textContent = \"Prompt copied to clipboard.\";\n          }\n\n          win.setTimeout(function () {\n            button.textContent = originalLabel;\n          }, 1600);\n        }).catch(function () {\n          if (copyStatus) {\n            copyStatus.textContent =\n              \"Copy failed. Select the prompt text and copy it manually.\";\n          }\n        });\n      });\n\n      setProgress(0);\n      setComposerQuestion(0);\n    });\n  }\n\n  function boot() {\n    initVislaChatDemos(document);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", boot, { once: true });\n  } else {\n    boot();\n  }\n})();\n<\/script>\n\n<!--\nVISLA VIDEO MAKER \u2014 INTERACTIVE SCRIPTED WALKTHROUGH\nWordPress 7.1.x \/ Twenty Twenty-Four\n\nPaste this into the HTML panel of a Custom HTML block.\nPaste the companion CSS into the block's CSS panel.\nPaste the companion JavaScript into the block's JavaScript panel.\n\nThe walkthrough is scripted. Visitors can advance the suggested question with\nEnter or the Send button, or reveal the full conversation at once. The composer\nis intentionally not a <form>, so it can never trigger browser\/WordPress navigation.\n\nThe walkthrough uses four Visla-hosted product screenshots. Each image includes\nalt text so the visual information is available to screen-reader users.\n-->\n\n<section class=\"visla-chat-demo\" aria-labelledby=\"vcd-heading\">\n  <div class=\"vcd-intro\">\n    <span class=\"vcd-kicker\">Interactive walkthrough<\/span>\n    <h2 id=\"vcd-heading\">See how Visla Video Maker works in ChatGPT<\/h2>\n    <p>\n      Follow a six-question scripted conversation, or reveal the full walkthrough at once.\n      The complete step-by-step article continues below.\n    <\/p>\n  <\/div>\n\n  <div class=\"vcd-shell\" data-total-steps=\"6\">\n    <header class=\"vcd-topbar\">\n      <div class=\"vcd-brand\">\n        <div class=\"vcd-brandmark\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-brandtext\">\n          <strong>Visla Video Maker<\/strong>\n          <span>Scripted walkthrough<\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"vcd-topbar-actions\">\n        <button class=\"vcd-show-all\" type=\"button\">Show all<\/button>\n        <span class=\"vcd-progress\" aria-live=\"polite\" aria-atomic=\"true\">\n          <span class=\"vcd-screenreader\">Progress: <\/span><span class=\"vcd-progress-value\">0 \/ 6<\/span>\n        <\/span>\n      <\/div>\n    <\/header>\n\n    <div class=\"vcd-chat-log\" role=\"log\" aria-labelledby=\"vcd-heading\" aria-live=\"polite\" aria-relevant=\"additions\">\n      <div class=\"vcd-welcome\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n          <p>\n            This is an authored walkthrough of the Visla Video Maker workflow.\n            Send the suggested question below to begin.\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"vcd-screenreader vcd-copy-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/div>\n    <\/div>\n\n    <div class=\"vcd-composer\">\n      <div class=\"vcd-composer-field\">\n        <label class=\"vcd-screenreader\" for=\"vcd-next-question\">Suggested question<\/label>\n        <textarea id=\"vcd-next-question\" class=\"vcd-next-question\" rows=\"2\" readonly=\"\" aria-describedby=\"vcd-composer-hint\">Can I actually make a video inside ChatGPT with Visla?<\/textarea>\n        <span id=\"vcd-composer-hint\" class=\"vcd-screenreader\">\n          This is a scripted walkthrough. Press Enter or the Send button to submit the suggested question.\n        <\/span>\n        <button class=\"vcd-send\" type=\"button\" aria-label=\"Send suggested question\">\n          <span aria-hidden=\"true\">\u2191<\/span>\n        <\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"vcd-finish\" hidden=\"\">\n      <div>\n        <strong>That's the basic workflow.<\/strong>\n        <span>Try Visla Video Maker in ChatGPT, or continue to the full guide below.<\/span>\n      <\/div>\n      <div class=\"vcd-finish-actions\">\n        <a class=\"vcd-btn vcd-btn-primary\" href=\"https:\/\/chatgpt.com\/plugins\/plugin_asdk_app_69474d7e29408191ba6fd0af7001ac9c\">\n          Install Visla Video Maker\n        <\/a>\n        <a class=\"vcd-btn vcd-btn-secondary\" href=\"#full-guide\">\n          Read the full guide \u2193\n        <\/a>\n      <\/div>\n    <\/div>\n\n    <!-- STEP 1 -->\n    <template class=\"vcd-step\" data-question=\"Can I actually make a video inside ChatGPT with Visla?\">\n      <div class=\"vcd-assistant\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n          <p>\n            Yes. With the <strong>Visla Video Maker plugin<\/strong>, you can start with an idea,\n            research, or a finished script and turn it into a video from the same ChatGPT conversation.\n          <\/p>\n          <p>\n            You can choose between AI-generated visuals and stock footage. After Visla creates the first\n            version, you can open the project in Visla for more detailed editing.\n          <\/p>\n\n          <div class=\"vcd-prompt\">\n            <code>Please install the Visla Video Maker plugin for me.<\/code>\n            <button class=\"vcd-copy\" type=\"button\" aria-label=\"Copy installation prompt\">Copy<\/button>\n          <\/div>\n\n          <div class=\"vcd-cta-row\">\n            <a class=\"vcd-btn vcd-btn-secondary\" href=\"https:\/\/chatgpt.com\/plugins\/plugin_asdk_app_69474d7e29408191ba6fd0af7001ac9c\">\n              Open Visla Video Maker in ChatGPT\n            <\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/template>\n\n    <!-- STEP 2 -->\n    <template class=\"vcd-step\" data-question=\"How do I install it?\">\n      <div class=\"vcd-assistant\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n          <p>\n            Open <a href=\"https:\/\/chatgpt.com\/plugins\/plugin_asdk_app_69474d7e29408191ba6fd0af7001ac9c\"><strong>Visla Video Maker in ChatGPT<\/strong><\/a>\n            directly, or search for it in the ChatGPT Plugin Directory. You can also ask ChatGPT\n            to surface it with the installation prompt above.\n          <\/p>\n\n          <figure class=\"vcd-media\">\n            <img\n              src=\"https:\/\/www.visla.us\/wp-content\/uploads\/2026\/10\/1.-Install-Visla.png\"\n              alt=\"Visla Video Maker plugin page in ChatGPT showing the plugin name, Manage and Try in chat buttons, two example prompts, and a description of how the plugin turns scripts or source material into narrated videos.\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/figure>\n        <\/div>\n      <\/div>\n    <\/template>\n\n    <!-- STEP 3 -->\n    <template class=\"vcd-step\" data-question=\"Do I need my own script, and how do I turn it into a video once it\u2019s ready?\">\n      <div class=\"vcd-assistant\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n          <p>\n            You don't need to bring a finished script. You can develop the idea, research the topic,\n            write the script, and revise it inside ChatGPT. If you already have a script, paste it in\n            and skip straight to video creation.\n          <\/p>\n          <p>\n            Once the script is ready, call Visla Video Maker and tell it what you want. If the wording\n            shouldn't change, say so explicitly.\n          <\/p>\n\n          <div class=\"vcd-prompt\">\n            <code>@Visla Video Maker Create a video from the script above. Use the script exactly as written.<\/code>\n            <button class=\"vcd-copy\" type=\"button\" aria-label=\"Copy video creation prompt\">Copy<\/button>\n          <\/div>\n\n          <figure class=\"vcd-media\">\n            <img\n              src=\"https:\/\/www.visla.us\/wp-content\/uploads\/2026\/10\/2.-Calling-the-plugin-itself.png\"\n              alt=\"ChatGPT conversation composer with Visla Video Maker selected and the prompt, 'Please summarize this conversation and turn it into a video,' ready to send.\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/figure>\n        <\/div>\n      <\/div>\n    <\/template>\n\n    <!-- STEP 4 -->\n    <template class=\"vcd-step\" data-question=\"What's the difference between AI Generated Content and Stock Footage?\">\n      <div class=\"vcd-assistant\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n<figure class=\"vcd-media\">\n            <img\n              src=\"https:\/\/www.visla.us\/wp-content\/uploads\/2026\/10\/3.-Video-style.png\"\n              alt=\"Visla Video Maker video-style step showing two choices: AI Generated Content and Stock Footage.\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/figure>\n        <\/div>\n      <\/div>\n    <\/template>\n\n    <!-- STEP 5 -->\n    <template class=\"vcd-step\" data-question=\"Can I make consistent characters or a dialogue-based training scenario?\">\n      <div class=\"vcd-assistant\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n          <p>\n            Yes. For a multi-scene AI video, tell Visla to keep the characters, products, environments,\n            and visual style consistent. Then choose <strong>AI Generated Content<\/strong>.\n          <\/p>\n\n          <div class=\"vcd-prompt\">\n            <code>@Visla Video Maker Create a polished video from the script above. Keep the visual style, characters, products, and environments consistent across scenes.<\/code>\n            <button class=\"vcd-copy\" type=\"button\" aria-label=\"Copy consistency prompt\">Copy<\/button>\n          <\/div>\n\n          <p>\n            For a dialogue-based training scenario, say that you want a scenario, define the characters,\n            and tell Visla to preserve the dialogue and speaker assignments.\n          <\/p>\n\n          <div class=\"vcd-prompt\">\n            <code>@Visla Video Maker Create a scenario-based training video from the script above. Use the dialogue verbatim and keep each character's lines assigned to the correct speaker.<\/code>\n            <button class=\"vcd-copy\" type=\"button\" aria-label=\"Copy scenario prompt\">Copy<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/template>\n\n    <!-- STEP 6 -->\n    <template class=\"vcd-step\" data-question=\"Am I stuck with whatever it generates?\">\n      <div class=\"vcd-assistant\">\n        <div class=\"vcd-avatar\" aria-hidden=\"true\">V<\/div>\n        <div class=\"vcd-answer\">\n          <p>\n            No. Open the generated project in Visla's <strong>Scene-Based Editor<\/strong> when you want\n            more control. You can rearrange or edit scenes, replace footage, add text and graphics,\n            and continue refining the video instead of starting over.\n          <\/p>\n\n          <figure class=\"vcd-media\">\n            <img\n              src=\"https:\/\/www.visla.us\/wp-content\/uploads\/2026\/10\/4.-Scene-based-video-editing.png\"\n              alt=\"Visla Scene-Based Editor showing a generated video project with a list of scenes on the left and a preview of the selected scene on the right.\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/figure>\n\n          <div class=\"vcd-cta-row\">\n            <a class=\"vcd-btn vcd-btn-primary\" href=\"https:\/\/www.visla.us\/scene-based-video-editing\">\n              Learn about Scene-Based Editing\n            <\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/template>\n\n    <noscript>\n      <div class=\"vcd-noscript\">\n        This interactive walkthrough requires JavaScript. The complete step-by-step guide is available below.\n      <\/div>\n    <\/noscript>\n  <\/div>\n<\/section>\n\n<!--\nYour conventional article can begin immediately after this block.\n\nExample:\n<div id=\"full-guide\">\n  <h2>How to make a video with Visla in ChatGPT<\/h2>\n  ...\n<\/div>\n-->\n\n\n\n<h2 id=\"full-guide\" class=\"wp-block-heading\">Use ChatGPT for research, brainstorming, and scripting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Say you\u2019re making a product explainer for a new software feature. Ask what problem the feature solves, what prospective customers are likely to ask, how competitors explain similar features, and which claims need evidence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ask ChatGPT to organize the useful findings into an outline. Once the structure looks right, draft the script and revise the wording before video production starts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When the script is ready:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-plain is-layout-flow wp-block-quote-is-layout-flow is-style-plain--1\">\n<p class=\"wp-block-paragraph\"><code>@Visla Video Maker Create a video from the script above. Use the script exactly as written.<\/code><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Include any constraints that matter, such as the audience and target lenght. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Turn an existing ChatGPT conversation into a video<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The plugin can use context that's already inside of a conversation with ChatGPT. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you pasted a batch of support tickets into ChatGPT, compared three onboarding approaches, rejected two because they would require product changes, and concluded that new users keep missing the same setup step. Tell ChatGPT which part of that history should become the video:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-plain is-layout-flow wp-block-quote-is-layout-flow is-style-plain--2\">\n<p class=\"wp-block-paragraph\"><code>Pull out only the conclusions we reached about where new users get stuck during onboarding. Ignore ideas we rejected. Turn those conclusions into a 75-second video script for new customers.<\/code><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Check the result for context ChatGPT flattened or misunderstood. For a long thread, ask for an outline first; it is easier to catch missing context in a short outline than in a finished script. Once the outline is right, draft the script and call <strong>@Visla Video Maker<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Choose AI-generated visuals or stock footage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stock Footage<\/strong> uses real clips selected to match the script. Use it when the visuals are common enough to exist in a stock library, such as office meetings, city traffic, factory floors, or landscapes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AI Generated Content<\/strong> creates new video clips and motion graphics. Use it when the script needs a specific scene, recurring characters or environments, or a dialogue-based <a href=\"https:\/\/www.visla.us\/scenario-based-video?utm_source=chatgpt.com\">Scenario-Based Video<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For multi-scene projects that need recognizable people, products, objects, or locations to remain consistent, Visla\u2019s <a href=\"https:\/\/www.visla.us\/ai-director-mode?utm_source=chatgpt.com\">AI Director Mode<\/a> is built around that kind of continuity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Put continuity requirements directly in the prompt:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-plain is-layout-flow wp-block-quote-is-layout-flow is-style-plain--3\">\n<p class=\"wp-block-paragraph\"><code>@Visla Video Maker Create a polished video from the script above. Keep the visual style, characters, products, and environments consistent across scenes.<\/code><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Edit the generated video in Visla<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open the generated project in Visla\u2019s <a href=\"https:\/\/www.visla.us\/scene-based-video-editing?utm_source=chatgpt.com\">Scene-Based Editor<\/a>. Rearrange scenes, replace or add footage, revise the script, and change text or graphics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If one scene is wrong, edit or regenerate that scene instead of rebuilding the entire project. Visla supports scene-level editing and individual clip regeneration. <a href=\"https:\/\/www.visla.us\/scene-based-video-editing?utm_source=chatgpt.com\">Visla<\/a><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/chatgpt.com\/plugins\/plugin_asdk_app_69474d7e29408191ba6fd0af7001ac9c\">Install Visla Video Maker in ChatGPT<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quick answer: You can make a video from any ChatGPT conversation with the Visla Video Maker plugin. Develop the idea, research, or script in ChatGPT, then call @Visla Video Maker when you\u2019re ready to make the video. Choose AI-generated visuals or stock footage, then open the project in Visla if you want to keep editing. [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":7882,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"slim_seo":{"description":"Make videos in ChatGPT with Visla Video Maker. Develop ideas and scripts in chat, generate with AI or stock footage, then edit in Visla.","title":"How to Make a Video in ChatGPT - The Visla Blog"},"_slim_seo_primary_term_category":0,"_slim_seo_primary_term_post_tag":0,"footnotes":""},"categories":[24],"tags":[],"class_list":["post-7866","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-tos"],"_links":{"self":[{"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/posts\/7866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/comments?post=7866"}],"version-history":[{"count":15,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/posts\/7866\/revisions"}],"predecessor-version":[{"id":7896,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/posts\/7866\/revisions\/7896"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/media\/7882"}],"wp:attachment":[{"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/media?parent=7866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/categories?post=7866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.visla.us\/blog\/wp-json\/wp\/v2\/tags?post=7866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}