auricui-skill 0.0.0-stage → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -2
  3. package/bin/install.mjs +66 -0
  4. package/package.json +29 -4
  5. package/skill/SKILL.md +64 -0
  6. package/skill/agents/openai.yaml +4 -0
  7. package/skill/assets/examples/ApprovalCard.tsx +8 -0
  8. package/skill/assets/examples/BasicApp.tsx +38 -0
  9. package/skill/assets/examples/BriefingCard.tsx +8 -0
  10. package/skill/assets/examples/ChatControls.tsx +49 -0
  11. package/skill/assets/examples/ChatPanel.tsx +73 -0
  12. package/skill/assets/examples/Checkbox.tsx +13 -0
  13. package/skill/assets/examples/Combobox.tsx +14 -0
  14. package/skill/assets/examples/Drawer.tsx +10 -0
  15. package/skill/assets/examples/MemoryCard.tsx +9 -0
  16. package/skill/assets/examples/MessageList.tsx +8 -0
  17. package/skill/assets/examples/Theme.tsx +14 -0
  18. package/skill/assets/examples/ToolCall.tsx +8 -0
  19. package/skill/assets/examples/Tree.tsx +15 -0
  20. package/skill/assets/examples/examples.css +11 -0
  21. package/skill/assets/library/auricui-0.1.0-preview.1.tgz +0 -0
  22. package/skill/assets/library/auricui-0.1.0-preview.3.tgz +0 -0
  23. package/skill/assets/library/auricui-0.1.0-preview.4.tgz +0 -0
  24. package/skill/assets/upstream/LICENSE +21 -0
  25. package/skill/assets/upstream/apps/desktop/chat/src/App.tsx +1099 -0
  26. package/skill/assets/upstream/apps/desktop/chat/src/app-bridge.ts +154 -0
  27. package/skill/assets/upstream/apps/desktop/chat/src/chat.css +1812 -0
  28. package/skill/assets/upstream/apps/desktop/chat/src/components/AddSkill.tsx +223 -0
  29. package/skill/assets/upstream/apps/desktop/chat/src/components/AgentActivityRow.tsx +716 -0
  30. package/skill/assets/upstream/apps/desktop/chat/src/components/AgentIcons.tsx +46 -0
  31. package/skill/assets/upstream/apps/desktop/chat/src/components/AttachmentCard.tsx +34 -0
  32. package/skill/assets/upstream/apps/desktop/chat/src/components/AttachmentPreview.tsx +331 -0
  33. package/skill/assets/upstream/apps/desktop/chat/src/components/BalanceNotice.tsx +22 -0
  34. package/skill/assets/upstream/apps/desktop/chat/src/components/BrandLogo.tsx +35 -0
  35. package/skill/assets/upstream/apps/desktop/chat/src/components/ComposerCard.tsx +182 -0
  36. package/skill/assets/upstream/apps/desktop/chat/src/components/ConversationSessionBar.tsx +292 -0
  37. package/skill/assets/upstream/apps/desktop/chat/src/components/CopyDiagnostics.tsx +24 -0
  38. package/skill/assets/upstream/apps/desktop/chat/src/components/Divider.tsx +47 -0
  39. package/skill/assets/upstream/apps/desktop/chat/src/components/FileChangesList.tsx +119 -0
  40. package/skill/assets/upstream/apps/desktop/chat/src/components/Markdown.tsx +198 -0
  41. package/skill/assets/upstream/apps/desktop/chat/src/components/ModelPopover.tsx +280 -0
  42. package/skill/assets/upstream/apps/desktop/chat/src/components/NoticeCard.tsx +87 -0
  43. package/skill/assets/upstream/apps/desktop/chat/src/components/Popover.tsx +195 -0
  44. package/skill/assets/upstream/apps/desktop/chat/src/components/PreviewFrame.tsx +129 -0
  45. package/skill/assets/upstream/apps/desktop/chat/src/components/ProjectConversation.tsx +852 -0
  46. package/skill/assets/upstream/apps/desktop/chat/src/components/ProjectStarters.tsx +118 -0
  47. package/skill/assets/upstream/apps/desktop/chat/src/components/Tooltip.tsx +191 -0
  48. package/skill/assets/upstream/apps/desktop/chat/src/components/TurnLog.tsx +583 -0
  49. package/skill/assets/upstream/apps/desktop/chat/src/components/TurnQuestionCard.tsx +133 -0
  50. package/skill/assets/upstream/apps/desktop/chat/src/components/dock-pane-bar.ts +14 -0
  51. package/skill/assets/upstream/apps/desktop/chat/src/components/project-version.ts +37 -0
  52. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/MentionMenuPlugin.tsx +372 -0
  53. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/PromptEditor.tsx +476 -0
  54. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/PromptPill.tsx +399 -0
  55. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/PromptReferenceNode.tsx +164 -0
  56. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/index.ts +31 -0
  57. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/mention-menu.ts +206 -0
  58. package/skill/assets/upstream/apps/desktop/chat/src/components/prompt-editor/prompt-text.ts +171 -0
  59. package/skill/assets/upstream/apps/desktop/chat/src/components/useStickToBottom.ts +320 -0
  60. package/skill/assets/upstream/apps/desktop/chat/src/components/useTicker.ts +55 -0
  61. package/skill/assets/upstream/apps/desktop/chat/src/i18n/index.ts +42 -0
  62. package/skill/assets/upstream/apps/desktop/chat/src/i18n/locales/en-US.ts +408 -0
  63. package/skill/assets/upstream/apps/desktop/chat/src/i18n/locales/es.ts +407 -0
  64. package/skill/assets/upstream/apps/desktop/chat/src/i18n/locales/ja.ts +407 -0
  65. package/skill/assets/upstream/apps/desktop/chat/src/i18n/locales/ko.ts +403 -0
  66. package/skill/assets/upstream/apps/desktop/chat/src/i18n/locales/words.ts +6 -0
  67. package/skill/assets/upstream/apps/desktop/chat/src/i18n/locales/zh-CN.ts +407 -0
  68. package/skill/assets/upstream/apps/desktop/chat/src/i18n/lookup.ts +12 -0
  69. package/skill/assets/upstream/apps/desktop/chat/src/lib/agent-activity-runs.ts +154 -0
  70. package/skill/assets/upstream/apps/desktop/chat/src/lib/agent-menu-rows.ts +41 -0
  71. package/skill/assets/upstream/apps/desktop/chat/src/lib/agent-refs.ts +105 -0
  72. package/skill/assets/upstream/apps/desktop/chat/src/lib/agent-transcript.ts +440 -0
  73. package/skill/assets/upstream/apps/desktop/chat/src/lib/asset-lists.ts +75 -0
  74. package/skill/assets/upstream/apps/desktop/chat/src/lib/attachment-place.ts +17 -0
  75. package/skill/assets/upstream/apps/desktop/chat/src/lib/balance.ts +16 -0
  76. package/skill/assets/upstream/apps/desktop/chat/src/lib/chat-layer.ts +10 -0
  77. package/skill/assets/upstream/apps/desktop/chat/src/lib/chat-menu.ts +18 -0
  78. package/skill/assets/upstream/apps/desktop/chat/src/lib/chat-store.ts +101 -0
  79. package/skill/assets/upstream/apps/desktop/chat/src/lib/composer-attachments.ts +189 -0
  80. package/skill/assets/upstream/apps/desktop/chat/src/lib/desktop-attachments.ts +178 -0
  81. package/skill/assets/upstream/apps/desktop/chat/src/lib/desktop-bridge.ts +291 -0
  82. package/skill/assets/upstream/apps/desktop/chat/src/lib/developer.ts +39 -0
  83. package/skill/assets/upstream/apps/desktop/chat/src/lib/esc-stop.ts +23 -0
  84. package/skill/assets/upstream/apps/desktop/chat/src/lib/file-changes.ts +32 -0
  85. package/skill/assets/upstream/apps/desktop/chat/src/lib/live-activity.ts +20 -0
  86. package/skill/assets/upstream/apps/desktop/chat/src/lib/local-agent-run.ts +1174 -0
  87. package/skill/assets/upstream/apps/desktop/chat/src/lib/local-sessions.ts +25 -0
  88. package/skill/assets/upstream/apps/desktop/chat/src/lib/model-calls.ts +87 -0
  89. package/skill/assets/upstream/apps/desktop/chat/src/lib/pretty-json.ts +12 -0
  90. package/skill/assets/upstream/apps/desktop/chat/src/lib/preview-top.ts +15 -0
  91. package/skill/assets/upstream/apps/desktop/chat/src/lib/project-resources.ts +66 -0
  92. package/skill/assets/upstream/apps/desktop/chat/src/lib/project-sessions.ts +66 -0
  93. package/skill/assets/upstream/apps/desktop/chat/src/lib/project-versions.ts +116 -0
  94. package/skill/assets/upstream/apps/desktop/chat/src/lib/ref-pictures.ts +119 -0
  95. package/skill/assets/upstream/apps/desktop/chat/src/lib/relative-time.ts +46 -0
  96. package/skill/assets/upstream/apps/desktop/chat/src/lib/skill-pages.ts +29 -0
  97. package/skill/assets/upstream/apps/desktop/chat/src/lib/step-file.ts +23 -0
  98. package/skill/assets/upstream/apps/desktop/chat/src/lib/structural-share.ts +52 -0
  99. package/skill/assets/upstream/apps/desktop/chat/src/lib/studio-film.ts +44 -0
  100. package/skill/assets/upstream/apps/desktop/chat/src/lib/studio-transfer.ts +40 -0
  101. package/skill/assets/upstream/apps/desktop/chat/src/lib/unprompted.ts +27 -0
  102. package/skill/assets/upstream/apps/desktop/chat/src/lib/upload-limits.ts +53 -0
  103. package/skill/assets/upstream/apps/desktop/chat/src/mount.tsx +19 -0
  104. package/skill/assets/upstream/apps/desktop/chat/src/state/local-agent-store.ts +296 -0
  105. package/skill/assets/upstream/apps/desktop/chat/src/studio-refs.ts +307 -0
  106. package/skill/assets/upstream/apps/desktop/package.json +51 -0
  107. package/skill/assets/upstream/apps/desktop/shell/bridge.ts +415 -0
  108. package/skill/assets/upstream/apps/desktop/shell/index.html +27 -0
  109. package/skill/assets/upstream/apps/desktop/shell/main.tsx +17 -0
  110. package/skill/assets/upstream/apps/desktop/shell/shell.css +17 -0
  111. package/skill/assets/upstream/apps/desktop/shell/vite.config.ts +65 -0
  112. package/skill/assets/upstream/apps/desktop/src/agent-definitions.mjs +31 -0
  113. package/skill/assets/upstream/packages/openfilm/LICENSE +21 -0
  114. package/skill/assets/upstream/packages/openfilm/package.json +88 -0
  115. package/skill/assets/upstream/packages/openfilm/src/film-doc.d.mts +125 -0
  116. package/skill/assets/upstream/packages/openfilm/src/film-doc.mjs +986 -0
  117. package/skill/assets/upstream/packages/openfilm/src/overrides.mjs +73 -0
  118. package/skill/assets/upstream/packages/openfilm/src/timeline.mjs +1280 -0
  119. package/skill/assets/upstream/packages/openfilm/studio/server/bridge.js +209 -0
  120. package/skill/assets/upstream/packages/openfilm/studio/server/film-subtitle.mjs +785 -0
  121. package/skill/assets/upstream/packages/openfilm/studio/server/ops.mjs +403 -0
  122. package/skill/assets/upstream/packages/openfilm/studio/server/stage.js +1649 -0
  123. package/skill/assets/upstream/packages/openfilm/studio/server/track-layout.mjs +43 -0
  124. package/skill/assets/upstream/packages/openfilm/studio/ui/src/App.tsx +156 -0
  125. package/skill/assets/upstream/packages/openfilm/studio/ui/src/api.ts +328 -0
  126. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/AudioMeters.tsx +188 -0
  127. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/BlockThumbs.tsx +84 -0
  128. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/BlockWaveform.tsx +201 -0
  129. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/BrandLoadingScreen.tsx +56 -0
  130. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/BrandLogo.tsx +25 -0
  131. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/Card.tsx +89 -0
  132. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ColorPicker.tsx +204 -0
  133. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ConfirmDialog.tsx +96 -0
  134. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ContextMenu.tsx +422 -0
  135. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/DesktopDialog.tsx +271 -0
  136. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ExamplesGallery.tsx +372 -0
  137. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/FilmFullscreenBar.tsx +147 -0
  138. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/FilmInspector.tsx +2310 -0
  139. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/FilmStageSelect.tsx +3296 -0
  140. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/FocusNav.tsx +28 -0
  141. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/FontFamilyPicker.tsx +293 -0
  142. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/FramePicker.tsx +69 -0
  143. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/InspectorPanel.tsx +25 -0
  144. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/Launcher.tsx +38 -0
  145. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/LayersPanel.tsx +277 -0
  146. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/LiveTime.tsx +101 -0
  147. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/MediaPool.tsx +1413 -0
  148. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/MediaPreview.tsx +188 -0
  149. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/MenuSelect.tsx +161 -0
  150. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/MgOutline.tsx +24 -0
  151. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/OperationHistory.tsx +184 -0
  152. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/PaneDivider.tsx +292 -0
  153. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/PasteAttrsDialog.tsx +69 -0
  154. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/PlaybackMenu.tsx +110 -0
  155. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/Popover.tsx +159 -0
  156. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectCover.tsx +60 -0
  157. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectHistoryControls.tsx +748 -0
  158. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectLayoutMenu.tsx +82 -0
  159. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectMenu.tsx +111 -0
  160. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectSources.tsx +587 -0
  161. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectView.tsx +3222 -0
  162. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectsLibrary.tsx +567 -0
  163. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ProjectsView.tsx +1593 -0
  164. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/PropertiesSection.tsx +418 -0
  165. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ResourceInspector.tsx +100 -0
  166. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SelectionToolbar.tsx +157 -0
  167. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SkillsLibrary.tsx +504 -0
  168. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SourcePreview.tsx +464 -0
  169. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SpendAsks.tsx +88 -0
  170. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/StageMaskOverlay.tsx +299 -0
  171. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/StageTransformFrame.tsx +246 -0
  172. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SubtitleInspector.module.css +46 -0
  173. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SubtitleInspector.tsx +884 -0
  174. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SubtitleOverlay.tsx +148 -0
  175. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/SubtitleRow.tsx +419 -0
  176. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/TabStrip.tsx +188 -0
  177. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/Timeline.tsx +4911 -0
  178. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/TimelineMarkers.tsx +329 -0
  179. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/Toast.tsx +55 -0
  180. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/Tooltip.tsx +193 -0
  181. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/UpdateButton.tsx +104 -0
  182. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/ViewerBar.tsx +98 -0
  183. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/WhatsNew.tsx +147 -0
  184. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/dock-pane-bar.ts +16 -0
  185. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/export/ExportCenter.tsx +1502 -0
  186. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/export/ExportTray.tsx +284 -0
  187. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/film-stage-hit.ts +18 -0
  188. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/inspector-fields.tsx +863 -0
  189. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/inspector-look.tsx +1357 -0
  190. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/player-controls/controls-bar.tsx +397 -0
  191. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/player-controls/transport.tsx +294 -0
  192. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/replace-drop.ts +20 -0
  193. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/AgentsSection.tsx +613 -0
  194. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/CustomServices.tsx +104 -0
  195. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/DiagnosticsGroup.tsx +202 -0
  196. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/ModelsSection.tsx +179 -0
  197. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/ProviderMark.tsx +24 -0
  198. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/ProvidersSection.tsx +177 -0
  199. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/SettingsModal.tsx +511 -0
  200. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/SettingsSelect.tsx +84 -0
  201. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/ShortcutsSection.tsx +291 -0
  202. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/StorageGroup.tsx +119 -0
  203. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/theme.ts +47 -0
  204. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/ui.tsx +139 -0
  205. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/settings/use-settings.ts +10 -0
  206. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/stage-menu.tsx +283 -0
  207. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/timeline-head-extras.tsx +91 -0
  208. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/typing-target.ts +45 -0
  209. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/use-editor-tools.tsx +408 -0
  210. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/use-page-changes.ts +48 -0
  211. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/use-project-history.ts +113 -0
  212. package/skill/assets/upstream/packages/openfilm/studio/ui/src/components/useBlockDrag.ts +639 -0
  213. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/Preview.tsx +426 -0
  214. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/player.ts +558 -0
  215. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/preview-frames.ts +36 -0
  216. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/steps.ts +36 -0
  217. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/undo.ts +156 -0
  218. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/use-film.ts +212 -0
  219. package/skill/assets/upstream/packages/openfilm/studio/ui/src/editor/use-preview-renders.ts +89 -0
  220. package/skill/assets/upstream/packages/openfilm/studio/ui/src/globals.css +559 -0
  221. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/en.ts +1901 -0
  222. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/es.ts +1900 -0
  223. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/index.ts +130 -0
  224. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/ja.ts +1900 -0
  225. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/ko.ts +1896 -0
  226. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/words.ts +6 -0
  227. package/skill/assets/upstream/packages/openfilm/studio/ui/src/i18n/zh-CN.ts +1901 -0
  228. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/agent-row.ts +21 -0
  229. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/asset-timeline.ts +469 -0
  230. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/audio-levels.ts +60 -0
  231. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/batch-map.ts +28 -0
  232. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/browser.ts +10 -0
  233. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/canvas-fit.ts +116 -0
  234. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/chat-marks.ts +114 -0
  235. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/clip-attrs.ts +102 -0
  236. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/clip-fade.ts +70 -0
  237. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/clip-look.ts +520 -0
  238. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/clip-mask.ts +536 -0
  239. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/clip-replace.ts +60 -0
  240. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/component-props.ts +128 -0
  241. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/context-length.ts +12 -0
  242. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/desktop-build.ts +44 -0
  243. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/diagnostics.ts +68 -0
  244. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/double-press.ts +22 -0
  245. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/dropped-overrides.ts +139 -0
  246. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/export-jobs.ts +191 -0
  247. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/export-spec.ts +261 -0
  248. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/field-input.ts +155 -0
  249. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/film-clip-edits.ts +82 -0
  250. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/film-frame.ts +134 -0
  251. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/film-overrides.ts +107 -0
  252. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/film-shape.ts +172 -0
  253. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/film.ts +80 -0
  254. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/font-menu.ts +236 -0
  255. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/font-styles.ts +129 -0
  256. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/freeze-frame.ts +49 -0
  257. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/host.ts +438 -0
  258. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/inspect-scrub.ts +26 -0
  259. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/keymap-store.ts +74 -0
  260. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/keymap.ts +529 -0
  261. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/layers-tree.ts +133 -0
  262. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/look.ts +83 -0
  263. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/loudness.ts +58 -0
  264. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/markers.ts +152 -0
  265. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/media-bar.ts +58 -0
  266. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/media-folders.ts +45 -0
  267. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/media-place.ts +102 -0
  268. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/media-queue.ts +107 -0
  269. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/media-selection.ts +64 -0
  270. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/menu-position.ts +77 -0
  271. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/mg-transform.ts +111 -0
  272. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/mixed.ts +3 -0
  273. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/page-changes.ts +45 -0
  274. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/picture-files.ts +19 -0
  275. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/preview-prefs.ts +46 -0
  276. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/preview-renders.ts +71 -0
  277. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/project-delete.ts +20 -0
  278. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/project-folders.ts +144 -0
  279. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/project-history.ts +188 -0
  280. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/project-sources.ts +283 -0
  281. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/projects-page.ts +40 -0
  282. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/provider-marks.ts +35 -0
  283. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/providers.ts +163 -0
  284. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/resource-drag.ts +131 -0
  285. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/retry-image.ts +17 -0
  286. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/saved-insert.ts +40 -0
  287. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/saved.ts +125 -0
  288. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/selection-toolbar.ts +158 -0
  289. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/shortcut-hint.ts +21 -0
  290. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/similar-layers.ts +46 -0
  291. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/solo.ts +19 -0
  292. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-clip.ts +60 -0
  293. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-crop.ts +232 -0
  294. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-gesture.ts +277 -0
  295. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-layers.ts +71 -0
  296. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-mask.ts +176 -0
  297. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-measure.ts +53 -0
  298. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/stage-types.ts +155 -0
  299. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/studio-refs.ts +248 -0
  300. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/studio-version.ts +41 -0
  301. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/subtitle-cues.ts +238 -0
  302. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/subtitles.ts +263 -0
  303. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/tab-menu.ts +6 -0
  304. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/template-controls.ts +131 -0
  305. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/theme-changes.ts +31 -0
  306. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/thumb-cache.ts +63 -0
  307. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/thumb-cell.ts +8 -0
  308. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/thumb-frame.ts +76 -0
  309. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/thumb-pick.ts +42 -0
  310. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timecode.ts +161 -0
  311. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-clipboard.ts +279 -0
  312. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-drag.ts +589 -0
  313. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-edit.ts +1138 -0
  314. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-keys.ts +63 -0
  315. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-layout.ts +1038 -0
  316. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-nav.ts +160 -0
  317. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-prefs.ts +73 -0
  318. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-split.ts +40 -0
  319. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/timeline-view.ts +105 -0
  320. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/title.ts +39 -0
  321. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/track-heights.ts +55 -0
  322. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/track-lock.ts +27 -0
  323. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/transitions.ts +459 -0
  324. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/type-metrics.ts +83 -0
  325. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/use-film-subtitles.ts +111 -0
  326. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/use-fonts.ts +181 -0
  327. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/use-loaded-thumbs.ts +91 -0
  328. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/use-subtitle-edits.ts +134 -0
  329. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/use-subtitle-font.ts +51 -0
  330. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/use-subtitle-style.ts +68 -0
  331. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/waveform-columns.ts +48 -0
  332. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/web-update.ts +41 -0
  333. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/whats-new.ts +401 -0
  334. package/skill/assets/upstream/packages/openfilm/studio/ui/src/lib/workspace-resources.ts +373 -0
  335. package/skill/assets/upstream/packages/openfilm/studio/ui/src/main.tsx +10 -0
  336. package/skill/assets/upstream/packages/openfilm/studio/ui/vite.config.ts +12 -0
  337. package/skill/assets/upstream/packages/shared/package.json +45 -0
  338. package/skill/assets/upstream/packages/shared/src/agent-activity.ts +263 -0
  339. package/skill/assets/upstream/packages/shared/src/contract.ts +285 -0
  340. package/skill/assets/upstream/packages/shared/src/index.ts +17 -0
  341. package/skill/assets/upstream/packages/shared/src/markdown-blocks.ts +252 -0
  342. package/skill/assets/upstream/packages/shared/src/modality.ts +4 -0
  343. package/skill/assets/upstream/packages/shared/src/prompt-reference.ts +113 -0
  344. package/skill/assets/upstream/packages/shared/src/title.ts +76 -0
  345. package/skill/assets/upstream/packages/shared/src/turn.ts +68 -0
  346. package/skill/assets/upstream/packages/shared/src/video.ts +26 -0
  347. package/skill/references/agent-components.md +33 -0
  348. package/skill/references/api-index.json +2693 -0
  349. package/skill/references/chat-components.md +65 -0
  350. package/skill/references/components.md +23 -0
  351. package/skill/references/core-components.md +44 -0
  352. package/skill/references/dependencies.md +22 -0
  353. package/skill/references/esm-package.md +48 -0
  354. package/skill/references/integration.md +43 -0
  355. package/skill/references/library-manifest.json +12 -0
  356. package/skill/references/source-manifest.json +325 -0
  357. package/skill/references/studio-components.md +24 -0
  358. package/skill/references/theme-motion.md +49 -0
  359. package/skill/references/troubleshooting.md +27 -0
  360. package/skill/references/verification.md +13 -0
  361. package/skill/scripts/check_dependencies.py +109 -0
  362. package/skill/scripts/inspect_api.py +60 -0
@@ -0,0 +1,1901 @@
1
+
2
+ /** The UI's words (English). Looked up by dotted path with useT(). */
3
+
4
+ /** what the system's file manager is called here */
5
+ const FILES = typeof navigator !== 'undefined' && /^win/i.test(navigator.platform) ? 'File Explorer'
6
+ : typeof navigator !== 'undefined' && /^mac/i.test(navigator.platform) ? 'Finder' : 'Files';
7
+ /* the system's trash, by its name there */
8
+ const TRASH = typeof navigator !== 'undefined' && /^win/i.test(navigator.platform) ? 'the Recycle Bin'
9
+ : typeof navigator !== 'undefined' && /^mac/i.test(navigator.platform) ? 'the Trash' : 'the trash';
10
+
11
+ export const en = {
12
+ nav: {
13
+ projects: 'Projects',
14
+ desktop: 'Desktop',
15
+ },
16
+ /* the app window's tabs (TabStrip), a new tab's launcher, and the examples (ExamplesGallery) */
17
+ tabs: { label: 'Tabs', new: 'Open a project', close: 'Close tab', closeOthers: 'Close other tabs', closeRight: 'Close tabs to the right' },
18
+ launcher: { projects: 'Projects', examples: 'Examples' },
19
+ gallery: {
20
+ chooseCover: "Choose cover",
21
+ changeCover: "Change cover",
22
+ removeCover: "Remove cover",
23
+ coverSaving: "Saving…",
24
+ coverInvalid: "Choose a valid PNG, JPEG or WebP image up to 5 MB.",
25
+ title: 'Examples',
26
+ community: 'Community',
27
+ discoverNote: 'Films made with OpenFilm, to start from or to learn from.',
28
+ noSkills: 'None of yours yet. Save your brand, a series\' style or your usual opening as a skill, and every film can follow it. Add one from a link or a folder, or ask the agent to save a film you like as a skill.',
29
+ all: 'All',
30
+ workflow: 'Workflows',
31
+ style: 'Styles',
32
+ skillKinds: 'There are two kinds of skills:\n· Yours hold what only you know: your brand, your series\' look, your usual opening and ending. No AI can guess them, so save them once and every film can use them.\n· OpenFilm\'s are ready-made ways to make a kind of film, to get you going fast. As AI gets better, you\'ll need them less.',
33
+ search: 'Search skills',
34
+ noMatch: 'No skill matches.',
35
+ aboutSkills: 'About skills',
36
+ fromFolder: 'Folder',
37
+ made: 'Made by you',
38
+ skills: 'Skills',
39
+ loading: 'Reading the examples…',
40
+ empty: 'No examples to show. They are read from GitHub: check the connection.',
41
+ start: 'Start from this',
42
+ startNew: 'Start a new film from this',
43
+ startHow: 'A copy of it becomes a new project of yours, its source ready to change.',
44
+ reference: 'Reference in this film',
45
+ referencePart: 'Reference this part',
46
+ referenceHow: 'It goes into your message. The agent reads how it is made (its pages and timing) and follows it in your film.',
47
+ referenceNote: 'Pick an example, or a part of one, for the agent to follow',
48
+ parts: 'Parts',
49
+ whole: 'The whole film',
50
+ partsHint: 'Click a part, or drag across the strip for a stretch.',
51
+ viewSource: 'View on GitHub',
52
+ back: 'Back',
53
+ installed: 'Installed',
54
+ discover: 'Discover',
55
+ mineHint: 'In your Skills folder',
56
+ fromOpenFilm: 'From OpenFilm',
57
+ officialHint: 'Installed from Discover',
58
+ projectHint: 'Kept with this film',
59
+ noneInstalled: 'None installed yet. Find OpenFilm\'s in',
60
+ fromAgent: 'From {name}',
61
+ agentHint: 'Your agent\'s own. Off until you turn one on.',
62
+ removeTitle: `Move “{name}” to ${TRASH}?`,
63
+ removeHint: `Agents stop using it. You can put it back from ${TRASH}.`,
64
+ remove: `Move to ${TRASH}`,
65
+ tryNow: 'Try now',
66
+ tryOff: 'Turn it on to try it',
67
+ details: 'Details',
68
+ uninstall: 'Uninstall',
69
+ offLine: 'Off. Agents won\'t use it.',
70
+ installedOne: 'Installed',
71
+ install: 'Install',
72
+ more: 'More',
73
+ turnOn: 'Turn on {name}',
74
+ turnOff: 'Turn off {name}',
75
+ skillOff: 'Off. Agents aren\'t offered it until you turn it on again.',
76
+ mine: 'Yours',
77
+ project: 'This project',
78
+ addSkill: 'Add a skill',
79
+ cat: { launch: 'Product launches', explainer: 'Explainers', slides: 'Slides to video', captions: 'Captions and titles', ads: 'Ads', commerce: 'Selling points', music: 'Music' },
80
+ },
81
+ /* the app's update, ready to install (Studio's top bar, in an app that has updates: lib/host.ts `update`) */
82
+ update: {
83
+ restart: 'Restart to update',
84
+ ready: 'OpenFilm {version} is ready. Restart to update now, or it installs when you quit and opens as the new version next time.',
85
+ agentBusy: 'An agent is still working. Restart when it has finished.',
86
+ exporting: 'An export is running. Restart when it has finished.',
87
+ installFailed: 'OpenFilm {version} could not install. Quit OpenFilm and open it again to install it.',
88
+ installing: 'Restarting…',
89
+ webUpdate: 'Update',
90
+ webAvailable: 'OpenFilm {version} is out. Studio restarts on it, and the pages open on it come back.',
91
+ webUpdating: 'Updating…',
92
+ webExporting: 'An export is running. Update when it has finished.',
93
+ webMaking: 'Media is being made. Update when it is done.',
94
+ webFailed: 'Could not update: {error}',
95
+ },
96
+ whatsNew: {
97
+ eyebrow: 'Updated',
98
+ title: 'What’s new in OpenFilm {version}',
99
+ close: 'Close',
100
+ changelog: 'Full changelog',
101
+ ok: 'Got it',
102
+ kind: {
103
+ new: 'New',
104
+ improved: 'Improved',
105
+ fixed: 'Fixed',
106
+ },
107
+ },
108
+ host: {
109
+ refer: 'Reference in chat',
110
+ regionHint: 'Drag a box to reference it in chat',
111
+ rangeDrag: 'Drag into the chat · I and O set the ends · X clears',
112
+ },
113
+ selectionBar: {
114
+ toolbar: 'Selection tools',
115
+ addToChat: 'Add to chat',
116
+ oneClip: '1 clip',
117
+ clips: '{n} clips',
118
+ layers: '{n} layers',
119
+ plusRange: '{what} + range',
120
+ range: 'Range',
121
+ mute: 'Mute',
122
+ unmute: 'Unmute',
123
+ noSound: 'No sound to mute',
124
+ more: 'More',
125
+ crop: 'Crop',
126
+ mask: 'Mask',
127
+ playRange: 'Play range',
128
+ clearRange: 'Clear range',
129
+ splitSelected: 'Split selected clips at playhead',
130
+ splitNone: 'The playhead is not over a selected clip',
131
+ },
132
+ desktop: {
133
+ title: 'OpenFilm for desktop',
134
+ tagline: 'Your agent and your film, side by side.',
135
+ intro: 'Studio as a desktop app, with your agent in a chat beside the film and wired into every part of it. Ask, watch each change land, and fix anything by hand.',
136
+ worksWith: 'Works with',
137
+ orOwnKey: 'or your own API key',
138
+ features: {
139
+ sync: { title: 'Two-way with the editor', body: 'Put a clip, a layer, a region of the picture or a media file in your message, and click any clip your agent names to jump to it in Studio.' },
140
+ live: { title: 'Changes land live', body: 'Every edit shows on the picture and the timeline as it’s written. Adjust it by hand, or step back in Version history.' },
141
+ drop: { title: 'Drop in your media', body: 'Drag footage, pictures or sound into the chat: they go straight into the film’s folder, ready to use.' },
142
+ agents: { title: 'Any agent, one switch away', body: 'Claude Code, Codex, Copilot, Cursor and more, found on your computer. Switch in the chat, or use your own API key.' },
143
+ speed: { title: 'Faster preview and export', body: 'A pinned rendering engine for smooth playback, and exports on your computer’s hardware video encoder when it has one.' },
144
+ setup: { title: 'No terminal, no dependencies', body: 'No Node, npm or package versions to manage: ffmpeg and the renderer are built in and tested with Studio.' },
145
+ updates: { title: 'Always up to date', body: 'Updates download in the background and install on restart, never in the middle of an export or a reply.' },
146
+ history: { title: 'Every film keeps its chats', body: 'It opens on your last film with its conversations kept, so you and your agent pick up where you left off.' },
147
+ },
148
+ picture: {
149
+ clip: 'Title · 0:02–0:06',
150
+ ask: 'Make this title bigger and slow it down.',
151
+ reply: 'Done: the title is 20% larger and eases in over a second.',
152
+ },
153
+ status: 'Free · No account needed',
154
+ downloadFor: 'Download for {system}',
155
+ otherSystems: 'For macOS and Windows',
156
+ getIt: 'Get it for macOS or Windows',
157
+ close: 'Close',
158
+ },
159
+ connection: {
160
+ lost: 'Lost the connection to Studio. Reconnecting…',
161
+ gone: 'Studio has stopped. Run this in a terminal, or ask your agent to open OpenFilm again: this page reconnects by itself.',
162
+ goneApp: 'Studio has stopped. Quit and reopen the OpenFilm app to bring it back.',
163
+ copied: 'Copied',
164
+ lockedTitle: 'This browser isn’t signed in to Studio',
165
+ lockedBody: 'Studio is running, but it only lets in a browser that opened it once with its key. Open the full address `openfilm open` (or `pnpm dev`) printed, the one with ?key= in it; after that, this browser can use Studio’s address as it is.',
166
+ lockedHow: 'To get it again, run',
167
+ },
168
+ projects: {
169
+ newProject: 'New project',
170
+ localProjectFailed: 'Couldn’t create the project. Please retry.',
171
+ loadFailed: 'Couldn’t load your projects.',
172
+ loadRetry: 'Try again',
173
+ revealFolder: `Reveal in ${FILES}`,
174
+ folderAll: 'All',
175
+ folderUp: 'Up one level',
176
+ untitledFolder: 'Untitled folder',
177
+ folderCount: '{n} projects',
178
+ folderCountOne: '1 project',
179
+ newFolder: 'New folder',
180
+ openFolder: 'Open folder…',
181
+ openFolderFailed: 'Couldn’t open that folder: {error}',
182
+ dropFolder: 'Drop a folder to open it as a project.',
183
+ folderNamePlaceholder: 'Folder name',
184
+ renameFolder: 'Rename folder',
185
+ deleteFolder: 'Delete folder',
186
+ deleteFolderHint: `Deletes the folder and moves the {n} projects inside it to ${TRASH}, where you can take them back.`,
187
+ deleteFolderHintOne: `Deletes the folder and moves the project inside it to ${TRASH}, where you can take it back.`,
188
+ deleteFolderHintEmpty: 'Deletes the folder. There are no projects in it.',
189
+ renameTaken: '“{name}” is taken: there is already a folder with that name. Choose another.',
190
+ moveToTitle: 'Move “{name}”',
191
+ moveHint: 'Choose where it goes.',
192
+ move: 'Move',
193
+ moveTo: 'Move to…',
194
+ hereNow: 'Here now',
195
+ newFolderName: 'New folder name',
196
+ moveToFolder: 'Move to folder',
197
+ changeCover: 'Change cover…',
198
+ restoreCover: 'Use the automatic cover',
199
+ coverFromFrame: 'Use this frame as the cover',
200
+ setAsCover: 'Set as project cover',
201
+ coverSet: 'Cover set',
202
+ coverFailed: 'Couldn’t use that as the cover.',
203
+ creating: 'Creating project',
204
+ opening: 'Opening project',
205
+ missing: 'Folder not found',
206
+ missingOpen: 'This project’s folder is not there any more: it was moved, renamed or deleted. You can remove it from the list.',
207
+ agentRunning: 'Agent running',
208
+ agentRunningRename: 'An agent is running in this project. Stop it first, then rename the project.',
209
+ exportRunningRename: 'An export is running or queued for this project. Wait for it to finish or cancel it, then rename the project.',
210
+ agentRunningDelete: 'An agent is running in this project. Stop it first, then delete the project.',
211
+ agentRunningDeleteMany: 'An agent is running in {n} of these projects. Stop it first, then delete them.',
212
+ removeFromList: 'Remove from list',
213
+ removeTitle: 'Remove from the list?',
214
+ removeDesc: 'Its folder is already gone, and everything a project keeps (versions, chats) was in it, so nothing is left to delete. This takes it off the list.',
215
+ removeAlso: 'Projects whose folder is gone are only taken off the list.',
216
+ getFromGitHub: 'Get from GitHub…',
217
+ importFrom: 'Import from',
218
+ locate: 'Locate…',
219
+ locateTitle: 'Locate “{name}”',
220
+ locateFailed: 'Couldn’t use that folder: {error}',
221
+ locateNoFilm: 'There’s no film.html in that folder. Pick the folder the project is in now.',
222
+ startFilmTitle: 'No film in this folder',
223
+ startFilmDesc: 'There’s no film.html in “{name}”. Start a new film there?',
224
+ startFilm: 'Start a new film',
225
+ browse: {
226
+ title: 'Open folder',
227
+ pathLabel: 'Folder path',
228
+ go: 'Go',
229
+ up: 'Up',
230
+ places: 'Places',
231
+ recent: 'Recent',
232
+ place: {
233
+ home: 'Home',
234
+ library: 'Projects',
235
+ desktop: 'Desktop',
236
+ documents: 'Documents',
237
+ downloads: 'Downloads',
238
+ movies: 'Movies',
239
+ videos: 'Videos',
240
+ },
241
+ empty: 'No folders here',
242
+ more: 'Only the first 1,000 folders are shown.',
243
+ film: 'Film',
244
+ hasFilm: 'This folder has a film.',
245
+ noFilm: 'No film.html here: opening this folder starts a new film in it.',
246
+ locateNoFilm: 'No film.html here. Pick the folder the project is in now.',
247
+ open: 'Open',
248
+ startHere: 'Start a film here',
249
+ useFolder: 'Use this folder',
250
+ error: {
251
+ outside: 'Only folders in your home folder are shown here. Open still opens the path you typed.',
252
+ denied: 'You don’t have permission to open this folder.',
253
+ notFound: 'That folder doesn’t exist.',
254
+ file: 'That’s a file, not a folder.',
255
+ },
256
+ },
257
+ fetch: {
258
+ title: 'Get from GitHub',
259
+ urlLabel: 'Address of a repository or a folder in one',
260
+ placeholder: 'https://github.com/owner/repo/tree/main/folder',
261
+ hint: 'Studio copies it into your projects library without its git history (.git), so the copy is your own project.',
262
+ get: 'Get',
263
+ cancel: 'Cancel',
264
+ retry: 'Try again',
265
+ left: 'About {time} left',
266
+ close: 'Close',
267
+ phase: {
268
+ lookup: 'Getting the list of files…',
269
+ download: 'Downloading…',
270
+ checkout: 'Writing files…',
271
+ copy: 'Opening…',
272
+ },
273
+ error: {
274
+ url: 'That isn’t the address of a repository, or of a folder in one.',
275
+ host: 'Studio gets films from github.com and gitlab.com, over https.',
276
+ access: 'Not found, or private. Check the address. A private repository needs git on this computer signed in with access to it.',
277
+ network: 'Couldn’t reach GitHub. Check your internet connection.',
278
+ ref: 'That branch or tag isn’t in the repository.',
279
+ noFolder: 'That folder isn’t in the repository.',
280
+ noFilm: 'There’s no film.html in that folder, so it isn’t an OpenFilm film.',
281
+ tooBig: 'It’s too big to get, so it was stopped.',
282
+ timeout: 'Nothing came for a while, so it was stopped. Check your internet connection, then try again.',
283
+ git: 'This one needs git: it is private, or not on GitHub. Install git, then try again.',
284
+ },
285
+ },
286
+ examples: {
287
+ title: 'Examples',
288
+ show: 'Show examples',
289
+ hide: 'Hide examples',
290
+ open: 'Open',
291
+ },
292
+ },
293
+ library: {
294
+ noMatches: 'No projects match your search',
295
+ searchPlaceholder: 'Search',
296
+ sortLabel: 'Sort',
297
+ sortRecent: 'Recently opened',
298
+ sortNewest: 'Newest',
299
+ sortOldest: 'Oldest',
300
+ sortDuration: 'Longest',
301
+ sortTitle: 'Name (A–Z)',
302
+ viewLabel: 'View',
303
+ viewCards: 'Card view',
304
+ viewList: 'List view',
305
+ select: 'Select',
306
+ selectedCount: '{n} selected',
307
+ selectAll: 'Select all',
308
+ deselectAll: 'Deselect all',
309
+ deleteSelected: 'Delete',
310
+ cancelSelect: 'Cancel',
311
+ toggleSelect: 'Select item',
312
+ },
313
+ projectMenu: {
314
+ more: 'More',
315
+ open: 'Open',
316
+ rename: 'Rename',
317
+ export: 'Export',
318
+ history: 'Version history',
319
+ delete: 'Delete',
320
+ },
321
+ exportDialog: {
322
+ close: 'Close',
323
+ },
324
+ exportCenter: {
325
+ fpsProject: "project",
326
+ title: 'Export',
327
+ dest: {
328
+ social: 'Social platforms',
329
+ video: 'Video file',
330
+ gif: 'GIF',
331
+ audio: 'Audio',
332
+ subtitles: 'Subtitles',
333
+ images: 'Images',
334
+ slides: 'Slides & PDF',
335
+ project: 'Project',
336
+ alpha: 'Transparent assets',
337
+ nle: 'Editing project',
338
+ },
339
+ destHint: {
340
+ social: 'Presets for every platform',
341
+ video: 'Codec, size and quality',
342
+ gif: 'For docs, email, READMEs',
343
+ audio: 'Mix or separate stems',
344
+ subtitles: 'SRT, WebVTT, transcript',
345
+ images: 'Poster and shot stills',
346
+ slides: 'One slide per shot',
347
+ project: 'The whole project, to hand on',
348
+ alpha: 'Alpha for AE, Final Cut, web',
349
+ nle: '{app}, Final Cut Pro, Premiere Pro, DaVinci Resolve',
350
+ },
351
+ destDesc: {
352
+ social: 'Pick one or more platforms. Each gets the right shape, size and frame rate, and they export in one go.',
353
+ video: 'A single video with full control over codec, frame, resolution and quality.',
354
+ gif: 'A looping animated image. Keep it short and small — GIFs grow fast.',
355
+ audio: 'The mixed soundtrack, or voice, music and effects as separate files for your own mix.',
356
+ subtitles: 'Caption files for YouTube, players and translators, or a plain transcript.',
357
+ images: 'The poster, or one still per shot for thumbnails and social posts.',
358
+ slides: 'A deck or PDF with one slide per shot — ready to present or print.',
359
+ project: 'The project itself — its film, pages and media, and the parts you choose — as a zip or a folder that opens in OpenFilm.',
360
+ alpha: 'Video with a transparent background — the whole film or a single element — to layer into your own edits, apps and websites.',
361
+ nle: 'The timeline itself, ready to keep cutting: a {app} draft or an XML your editor imports, each page as a clip with alpha, your footage and sounds on their own tracks.',
362
+ },
363
+ group: {
364
+ landscape: 'Landscape 16:9',
365
+ vertical: 'Vertical 9:16',
366
+ feed: 'Feed',
367
+ },
368
+ quality: 'Quality',
369
+ qStandard: 'Standard',
370
+ qHigh: 'High',
371
+ qMaster: 'Master',
372
+ burnSubtitles: 'Burn in subtitles',
373
+ subsAuto: 'Per platform',
374
+ subsOn: 'All',
375
+ subsOff: 'None',
376
+ socialHint: 'A film that does not match a platform shape is fitted with bars, never cropped. Vertical feeds get burned-in subtitles by default because most people watch muted.',
377
+ tooLong: 'Longer than the {max} limit',
378
+ codec: 'Codec',
379
+ codecHint: {
380
+ h264: 'Plays everywhere. The safe default.',
381
+ hevc: 'Same quality, about 40% smaller. Newer devices.',
382
+ vp9: 'WebM with transparency, for the web.',
383
+ prores422hq: 'Editing master for Premiere, Final Cut, Resolve.',
384
+ prores4444: 'With transparency, for compositing and After Effects.',
385
+ png: 'One PNG per frame with alpha, for 3D and game engines.',
386
+ hevc_alpha: 'Transparency Apple apps and Safari play natively.',
387
+ },
388
+ notOnThisComputer: 'This computer\'s ffmpeg can\'t make it',
389
+ frame: 'Frame',
390
+ frameNative: 'Original',
391
+ fillContain: 'Fit with bars',
392
+ fillCover: 'Fill and crop',
393
+ resolution: 'Resolution',
394
+ fps: 'Frame rate',
395
+ fpsSource: 'source',
396
+ audio: 'Sound',
397
+ includeAudio: 'Include sound',
398
+ subtitles: 'Subtitles',
399
+ burnIn: 'Burn subtitles into the picture',
400
+ noSidecar: 'No file',
401
+ gifWidth: 'Size',
402
+ gifHint: 'Tip: pick a range of a few seconds. A 10-second GIF at 640px is usually a few MB.',
403
+ format: 'Format',
404
+ audioHint: {
405
+ wav: 'Lossless, for editing',
406
+ m4a: 'Small, high quality',
407
+ mp3: 'Plays everywhere',
408
+ },
409
+ contents: 'Contents',
410
+ audioMix: 'Full mix',
411
+ audioStems: 'Separate stems',
412
+ stem: {
413
+ voice: 'Voice',
414
+ music: 'Music',
415
+ sfx: 'Sound effects',
416
+ footage: 'Footage sound',
417
+ },
418
+ stemsHint: 'Stems are exported without ducking, so you can rebalance them in your editor.',
419
+ transcript: 'Transcript',
420
+ subsHint: {
421
+ srt: 'Works almost everywhere',
422
+ vtt: 'Web players, YouTube, LMS',
423
+ txt: 'Plain text for docs and translation',
424
+ },
425
+ captionCount: '{n} subtitle lines in this film.',
426
+ poster: 'Poster',
427
+ posterAt: 'Export the frame at {time}',
428
+ posterMiddle: 'Export the frame from the middle',
429
+ sceneStills: 'Shot stills',
430
+ sceneStillsDesc: 'One image from the middle of each shot ({n} shots), zipped.',
431
+ stills: 'Shot stills',
432
+ sequence: 'sequence',
433
+ slidesHint: {
434
+ pptx: 'Opens in PowerPoint, Keynote and Google Slides',
435
+ pdf: 'For printing and sharing',
436
+ },
437
+ range: 'Range',
438
+ rangeAll: 'Whole film',
439
+ rangePart: 'A part',
440
+ rangeFrom: 'From',
441
+ rangeTo: 'To',
442
+ saveTo: 'Save to',
443
+ fileName: 'Name',
444
+ change: 'Change…',
445
+ pickTitle: 'Choose where to save exports',
446
+ pickButton: 'Choose',
447
+ summary: '{n} file(s) · {dur}',
448
+ approx: 'about',
449
+ emptyFilm: 'The film is empty — add a clip first.',
450
+ missingMedia: '{n} media file(s) missing: {files}. Relink them first: right-click the red clip on the timeline.',
451
+ pickPreset: 'Pick at least one platform.',
452
+ noCaptions: 'This film has no subtitles.',
453
+ noAudio: 'This film has no sound.',
454
+ noFolder: 'Choose where to save first.',
455
+ engineDown: 'The local engine is not responding. Restart OpenFilm and try again.',
456
+ engineDesktop: 'Renders on this computer with hardware encoding. Nothing is uploaded.',
457
+ queueing: 'Starting…',
458
+ export: 'Export',
459
+ exportN: 'Export {n} files',
460
+ alphaSource: 'What to export',
461
+ alphaWhole: 'Whole film',
462
+ alphaWholeHint: 'background removed',
463
+ alphaNoBlocks: 'This film has no pages to export on their own.',
464
+ alphaCodecHint: {
465
+ prores4444: 'After Effects, Premiere, Final Cut, DaVinci Resolve',
466
+ hevc_alpha: 'Final Cut, Keynote, Safari, iOS apps — far smaller than ProRes',
467
+ vp9: 'Websites: Chrome, Firefox and Edge play it over the page',
468
+ png: 'Game engines, 3D, Nuke — anything reads it',
469
+ },
470
+ alphaScale: 'Size',
471
+ alphaHint: 'Only what the film draws is kept; the stage background is removed. If an element paints its own full-screen background, the export will come out opaque — put that background on its own clip.',
472
+ nleFor: 'For',
473
+ nleDraftTitle: '{app} draft',
474
+ nleSrt: 'Include subtitles (SRT)',
475
+ nleSubs: 'Include subtitles',
476
+ nleHintFinalCut: 'Creates a folder with the FCPXML and a media folder. In Final Cut Pro: File › Import › XML. Subtitles come as title clips, with an SRT copy. Final Cut Pro is Mac only: on Windows or Linux, move the folder to a Mac and relink.',
477
+ nleHintPremiere: 'Creates a folder with the XML and a media folder. In Premiere Pro: File › Import. Keep the folder where it is, or relink after moving it.',
478
+ nleHintResolve: 'Creates a folder with the XML and a media folder. In DaVinci Resolve: File › Import › Timeline. Keep the folder where it is, or relink after moving it.',
479
+ nleHintDraft: "Makes a draft in {app}'s drafts folder, so it is on {app}'s home screen (if {app} is open, restart it). Pages come as clips with alpha, subtitles as a text track.",
480
+ nleHintDraftNone: "{app} isn't on this computer: the draft is made in the export folder. Move it into {app}'s drafts folder (Settings › Drafts location).",
481
+ nleAudio: 'Sound on the timeline',
482
+ nleAudioClips: 'Separate clips',
483
+ nleAudioStems: 'Mixed stems',
484
+ nleAlpha: 'Pages',
485
+ nleAlphaAuto: 'Automatic',
486
+ nleAlphaHint: {
487
+ auto: 'Each page checked frame by frame: an opaque one as H.264, small and quick to play; one with any transparency as lossless PNG',
488
+ png: 'Lossless, pixel for pixel. A moderate size; works on Mac and Windows',
489
+ prores: 'An editing master: ProRes 422 HQ for an opaque page, 4444 for one with transparency. Very large',
490
+ prores4444: 'The editors\' master format. Very large: about 2.8 GB a minute at 1080p',
491
+ },
492
+ projectZip: 'Zip',
493
+ projectZipHint: 'One file, easy to send or upload.',
494
+ projectFolder: 'Folder',
495
+ projectFolderHint: 'A copy of the project folder, ready to open.',
496
+ projectPart: {
497
+ work: 'The work',
498
+ history: 'Version history',
499
+ chat: 'Conversations',
500
+ logs: 'Debug logs',
501
+ },
502
+ projectPartHint: {
503
+ work: 'The film, its pages and code, media, subtitle style.',
504
+ history: 'Every commit and branch, so the receiver can go back.',
505
+ chat: 'The chat about this project and the agent’s sessions. Private: off by default.',
506
+ logs: 'Every request sent to the model, in full. Private: off by default.',
507
+ },
508
+ projectPartNone: 'This project has none.',
509
+ projectHint: 'Caches are never included: OpenFilm makes them again when the project is opened.',
510
+ },
511
+ exportTray: {
512
+ running: 'Exporting {n}…',
513
+ finished: 'Exports finished',
514
+ failedOne: 'The export failed',
515
+ studioStopped: 'Studio stopped while this ran, so it was not finished. Export it again.',
516
+ failedAll: 'The exports failed',
517
+ cancelledOne: 'The export was cancelled',
518
+ cancelledAll: 'The exports were cancelled',
519
+ countDone: '{n} finished',
520
+ countCancelled: '{n} cancelled',
521
+ countFailed: '{n} failed',
522
+ took: 'made in {time}',
523
+ fileGone: 'That file is not where it was exported any more: it was moved or deleted.',
524
+ expand: 'Expand',
525
+ collapse: 'Collapse',
526
+ close: 'Close',
527
+ cancel: 'Cancel',
528
+ open: 'Open',
529
+ reveal: `Show in ${FILES}`,
530
+ queued: 'Waiting…',
531
+ phase: {
532
+ preparing: 'Preparing',
533
+ audio: 'Mixing sound',
534
+ rendering: 'Rendering',
535
+ encoding: 'Encoding',
536
+ finishing: 'Finishing',
537
+ copying: 'Copying',
538
+ },
539
+ eta: 'left',
540
+ files: '{n} files',
541
+ cancelled: 'Cancelled',
542
+ cancelling: 'Cancelling…',
543
+ failed: 'Export failed',
544
+ draftsRefused: "The drafts folder refused the write (security software often does), so the draft is in the export folder: move it into {folder}.",
545
+ diskFull: 'The disk is full. Free up some space, then export again.',
546
+ notTransparent: 'No transparent pixels: this element paints its own background.',
547
+ },
548
+ player: {
549
+ playTitle: 'Play (space / k)',
550
+ pauseTitle: 'Pause (space / k)',
551
+ captionsTitle: 'Subtitles (c)',
552
+ exitFullscreenTitle: 'Exit full screen (f)',
553
+ muteTitle: 'Mute (m)',
554
+ unmuteTitle: 'Unmute (m)',
555
+ volume: 'Volume',
556
+ settings: 'Settings',
557
+ speed: 'Playback speed',
558
+ speedNormal: 'Normal',
559
+ seek: 'Seek',
560
+ },
561
+ project: {
562
+ projects: 'Projects',
563
+ previewStageMount: 'Drawing the first frame',
564
+ dropOnPicture: 'Drop to put it in the film at the playhead',
565
+ editsUndone: 'A change from outside Studio (your agent saving film.html) undid {n} of your edits.',
566
+ editsUndoneShort: 'Edits undone: {n}',
567
+ editsRestore: 'Restore them',
568
+ editsLeaveOut: 'Leave them out',
569
+ previewFailed: 'The preview couldn\'t be drawn.',
570
+ previewBrowser: 'This page uses something your browser doesn\'t have. Films are drawn and exported with Chromium: open Studio in Chrome or Edge.',
571
+ previewMissing: 'Media not found: {file} · right-click its clip to relink',
572
+ filmEmptyHint: 'Drag media onto the timeline to start your film, or ask your agent to make one.',
573
+ filmBroken: 'film.html can’t be read right now, so Studio shows the film as it last was, and edits here can’t be saved until it’s fixed:',
574
+ filmNotReady: 'The video isn’t ready yet',
575
+ filmCannotExport: 'The film can’t be exported while it can’t be drawn:',
576
+ untitled: 'Untitled',
577
+ appMenu: 'Settings',
578
+ close: 'Close',
579
+ deleteFailed: 'Delete failed. Please retry.',
580
+ renameFailed: 'Rename failed. Please retry.',
581
+ },
582
+ history: {
583
+ stepFade: 'Fade',
584
+ stepTransition: 'Added a transition',
585
+ stepTransitionResize: 'Transition length',
586
+ stepTransitionRemove: 'Removed a transition',
587
+ stepDuplicate: "Duplicate",
588
+ stepDuplicated: "Duplicated {clip}",
589
+ undo: 'Undo',
590
+ redo: 'Redo',
591
+ sessionEmpty: 'No manual edits yet',
592
+ opsTitle: 'Edit history',
593
+ opsHint: 'Not versioned · cleared on exit',
594
+ stepMove: 'Move / trim',
595
+ stepTransform: 'Transform',
596
+ stepStyle: 'Style',
597
+ stepVolume: 'Volume',
598
+ stepTrackOrder: 'Track order',
599
+ stepTrackFlag: 'Track toggle',
600
+ stepLocked: 'Locked {track}',
601
+ stepUnlocked: 'Unlocked {track}',
602
+ stepHid: 'Hid {track}',
603
+ stepShowed: 'Showed {track}',
604
+ stepMuted: 'Muted {track}',
605
+ stepUnmuted: 'Unmuted {track}',
606
+ stepRemove: 'Delete',
607
+ stepRemoved: 'Deleted {clip}',
608
+ stepMoved: 'Moved {clip}',
609
+ stepTrimmed: 'Trimmed {clip}',
610
+ stepSplit: 'Split {clip}',
611
+ stepDetachAudio: 'Detached the audio of {clip}',
612
+ stepRippleTrimmed: 'Ripple trimmed {clip}',
613
+ stepGapClosed: 'Closed a gap',
614
+ stepGapsClosed: 'Closed the gaps on a track',
615
+ stepMainClosed: 'Closed up the main track',
616
+ stepLinked: 'Linked {clip}',
617
+ stepUnlinked: 'Unlinked {clip}',
618
+ stepSpeed: 'Changed the speed of {clip}',
619
+ stepPaste: 'Paste',
620
+ stepDrop: 'Add asset',
621
+ stepEdit: 'Edit',
622
+ stepRestoreEdits: 'Made my edits again',
623
+ stepSubtitleTimed: 'Retimed a subtitle',
624
+ stepSubtitleSplit: 'Split a subtitle',
625
+ stepSubtitleMerged: 'Merged two subtitles',
626
+ stepSubtitleRemoved: 'Deleted a subtitle',
627
+ stepSubtitleText: 'Edited a subtitle',
628
+ stepSubtitleAdded: 'Added a subtitle',
629
+ stepMarker: 'Changed the markers',
630
+ stepNormalized: "Normalized loudness to {clip} LUFS",
631
+ stepFroze: "Froze a frame of {clip}",
632
+ stepReplaced: "Replaced {clip}",
633
+ justNow: 'just now',
634
+ minutesAgo: '{n}m ago',
635
+ hoursAgo: '{n}h ago',
636
+ daysAgo: '{n}d ago',
637
+ },
638
+ versions: {
639
+ title: 'Version history',
640
+ close: 'Close',
641
+ working: 'Working…',
642
+ branchOf: 'Branch: {branch}',
643
+ branches: 'Branches',
644
+ branchCount: '{n} branches',
645
+ branchCountOne: '1 branch',
646
+ newBranch: 'New branch',
647
+ newBranchTitle: 'New branch',
648
+ newBranchBody: 'Starts from where “{branch}” is now. Your uncommitted changes come along.',
649
+ newBranchBodyClean: 'Starts from where “{branch}” is now.',
650
+ newBranchFromTitle: 'New branch from “{name}”',
651
+ newBranchFromBody: 'Starts from this version; “{branch}” stays as it is.',
652
+ branchName: 'Branch name',
653
+ create: 'Create',
654
+ switchTitle: 'Switch to “{name}”?',
655
+ switchBody: 'You have uncommitted changes on “{branch}”.',
656
+ leaveChanges: 'Leave them on {branch}',
657
+ bringChanges: 'Bring them to {name}',
658
+ cancel: 'Cancel',
659
+ rename: 'Rename',
660
+ renameTitle: 'Rename “{name}”',
661
+ save: 'Save',
662
+ delete: 'Delete',
663
+ deleteTitle: 'Delete branch “{name}”?',
664
+ deleteBody: 'The branch goes. Its versions stay on every other branch that has them.',
665
+ deleteForceTitle: 'Delete “{name}” and its versions?',
666
+ deleteForceBody: '{n} versions on “{name}” are on no other branch. Deleting it loses them for good.',
667
+ deleteForceBodyOne: '1 version on “{name}” is on no other branch. Deleting it loses it for good.',
668
+ deleteForce: 'Delete anyway',
669
+ mergeInto: 'Merge into {branch}',
670
+ mergeTitle: 'Merge “{name}” into “{branch}”',
671
+ mergeBody: 'What was done on “{name}” comes into “{branch}”.',
672
+ mergeMessage: 'Merge {name}',
673
+ mergeConfirm: 'Merge',
674
+ mergeConflictTitle: '“{name}” and “{branch}” changed the same thing',
675
+ mergeConflictBody: 'Choose whose version wins where they differ. Everything else from both is kept.',
676
+ keepOurs: 'Keep {branch}’s',
677
+ keepTheirs: 'Use {name}’s',
678
+ nothingToMerge: '“{branch}” already has everything on “{name}”.',
679
+ current: 'Current',
680
+ parked: 'changes left here',
681
+ parkedStuck: 'The changes left on this branch collide with it now, so they are still put away.',
682
+ changesTitle: 'Uncommitted changes',
683
+ noChanges: 'Everything is committed',
684
+ firstCommitHint: 'Nothing is committed yet. A commit keeps the film as it is now, so you can always come back to it.',
685
+ messagePlaceholder: 'Describe this version (required)',
686
+ commit: 'Commit',
687
+ discard: 'Discard changes',
688
+ discardTitle: 'Discard all uncommitted changes?',
689
+ discardBody: `The film goes back to its last commit. Files added since move to ${TRASH}.`,
690
+ historyOf: 'History · {branch}',
691
+ restore: 'Restore this version',
692
+ restoreTitle: 'Restore “{name}”?',
693
+ restoreBody: 'The film becomes this version, as uncommitted changes: commit them to keep it, or discard them to come back.',
694
+ restoreDirtyBody: `You have uncommitted changes. Restoring discards them first (files added since move to ${TRASH}).`,
695
+ restoreDiscard: 'Discard and restore',
696
+ restoreConfirm: 'Restore',
697
+ restoredMessage: 'Back to “{name}”',
698
+ branchFrom: 'New branch from here',
699
+ moreActions: 'More',
700
+ scenesAdded: '{n} scenes added',
701
+ scenesAddedOne: '1 scene added',
702
+ scenesEdited: '{n} scenes edited',
703
+ scenesEditedOne: '1 scene edited',
704
+ scenesRemoved: '{n} scenes removed',
705
+ scenesRemovedOne: '1 scene removed',
706
+ soundsAdded: '{n} sounds added',
707
+ soundsAddedOne: '1 sound added',
708
+ soundsEdited: '{n} sounds edited',
709
+ soundsEditedOne: '1 sound edited',
710
+ soundsRemoved: '{n} sounds removed',
711
+ soundsRemovedOne: '1 sound removed',
712
+ look: 'Look changed',
713
+ same: 'No change to the film',
714
+ errorDirty: 'Commit or discard the uncommitted changes first.',
715
+ errorNothing: 'There is nothing to commit.',
716
+ errorCarry: 'Your changes collide with what that branch holds. Leave them on this branch instead.',
717
+ errorExists: 'A branch with that name exists already.',
718
+ errorName: 'That can’t be a branch name.',
719
+ errorMessage: 'Describe the version first.',
720
+ errorCurrent: 'That’s the branch you’re on.',
721
+ errorUnavailable: 'Version history is unavailable right now. Please try again later.',
722
+ errorGeneric: 'That did not go through. Please try again.',
723
+ progressScan: 'Reading the film’s files… {done} of {total}',
724
+ progressStore: 'Keeping media… {done} of {total}',
725
+ progressWrite: 'Writing files… {done} of {total}',
726
+ progressMigrate: 'Updating this project’s history… {done} of {total}',
727
+ heldFiles: 'In history: {n} files the film uses',
728
+ heldFilesOne: 'In history: 1 file the film uses',
729
+ ignoredFiles: 'Not in history: {n} files not used by the film',
730
+ ignoredFilesOne: 'Not in history: 1 file not used by the film',
731
+ },
732
+ stageMenu: {
733
+ align: "Align",
734
+ lock: "Lock",
735
+ unlock: "Unlock",
736
+ lockedHint: "Locked — unlock it to move or edit",
737
+ hideAll: "Hide",
738
+ showAll: "Show",
739
+ editText: "Edit text",
740
+ replacePicture: 'Replace picture',
741
+ pictureOwn: 'Back to its own picture',
742
+ duplicate: "Duplicate",
743
+ front: "Bring to front",
744
+ back: "Send to back",
745
+ arrangeHint: "This layer isn't positioned, so it can't be restacked",
746
+ arrangeAlone: "Nothing overlaps it, so its order doesn't show",
747
+ arrangeBlocked: "It can't be restacked: what's placed inside it would move",
748
+ arrangeFrontAlready: 'Already in front of what it overlaps',
749
+ arrangeBackAlready: 'Already behind what it overlaps',
750
+ hide: "Hide",
751
+ show: "Show",
752
+ reset: "Reset adjustments",
753
+ resetNone: "Nothing adjusted by hand yet",
754
+ selectParent: "Select parent",
755
+ selectClip: "Select whole clip",
756
+ copyText: "Copy text",
757
+ resetTransform: "Reset transform",
758
+ },
759
+ stageCrop: {
760
+ bar: "Crop",
761
+ free: "Free",
762
+ original: "Original",
763
+ cancel: "Cancel",
764
+ cancelHint: "Leave the crop as it was (Esc)",
765
+ done: "Done",
766
+ doneHint: "Keep the crop (Enter)",
767
+ },
768
+ stageMask: {
769
+ move: 'Move the mask',
770
+ resize: 'Resize the mask',
771
+ turn: 'Rotate the mask',
772
+ feather: 'Feather: drag outward',
773
+ },
774
+ assets: {
775
+ kindPage: 'Page',
776
+ catImage: 'Images',
777
+ catVideo: 'Video',
778
+ catOther: 'Other',
779
+ newFolder: 'New folder',
780
+ newFolderFailed: 'Could not create the folder',
781
+ rename: 'Rename',
782
+ renameFailed: 'Could not rename',
783
+ renameTaken: 'That name is already taken',
784
+ renameKind: '“{from}” can’t be renamed “{to}”: the ending says what a file is, and this one would change it. Keep an ending of the same kind.',
785
+ delete: 'Delete',
786
+ deleteConfirmTitle: 'Delete this asset?',
787
+ deleteConfirm: `It moves to ${TRASH}, where you can take it back.`,
788
+ deleteAlsoClip: `It moves to ${TRASH}, where you can take it back. The clip using it on the timeline is removed too.`,
789
+ deleteAlsoClips: `It moves to ${TRASH}, where you can take it back. The {n} clips using it on the timeline are removed too.`,
790
+ deleteFailed: 'Could not delete',
791
+ extractAudio: 'Extract audio as a new file',
792
+ extractAudioFailed: 'Couldn’t take the sound out of that video',
793
+ download: 'Download',
794
+ props: 'Properties',
795
+ propType: 'Type',
796
+ propSize: 'Size',
797
+ propDuration: 'Duration',
798
+ propDimensions: 'Dimensions',
799
+ propFps: 'Frame rate',
800
+ propModified: 'Modified',
801
+ propLinked: "Kept at",
802
+ propProxy: "Proxy",
803
+ kindAudio: 'Audio',
804
+ uploadFailed: 'Import failed, please retry',
805
+ unreadable: '“{name}” was imported, but it can’t be read as a picture, video or sound ({why}). Check the file, or import another copy.',
806
+ imported: 'Imported {n} file(s) into Media',
807
+ },
808
+ saved: {
809
+ title: 'Saved',
810
+ back: 'Back to the project’s media',
811
+ add: 'Add to Saved',
812
+ addTogether: 'Add {n} clips to Saved as one',
813
+ addEach: 'Add each to Saved',
814
+ added: 'Added to Saved',
815
+ addedMany: '{n} added to Saved',
816
+ failed: 'Could not add to Saved: {error}',
817
+ emptyTitle: 'Nothing in Saved yet',
818
+ emptyBody: 'Saved is yours in every project. Upload files of any kind or drop them here, or right-click a clip on the timeline and choose Add to Saved.',
819
+ component: 'Component',
820
+ kind_clip: 'Clip',
821
+ kind_group: 'Clips',
822
+ kind_page: 'Page',
823
+ },
824
+ media: {
825
+ insertSource: "Insert at the playhead",
826
+ overwriteSource: "Overwrite at the playhead",
827
+ results: 'Results',
828
+ moveFailed: 'Could not move it there.',
829
+ moveAskTitle: 'Some paths in it can’t be updated',
830
+ moveAskBody: 'Studio rewrites the links it can read when a page moves. These are made while the page runs, so they will still point at the old place: check them after the move, or ask your agent to fix them.',
831
+ moveAskConfirm: 'Move anyway',
832
+ viewGrid: 'Show as a grid',
833
+ viewList: 'Show as a list',
834
+ moveTaken: '{folder} already has a file named “{name}”. Rename one of them first.',
835
+ emptyFolder: 'This folder is empty',
836
+ deleteFolderTitle: 'Delete the folder "{name}"?',
837
+ cannotPreview: 'This file cannot be previewed here.',
838
+ scrub: 'Position',
839
+ search: 'Search media',
840
+ searchShort: "Search",
841
+ clearSearch: 'Clear search',
842
+ sort: 'Sort',
843
+ import: 'Import media',
844
+ upload: 'Upload',
845
+ filter: 'Show',
846
+ filter_all: 'All',
847
+ filter_video: 'Video',
848
+ filter_image: 'Images',
849
+ filter_audio: 'Audio',
850
+ filter_page: 'Pages',
851
+ filter_other: "Other",
852
+ dismiss: 'Dismiss',
853
+ emptyTitle: 'No media yet',
854
+ emptyBody: "Import video, images, sound or any other file, or drop them here. Whatever your agent saves in this project shows up here too.",
855
+ noMatch: 'Nothing matches your search.',
856
+ copyPath: 'Copy path',
857
+ dropHint: 'Drop to import into this project',
858
+ sort_name: 'Name',
859
+ sort_time: 'Date added',
860
+ sort_duration: 'Duration',
861
+ sort_type: 'Type',
862
+ moveTo: "Move to",
863
+ moveHere: "It’s already here",
864
+ deleteMany: "Delete {n} items",
865
+ deleteManyTitle: "Delete {n} items?",
866
+ deleteManyConfirm: `They move to ${TRASH}, where you can take them back.`,
867
+ deleteManyAlsoClip: `They move to ${TRASH}, where you can take them back. The clip using one of them on the timeline is removed too.`,
868
+ deleteManyAlsoClips: `They move to ${TRASH}, where you can take them back. The {n} clips using them on the timeline are removed too.`,
869
+ importFiles: "Import files…",
870
+ importFilesNote: "A copy goes into the project",
871
+ linkFiles: "Link files…",
872
+ linkFilesNote: "They stay where they are, on a NAS or another disk",
873
+ linkFolder: "Link a folder…",
874
+ pickImport: "Choose files to import",
875
+ pickLink: "Choose files to link",
876
+ pickLinkFolder: "Choose a folder to link",
877
+ pickRelink: "Where is it now?",
878
+ noDialog: "This system has no file dialog Studio can open. Drop the files here instead.",
879
+ revealOriginal: "Show original",
880
+ relink: "Relink…",
881
+ relinkFailed: "Couldn’t link it there",
882
+ collect: "Copy into project",
883
+ collectNote: "The original stays where it is",
884
+ collectFailed: "Couldn’t copy it into the project",
885
+ linkMissing: "Not found",
886
+ linkedFrom: "Linked from {path}",
887
+ proxy: "Proxy",
888
+ proxyMaking: "Making a proxy… {p}%",
889
+ proxyWaiting: "Proxy waiting its turn",
890
+ proxyFailed: "A proxy couldn’t be made: it plays from the original",
891
+ proxyReady: "Ready: the viewer plays it",
892
+ },
893
+ assetsPane: {
894
+ show: 'Show assets',
895
+ hide: 'Hide assets',
896
+ },
897
+ layers: {
898
+ movesGroup: 'Moves all of {name}',
899
+ title: 'Layers',
900
+ showPane: 'Show layers',
901
+ hidePane: 'Hide layers',
902
+ resize: 'Resize layers / viewer',
903
+ empty: 'Nothing is on the picture at this moment. Move the playhead onto a clip.',
904
+ expand: 'Expand',
905
+ collapse: 'Collapse',
906
+ hide: 'Hide',
907
+ show: 'Show',
908
+ lock: 'Lock',
909
+ unlock: 'Unlock',
910
+ notNow: 'Not on the picture at this moment',
911
+ restackFailed: 'That layer couldn\'t be restacked. The picture may have changed; try again.',
912
+ },
913
+ viewer: {
914
+ stats: '{fps} frames/s · {late} late',
915
+ statsRendered: 'from a render',
916
+ loopRange: "Loop the range",
917
+ loopFilm: "Loop",
918
+ play: 'Play',
919
+ pause: 'Pause',
920
+ frameCustom: 'Custom',
921
+ ratioOriginal: 'Original',
922
+ ratioPhone: '5.8″ phone',
923
+ frameCustomW: 'Width',
924
+ frameCustomH: 'Height',
925
+ frameCustomApply: 'Use this ratio',
926
+ frameCustomRange: 'From 1:4 to 4:1',
927
+ fullscreen: 'Full screen',
928
+ playback: 'Playback',
929
+ speed: 'Speed',
930
+ },
931
+ inspector: {
932
+ fades: 'Fades',
933
+ fadeIn: 'Fade in',
934
+ fadeOut: 'Fade out',
935
+ transition: 'Transition',
936
+ transitionLength: 'Length',
937
+ transitionRemove: 'Remove transition',
938
+ trackLocked: "On a locked track: unlock the track on the timeline to change it.",
939
+ frameRate: "Frame rate",
940
+ frameRateFootage: "Taken from the footage. The timecode, frame steps and the export’s default rate use it.",
941
+ frameRateNote: "The timecode, frame steps and the export’s default rate use it.",
942
+ panel: 'Inspector',
943
+ show: 'Show inspector',
944
+ hide: 'Hide inspector',
945
+ resize: 'Resize viewer / inspector',
946
+ empty: 'Click anything in the picture — a line of text, an image, a shape — or a clip on the timeline.',
947
+ appearance: 'Appearance',
948
+ typography: 'Typography',
949
+ content: 'Text',
950
+ fontSize: 'Size',
951
+ fontWeight: 'Weight',
952
+ fontFamily: 'Font',
953
+ fontSearch: 'Search fonts',
954
+ fontUse: 'Use “{name}”',
955
+ fontNone: 'No matching font',
956
+ fontGroupLatin: 'Latin',
957
+ fontGroupZh: 'Chinese',
958
+ fontGroupJa: 'Japanese',
959
+ fontGroupKo: 'Korean',
960
+ fontGroupProject: 'In this project',
961
+ fontGroupRecent: 'Recent',
962
+ fontElsewhere: 'other page',
963
+ fontMissing: 'Not installed — the picture uses a fallback',
964
+ fontLoading: 'Loading fonts…',
965
+ fontSizes: 'Common sizes',
966
+ weightItalic: '{name} Italic',
967
+ color: 'Color',
968
+ fill: 'Fill',
969
+ opacity: 'Opacity',
970
+ letterSpacing: 'Letter spacing',
971
+ lineHeight: 'Line height',
972
+ textAlign: 'Alignment',
973
+ width: 'Width',
974
+ height: 'Height',
975
+ radius: 'Radius',
976
+ fit: 'How the picture fills its box',
977
+ fitContain: 'Fit',
978
+ fitCover: 'Fill',
979
+ fitFill: 'Stretch',
980
+ cropTop: 'Crop top',
981
+ cropBottom: 'Crop bottom',
982
+ cropLeft: 'Crop left',
983
+ cropRight: 'Crop right',
984
+ shadow: 'Shadow',
985
+ custom: 'Custom',
986
+ blend: 'Blend mode',
987
+ clipCss: 'Custom CSS',
988
+ clipCssEmpty: 'One property a line, e.g. filter: saturate(1.2)',
989
+ mapTextShared: 'Shared by all {n} copies',
990
+ multi: '{n} clips selected',
991
+ multiLayers: '{n} layers selected',
992
+ multiLayersHint: 'Drag them on the picture to move them together, nudge them with the arrow keys, or right-click to align them. Click one to change it on its own.',
993
+ kindPage: 'Page',
994
+ kindVideo: 'Video',
995
+ kindAudio: 'Audio',
996
+ kindCaption: 'Subtitles',
997
+ x: 'X',
998
+ y: 'Y',
999
+ scale: 'Scale',
1000
+ rotate: 'Rotate',
1001
+ resetTransform: 'Reset transform',
1002
+ at: 'Start',
1003
+ duration: 'Duration',
1004
+ inPoint: 'In point',
1005
+ inPointWhole: 'The clip plays all of its file. Shorten it to move the in point.',
1006
+ speed: 'Speed',
1007
+ speedLimit: 'Slower than {n}× runs into the next clip. On the main track, the timeline\'s magnet pushes it along.',
1008
+ speedTooSlow: 'Slower than {n}× runs into the next clip on its track.',
1009
+ sound: 'Sound',
1010
+ gainDb: 'Volume',
1011
+ pageChanges: 'Changes inside the page',
1012
+ templateOffPicture: 'Move the playhead onto this clip to see its values.',
1013
+ props: 'Properties',
1014
+ propsEmpty: 'Select a layer of this page and click ◇ beside its words, its picture or its appearance to make it a property.',
1015
+ propsAdd: 'Add a property from the page’s variables',
1016
+ propsNoVars: 'This page has no variables',
1017
+ propsResetAll: 'Reset all',
1018
+ propReset: 'Back to the default',
1019
+ propRename: 'Rename',
1020
+ propRenameHint: 'Double-click to rename; right-click for more',
1021
+ propRemove: 'Remove property',
1022
+ propText: 'Text',
1023
+ propShowName: 'Show {name}',
1024
+ propBound: 'Property “{name}”: click to remove it',
1025
+ propMakeText: 'Make the words a property',
1026
+ propMakePicture: 'Make the picture a property',
1027
+ propMakeShow: 'Make showing it a property',
1028
+ picture: 'Picture',
1029
+ templatePictureReplace: 'Replace picture',
1030
+ templatePictureComputer: 'From this computer…',
1031
+ pageChangeLost: 'No longer in the page',
1032
+ pageChangeRemove: 'Undo this change',
1033
+ pageChangeText: 'text',
1034
+ pageChangeMoved: 'moved',
1035
+ pageChangeScaled: 'resized',
1036
+ pageChangeRotated: 'rotated',
1037
+ noEdit: "This clip can't be edited",
1038
+ kindText: 'Text',
1039
+ kindImage: 'Image',
1040
+ kindShape: 'Shape',
1041
+ kindBox: 'Box',
1042
+ dismiss: 'Dismiss',
1043
+ scope: 'Apply to',
1044
+ scopeOne: 'This copy (#{i})',
1045
+ scopeAll: 'All {n} copies',
1046
+ scopeThis: "This text",
1047
+ scopeSimilar: "All like it",
1048
+ scopeSimilarIn: "All like it · {n}",
1049
+ scopeSimilarHint: "Its look (color, size, font…) goes to every text like it in the film: the same tag and classes, in every page. Words and places stay each one’s.",
1050
+ timing: 'Timing',
1051
+ mixed: 'Mixed',
1052
+ clearOverride: 'Clear my style changes',
1053
+ offsetX: 'Offset X',
1054
+ offsetY: 'Offset Y',
1055
+ resetPosition: 'Reset position',
1056
+ background: 'Background',
1057
+ auto: 'Auto',
1058
+ alignLeft: 'Align left',
1059
+ alignHCenter: 'Align horizontal centers',
1060
+ alignRight: 'Align right',
1061
+ alignTop: 'Align top',
1062
+ alignVCenter: 'Align vertical centers',
1063
+ alignBottom: 'Align bottom',
1064
+ editOnCanvas: 'Double-click the text in the picture to edit it in place.',
1065
+ aspectLocked: 'Scales proportionally',
1066
+ aspectFree: 'Scale freely',
1067
+ position: 'Position & size',
1068
+ cropFill: 'Crop & fill',
1069
+ cropStart: 'Crop',
1070
+ cropShape: 'Crop to a shape',
1071
+ cropFree: 'Free',
1072
+ cropOriginal: 'Original',
1073
+ cropCustom: 'Clipped to a shape of its own: change it under Advanced.',
1074
+ mask: 'Mask',
1075
+ maskShape: 'Mask shape',
1076
+ maskShapes: {
1077
+ none: 'None',
1078
+ linear: 'Linear',
1079
+ mirror: 'Mirror',
1080
+ ellipse: 'Circle',
1081
+ rect: 'Rectangle',
1082
+ star: 'Star',
1083
+ heart: 'Heart',
1084
+ },
1085
+ maskX: 'Mask center X',
1086
+ maskY: 'Mask center Y',
1087
+ maskW: 'Mask width',
1088
+ maskH: 'Mask height',
1089
+ maskBand: 'Band width',
1090
+ maskFeather: 'Feather',
1091
+ maskInvert: 'Invert',
1092
+ maskEditOnPicture: 'Edit on picture',
1093
+ maskRemove: 'Remove the mask',
1094
+ maskCustom: 'A mask of its own: change it under Advanced.',
1095
+ framing: 'Picture in its box',
1096
+ framingX: 'Horizontal position',
1097
+ framingY: 'Vertical position',
1098
+ resetSection: 'Reset',
1099
+ blendShort: 'Blend',
1100
+ blendModes: {
1101
+ normal: 'Normal',
1102
+ multiply: 'Multiply',
1103
+ screen: 'Screen',
1104
+ overlay: 'Overlay',
1105
+ darken: 'Darken',
1106
+ lighten: 'Lighten',
1107
+ 'color-dodge': 'Color dodge',
1108
+ 'color-burn': 'Color burn',
1109
+ 'soft-light': 'Soft light',
1110
+ 'hard-light': 'Hard light',
1111
+ difference: 'Difference',
1112
+ exclusion: 'Exclusion',
1113
+ hue: 'Hue',
1114
+ saturation: 'Saturation',
1115
+ color: 'Color',
1116
+ luminosity: 'Luminosity',
1117
+ },
1118
+ adjust: 'Adjust',
1119
+ adjustCustom: 'Its filter is written by hand: change it under Advanced.',
1120
+ adjustKeys: {
1121
+ brightness: 'Brightness',
1122
+ contrast: 'Contrast',
1123
+ saturate: 'Saturation',
1124
+ hue: 'Hue',
1125
+ blur: 'Blur',
1126
+ grayscale: 'Grayscale',
1127
+ },
1128
+ effects: 'Effects',
1129
+ effectAdd: 'Add an effect',
1130
+ effectRemove: 'Remove',
1131
+ effectCustom: 'written by hand, under Advanced',
1132
+ effectsNone: 'None yet: add a shadow, a blur or faded edges with +.',
1133
+ shadowX: 'Shadow X',
1134
+ shadowY: 'Shadow Y',
1135
+ shadowBlur: 'Shadow blur',
1136
+ shadowColor: 'Shadow color',
1137
+ stroke: 'Stroke',
1138
+ strokeAdd: 'Add stroke',
1139
+ strokePosition: 'Stroke position',
1140
+ strokePositions: { inside: 'Inside', center: 'Center', outside: 'Outside' },
1141
+ strokeCut: 'A crop, a mask or faded edges cut away what is drawn past the edge: pick Inside to see all of it.',
1142
+ fillAdd: 'Add fill',
1143
+ fillRemove: 'Remove fill',
1144
+ innerShadow: 'Inner shadow',
1145
+ layerBlur: 'Layer blur',
1146
+ backgroundBlur: 'Background blur',
1147
+ shadowSpread: 'Spread',
1148
+ cornersEach: 'Independent corners',
1149
+ cornersCropped: 'A crop rounds its corners alike',
1150
+ corners: { 'top-left': 'Top left', 'top-right': 'Top right', 'bottom-right': 'Bottom right', 'bottom-left': 'Bottom left' },
1151
+ textDecoration: 'Decoration',
1152
+ decorations: { none: 'None', underline: 'Underline', lineThrough: 'Strikethrough' },
1153
+ strokeWidth: 'Stroke width',
1154
+ strokeStyle: 'Stroke style',
1155
+ strokeColor: 'Stroke color',
1156
+ strokeStyles: {
1157
+ solid: 'Solid',
1158
+ dashed: 'Dashed',
1159
+ dotted: 'Dotted',
1160
+ },
1161
+ fade: 'Fade edges',
1162
+ fadeSides: 'Edges to fade',
1163
+ fadeSize: 'Fade size',
1164
+ fadeSide: {
1165
+ top: 'Top edge',
1166
+ right: 'Right edge',
1167
+ bottom: 'Bottom edge',
1168
+ left: 'Left edge',
1169
+ },
1170
+ textCase: 'Case',
1171
+ caseNone: 'As typed',
1172
+ caseUpper: 'Uppercase',
1173
+ caseLower: 'Lowercase',
1174
+ caseTitle: 'Title case',
1175
+ alignTextLeft: 'Align text left',
1176
+ alignTextCenter: 'Center text',
1177
+ alignTextRight: 'Align text right',
1178
+ alignTextJustify: 'Justify text',
1179
+ advanced: 'Advanced',
1180
+ classes: 'Classes',
1181
+ classesEmpty: 'Classes from the film\'s styles, e.g. card',
1182
+ timeUnit: 'Show times as',
1183
+ timeTimecode: 'Timecode (30 frames a second, as the player)',
1184
+ timeSeconds: 'Seconds',
1185
+ sourceBar: 'Source file',
1186
+ slipHint: 'Drag to play another part of the file in the same place; drag an end to trim',
1187
+ trimHead: 'Trim the start',
1188
+ trimTail: 'Trim the end',
1189
+ distributeH: 'Distribute horizontally',
1190
+ distributeV: 'Distribute vertically',
1191
+ film: 'Film',
1192
+ stage: 'Stage',
1193
+ stageShape: 'Stage shape',
1194
+ redesignOpen: 'Ask your agent to lay it out for this canvas',
1195
+ redesignBody: 'Paste these words in the chat: your agent lays out every page and clip again for the canvas as it is now.',
1196
+ redesignAsk: 'This film’s canvas is now {ratio} ({size}). Lay out every page and clip again for it, and check each scene with look.',
1197
+ redesignCopy: 'Copy the request',
1198
+ redesignCopied: 'Copied: paste it in the chat',
1199
+ filmInfo: 'Contents',
1200
+ tracks: 'Tracks',
1201
+ clipsCount: 'Clips',
1202
+ pageChangeStyled: 'restyled',
1203
+ weights: {
1204
+ w100: 'Thin',
1205
+ w200: 'Extra Light',
1206
+ w300: 'Light',
1207
+ w400: 'Regular',
1208
+ w500: 'Medium',
1209
+ w600: 'Semi Bold',
1210
+ w700: 'Bold',
1211
+ w800: 'Extra Bold',
1212
+ w900: 'Black',
1213
+ },
1214
+ },
1215
+ colorPicker: {
1216
+ close: 'Close',
1217
+ eyedropper: 'Pick a color from the screen',
1218
+ hex: 'Hex',
1219
+ recent: 'Recent',
1220
+ },
1221
+ layout: {
1222
+ title: 'Layout',
1223
+ assets: 'Assets',
1224
+ layers: 'Layers',
1225
+ timeline: 'Timeline',
1226
+ inspector: 'Inspector',
1227
+ },
1228
+ timeline: {
1229
+ renameTrack: "Rename track",
1230
+ mediaMissing: 'Media not found',
1231
+ mediaMissingHint: 'The file is no longer in the project. Right-click to relink it.',
1232
+ menuRelink: 'Relink media',
1233
+ menuRelinkPick: 'Choose a file…',
1234
+ mediaCannotPlay: 'This clip cannot play in the app. The rest of the film is unaffected.',
1235
+ noLength: 'no length',
1236
+ noLengthHint: 'This clip has no length: it plays no time of its own (a picture, or a page without a duration) and gives none. Pull its end to say how long it plays.',
1237
+ mediaReconnecting: 'Reconnecting to this clip… it comes back on its own.',
1238
+ resize: 'Resize timeline',
1239
+ seek: 'Drag the playhead',
1240
+ split: 'Split',
1241
+ subtitles: 'Subtitles',
1242
+ subtitlesNone: 'No subtitles yet — they appear once the film has a voice',
1243
+ subtitlesMakeOne: 'Make subtitles: a voice clip has no transcript yet',
1244
+ subtitlesMake: 'Make subtitles: {n} clips with speech have no transcript yet',
1245
+ subtitlesMaking: 'Making subtitles…',
1246
+ subtitlesConnect: 'Making subtitles needs a service that transcribes: connect one in Settings (the OpenFilm logo at the top left) → Providers',
1247
+ subtitlesFailed: 'Subtitles could not be made: {error}',
1248
+ subtitleLines: 'Lines',
1249
+ subtitleLineAt: 'The line at {time}',
1250
+ subtitleLineGo: 'Go to {time}',
1251
+ subtitleLineInLanguage: 'The line at {time}, in {lang}',
1252
+ subtitleLineUntranslated: 'Not translated yet',
1253
+ subtitleLinesMakeOne: 'Make subtitles for a voice clip whose transcript is missing or out of date',
1254
+ subtitleLinesMake: 'Make subtitles for {n} clips whose transcript is missing or out of date',
1255
+ subtitleStyle: 'Subtitle style',
1256
+ subtitleLanguageGroup: 'Subtitle language',
1257
+ subtitleLanguageOriginal: 'Original',
1258
+ subtitleLanguageOriginalNamed: 'Original · {lang}',
1259
+ subtitleLanguageTranslate: 'Translate into',
1260
+ subtitleLanguageShow: 'Show',
1261
+ subtitleShowTranslation: 'Translation',
1262
+ subtitleShowBoth: 'Original + translation',
1263
+ subtitleTranslating: 'Translating the voices into {lang}…',
1264
+ subtitleTranslateFailed: "Couldn't translate right now.",
1265
+ subtitleTranslateNetwork: "Couldn't reach the translation service.",
1266
+ subtitleTranslateRetry: 'Retry',
1267
+ subtitleTranslateConnect: 'Connect a service that translates in Settings (the OpenFilm logo at the top left) → Providers.',
1268
+ subtitleSize: 'Size',
1269
+ subtitleLook: {
1270
+ outline: 'Outlined (default)',
1271
+ bar: 'Bar behind',
1272
+ bold: 'Bold, heavy outline',
1273
+ yellow: 'Yellow',
1274
+ clean: 'No outline',
1275
+ },
1276
+ subtitleFontGroup: 'Type',
1277
+ subtitleEffectGroup: 'Effects',
1278
+ subtitleKaraoke: 'Word highlight',
1279
+ subtitleKaraokeMode: 'Style',
1280
+ subtitleKaraokeBox: 'Highlight box',
1281
+ subtitleKaraokeColor: 'Color',
1282
+ subtitleKaraokePop: 'Pop',
1283
+ subtitleFade: 'Fade in and out',
1284
+ subtitleKaraokeTint: 'Highlight color',
1285
+ subtitleFamily: 'Typeface',
1286
+ subtitleFamilyDefault: 'Default',
1287
+ subtitleWeight: 'Weight',
1288
+ subtitleItalic: 'Italic',
1289
+ subtitleUpper: 'Uppercase',
1290
+ subtitleTracking: 'Tracking',
1291
+ subtitleLeading: 'Leading',
1292
+ subtitleInkGroup: 'Color',
1293
+ subtitleFill: 'Fill',
1294
+ subtitleStroke: 'Stroke',
1295
+ subtitleShadow: 'Shadow',
1296
+ subtitleBlur: 'Blur',
1297
+ subtitleOffsetY: 'Drop',
1298
+ subtitleBox: 'Box',
1299
+ subtitleOpacity: 'Opacity',
1300
+ subtitleRadius: 'Corner',
1301
+ subtitleLayoutGroup: 'Layout',
1302
+ subtitleAlign: 'Align',
1303
+ subtitleAlignLeft: 'Left',
1304
+ subtitleAlignCenter: 'Center',
1305
+ subtitleAlignRight: 'Right',
1306
+ subtitleWidth: 'Max width',
1307
+ subtitleReset: 'Reset',
1308
+ subtitleDrag: 'Drag it on the picture to move it.',
1309
+ subtitleSaved: 'This style is kept with the project, and exports use it.',
1310
+ removeBlock: 'Delete',
1311
+ rippleRemove: 'Ripple delete',
1312
+ menuSplitHere: 'Split at playhead',
1313
+ menuDetachAudio: 'Detach audio',
1314
+ menuDetachAudioNone: 'This video has no sound',
1315
+ menuCopy: 'Copy',
1316
+ menuPaste: 'Paste',
1317
+ menuPasteEmpty: 'Nothing copied yet',
1318
+ menuSplitOutside: 'The playhead is not over this clip — move it where you want the cut',
1319
+ menuCopyNone: "This clip isn't in film.html, so it can't be changed here",
1320
+ menuExportClip: 'Export this clip',
1321
+ menuExportNoId: "This clip isn't in film.html, so it can't be exported",
1322
+ modeSelect: 'Select',
1323
+ modeSplit: 'Split',
1324
+ applying: 'Saving film.html…',
1325
+ emptyStudio: 'Drag assets here to start your film, or ask your agent to make one.',
1326
+ zoomIn: 'Zoom in',
1327
+ zoomOut: 'Zoom out',
1328
+ zoomFit: 'Fit to width',
1329
+ zoom: 'Zoom',
1330
+ snap: 'Snap',
1331
+ snapOn: 'On: drags snap to clip edges, the playhead and markers',
1332
+ snapOff: 'Off: clips land exactly where you let go',
1333
+ mainTrack: 'Main track',
1334
+ magnet: 'Main track magnet',
1335
+ magnetOn: 'On: clips on the main track stay end to end, with no gaps',
1336
+ magnetOff: 'Off: clips on the main track stay where you put them',
1337
+ linkage: 'Linkage',
1338
+ linkageOn: 'On: titles, overlays and sound move with the main-track clip under them, and go with it',
1339
+ linkageOff: 'Off: editing the main track moves only the main track',
1340
+ previewAxis: 'Preview axis',
1341
+ previewAxisOn: 'On: the picture follows the pointer over the timeline',
1342
+ previewAxisOff: 'Off: the picture stays at the playhead',
1343
+ rippleShort: "Clips on another track were in the way: {s} s left open so everything stays in sync.",
1344
+ menuCloseGap: 'Close gap',
1345
+ menuCloseGaps: 'Close all gaps on this track',
1346
+ menuRippleStart: 'Ripple trim start to playhead',
1347
+ menuRippleEnd: 'Ripple trim end to playhead',
1348
+ menuLink: 'Link',
1349
+ menuUnlink: 'Unlink',
1350
+ tip: {
1351
+ trim: 'Trim',
1352
+ ripple: 'Ripple',
1353
+ sourceEnd: 'End of the media',
1354
+ },
1355
+ trackLocked: 'Track locked',
1356
+ dropNotClip: "This asset can't go on the timeline",
1357
+ dropFromComputer: 'New file',
1358
+ editFail: "That change didn't take",
1359
+ removeFail: "Couldn't delete that",
1360
+ splitFail: "Couldn't split that",
1361
+ detachFail: "Couldn't detach that clip's audio",
1362
+ pasteGone: "The copied clip isn't in the film any more",
1363
+ lockTrack: 'Lock track',
1364
+ unlockTrack: 'Unlock track',
1365
+ hideTrack: 'Turn off this track: no picture or sound',
1366
+ showTrack: 'Turn this track back on',
1367
+ muteTrack: 'Turn off original sound',
1368
+ unmuteTrack: 'Turn on original sound',
1369
+ muteSoundTrack: 'Mute track',
1370
+ unmuteSoundTrack: 'Unmute track',
1371
+ },
1372
+ /* the timeline's audio and editing tools: meters, solo, markers, loudness, freeze frame, replace, track heights */
1373
+ editorTools: {
1374
+ meters: "Audio meters",
1375
+ metersClip: "Clipped: the sound reached 0 dB. Click to reset",
1376
+ metersPeak: "Loudest peak of late, dBFS",
1377
+ solo: "Solo: hear this track alone, here only (⌥-click: only this one)",
1378
+ unsolo: "Stop soloing this track",
1379
+ resizeTrack: "Drag to make the track taller or shorter · double-click: its usual height",
1380
+ markerAdd: "Add marker",
1381
+ markerAddClip: "Add marker on clip",
1382
+ markerAddedOn: "Marker added on {clip}",
1383
+ markerColor: "Color",
1384
+ markerDelete: "Delete marker",
1385
+ markerName: "Marker name",
1386
+ markerUntitled: "Marker",
1387
+ colors: {
1388
+ blue: "Blue",
1389
+ green: "Green",
1390
+ yellow: "Yellow",
1391
+ orange: "Orange",
1392
+ red: "Red",
1393
+ purple: "Purple",
1394
+ },
1395
+ trackHeight: "Track height",
1396
+ allTracksHeight: "Height of all tracks",
1397
+ size: {
1398
+ small: "Small",
1399
+ medium: "Medium",
1400
+ large: "Large",
1401
+ },
1402
+ normalize: "Normalize loudness",
1403
+ target: {
1404
+ web: "{lufs} LUFS · web video",
1405
+ podcast: "{lufs} LUFS · podcast",
1406
+ broadcast: "{lufs} LUFS · broadcast",
1407
+ },
1408
+ normalizeNone: "No sound to normalize in the selection",
1409
+ normalizing: "Measuring loudness…",
1410
+ normalized: "{n} clips normalized to {target} LUFS",
1411
+ normalizedOne: "{clip}: {from} LUFS → {target} LUFS (volume {pct}%)",
1412
+ normalizeShort: "{clip} can't reach {target} LUFS: at 500% it is {lufs} LUFS",
1413
+ normalizeSilent: "{clip} has no sound to measure",
1414
+ normalizeFail: "Couldn't measure {clip}: {reason}",
1415
+ freeze: "Freeze frame",
1416
+ freezeOutside: "Put the playhead on this clip first",
1417
+ freezeFail: "Couldn't make a still of that frame: {reason}",
1418
+ replace: "Replace with…",
1419
+ replaceNone: "No file in the project can take its place",
1420
+ replaceKind: "A picture is replaced by a picture, a sound by a sound",
1421
+ replaceShort: "The new file is shorter: the clip is {s} s shorter",
1422
+ replaceButton: "Replace",
1423
+ replaceFromComputer: "From your computer…",
1424
+ replacePick: "Choose a file to replace the clip",
1425
+ },
1426
+ /* a clip's attributes copied onto others (lib/clip-attrs, components/PasteAttrsDialog) */
1427
+ clipAttrs: {
1428
+ title: 'Paste attributes',
1429
+ picture: 'Picture',
1430
+ sound: 'Sound',
1431
+ place: 'Position and size',
1432
+ blend: 'Blending (opacity, blend mode)',
1433
+ volume: 'Volume',
1434
+ fade: 'Fade in / fade out',
1435
+ paste: 'Paste',
1436
+ copy: 'Copy attributes',
1437
+ pasteMenu: 'Paste attributes…',
1438
+ copied: 'Attributes copied: select clips and press ⌘⇧V to paste them',
1439
+ nothing: 'Copy a clip\'s attributes first (⌘⇧C)',
1440
+ selectFirst: 'Select a clip first',
1441
+ },
1442
+ transitions: {
1443
+ dissolve: 'Cross dissolve',
1444
+ 'dip-black': 'Dip to black',
1445
+ 'dip-white': 'Dip to white',
1446
+ 'fade-in': 'Fade in',
1447
+ 'fade-out': 'Fade out',
1448
+ crossfade: 'Audio crossfade',
1449
+ remove: 'Remove transition',
1450
+ atCut: 'Transition',
1451
+ locked: 'A clip it changes is on a locked track',
1452
+ none: 'There is no cut there: select a clip, or put the playhead by a cut',
1453
+ short: 'The clips are too short for that',
1454
+ mark: '{kind} · {s} s — drag an edge to change its length; Delete removes it',
1455
+ handle: '{what}: {s} s — drag inward to fade (⌥: this clip alone)',
1456
+ fadeTip: '{what} {s} s',
1457
+ },
1458
+ subtitleRow: {
1459
+ editOnTimeline: 'Edit on timeline',
1460
+ showRow: 'Show the subtitles as a row on the timeline, to time, split and merge them',
1461
+ hideRow: 'Hide the subtitle row on the timeline',
1462
+ name: 'Subtitles',
1463
+ add: 'Add a subtitle at the playhead',
1464
+ hide: 'Hide subtitle row',
1465
+ hideNote: 'Turn it back on in Subtitle style › Edit on timeline.',
1466
+ split: 'Split at the playhead',
1467
+ splitWhere: 'Put the playhead inside the subtitle, away from its edges',
1468
+ merge: 'Merge with the next',
1469
+ mergeWhy: 'Only with the next subtitle of the same voice',
1470
+ edit: 'Edit text',
1471
+ delete: 'Delete',
1472
+ newText: 'New subtitle',
1473
+ nothingHeard: 'Nothing is heard at the playhead: a subtitle is what a voice or a video says',
1474
+ noRoom: 'There is no room for a subtitle here',
1475
+ gone: 'That subtitle is not there any more',
1476
+ notNext: 'These two subtitles are not next to each other',
1477
+ },
1478
+ confirm: {
1479
+ ok: 'Confirm',
1480
+ deleteTitle: 'Delete this project?',
1481
+ deleteDesc: `Its folder, with the film and everything in it, moves to ${TRASH}.`,
1482
+ deleteManyTitle: 'Delete these {n} projects?',
1483
+ deleteManyDesc: `Their folders, with the films and everything in them, move to ${TRASH}.`,
1484
+ delete: 'Delete',
1485
+ cancel: 'Cancel',
1486
+ },
1487
+ /* what an agent's `openfilm get` asks before it spends (see SpendAsks) */
1488
+ asks: {
1489
+ videoTitle: 'Your agent wants to make a video clip',
1490
+ videoNote: 'Video is the most expensive kind of media to make.',
1491
+ make: 'Make it',
1492
+ skip: 'Skip',
1493
+ balanceTitle: '{provider}: not enough balance',
1494
+ balanceBody: "{provider} doesn't have enough balance for this. Top it up there, or switch to another service, then try again.",
1495
+ manage: 'Manage',
1496
+ close: 'Close',
1497
+ },
1498
+ settings: {
1499
+ title: 'Settings',
1500
+ done: 'Done',
1501
+ search: 'Search',
1502
+ noResults: 'No settings match',
1503
+ groups: {
1504
+ help: 'Help',
1505
+ },
1506
+ links: {
1507
+ github: 'GitHub',
1508
+ examples: 'Examples',
1509
+ site: 'Website',
1510
+ },
1511
+ sections: {
1512
+ agents: 'Agents',
1513
+ providers: 'Providers',
1514
+ models: 'Services',
1515
+ developer: 'Developer',
1516
+ general: 'General',
1517
+ shortcuts: 'Keyboard shortcuts',
1518
+ advanced: 'Advanced',
1519
+ },
1520
+ appearance: {
1521
+ group: 'Appearance',
1522
+ theme: 'Theme',
1523
+ light: 'Light',
1524
+ dark: 'Dark',
1525
+ system: 'System',
1526
+ language: 'Language',
1527
+ languageSystem: 'Same as the system',
1528
+ themeHint: 'Light, dark, or the same as your system.',
1529
+ languageHint: 'The language OpenFilm shows itself in.',
1530
+ },
1531
+ storage: {
1532
+ group: 'Storage',
1533
+ projects: 'Projects folder',
1534
+ projectsPick: 'Choose the projects folder',
1535
+ pickButton: 'Choose',
1536
+ change: 'Change…',
1537
+ show: 'Show',
1538
+ reset: 'Use default',
1539
+ save: 'Save',
1540
+ free: '{size} free on this disk',
1541
+ moveTitle: 'Move your projects too?',
1542
+ moveDesc: '{count} projects are in {from}. Move them to {to}, or leave them where they are: they stay in Projects.',
1543
+ moveYes: 'Move projects',
1544
+ moveNo: 'Leave them',
1545
+ moved: 'Moved {count} projects.',
1546
+ moveFailed: 'These could not move and stay where they were: {names}',
1547
+ },
1548
+ playback: {
1549
+ group: "Playback",
1550
+ proxies: "Proxies for heavy footage",
1551
+ proxiesHint: "Footage past 1080p (4K, say), or slow to decode (ProRes, HEVC, 10-bit), plays from a lighter copy made in the background. Exports always use the originals.",
1552
+ proxySize: "Proxy size",
1553
+ proxySizeHint: "Smaller plays more smoothly; larger looks sharper in the viewer.",
1554
+ },
1555
+ advanced: {
1556
+ intro: "These are set for the best experience. You don’t need to change them.",
1557
+ fitPages: "Draw pages at the viewer’s size",
1558
+ fitPagesHint: "Canvas and 3D in web pages are drawn at the size the viewer shows them, which plays more smoothly and looks the same. Off: at the film’s full size. Exports always draw at full size.",
1559
+ renders: "Render what plays late",
1560
+ rendersHint: "A stretch the viewer can’t play at full speed is rendered in the background once the film stops, and plays smoothly from then on.",
1561
+ },
1562
+ about: {
1563
+ group: 'About',
1564
+ check: 'Check for updates',
1565
+ checking: 'Checking…',
1566
+ failed: 'Couldn’t reach npm. Try again later.',
1567
+ newer: 'OpenFilm {version} is out.',
1568
+ upToDate: 'Up to date.',
1569
+ source: 'Running from source: git pull updates it.',
1570
+ off: 'Update checks are off here (OPENFILM_NO_UPDATE_CHECK).',
1571
+ never: 'Not checked yet.',
1572
+ inApp: 'Updates come with the desktop app: OpenFilm → Check for Updates…',
1573
+ howTitle: 'Update',
1574
+ how: 'Click Update, run this, or ask your agent to update OpenFilm: Studio restarts on the new version.',
1575
+ appOff: "This build runs from source and doesn't update itself; the installed app does.",
1576
+ appChecked: 'Checked {time}.',
1577
+ appDownloading: 'Downloading OpenFilm {version}…',
1578
+ appStaging: 'Preparing OpenFilm {version}…',
1579
+ appRetry: 'Try again',
1580
+ whatsNew: 'What’s new in this version',
1581
+ appOffline: 'Could not reach the update service. Check your connection.',
1582
+ appUnavailable: 'Updates are unavailable right now. Try again later.',
1583
+ appFailed: 'Could not complete the update. Try again later.',
1584
+ },
1585
+ report: {
1586
+ title: 'Diagnostic report',
1587
+ hint: 'What OpenFilm finds on this computer and in this browser, the agents and the last week’s problems, to paste into an issue. Paths in your home folder show as ~; no keys, accounts or projects.',
1588
+ copy: 'Copy report',
1589
+ making: 'Checking…',
1590
+ copied: 'Copied',
1591
+ failed: 'Couldn’t make the report. Try again.',
1592
+ select: 'Your browser didn’t let Studio copy it: select the report below and copy it.',
1593
+ group: 'Diagnostics',
1594
+ export: 'Diagnostic file',
1595
+ exportHint: 'Everything else that says why something went wrong, as one zip in your exports folder: the report, the problems of the last two weeks, the logs, and how the failed turns went. Look at it before you attach it to an issue.',
1596
+ exportButton: 'Export',
1597
+ exporting: 'Exporting…',
1598
+ exported: 'Exported {name}, shown in its folder.',
1599
+ exportFailed: 'Couldn’t write the file. Try again.',
1600
+ conversations: 'Include what was said in failed turns',
1601
+ conversationsHint: 'Off, for each failed turn the file says only how it went: the agent and model, when each step started and ended, each tool’s kind and whether it worked, the agent’s notices and the error. Never your messages, the agent’s replies, commands, file names or anything from your files.',
1602
+ problems: 'Recent problems',
1603
+ problemsHint: 'What went wrong in the last two weeks, newest first. Kept on this computer only.',
1604
+ noProblems: 'No problems in the last two weeks.',
1605
+ more: 'Show all {count}',
1606
+ conversationsOn: 'On: the next file also has the words of the failed turns, as listed when you turned this on. Turn it off to leave them out.',
1607
+ addsTitle: 'Turning this on adds, for the last five turns that failed in the last two weeks:',
1608
+ adds1: 'Your messages, as you wrote them (pictures you attached stay out).',
1609
+ adds2: 'The agent’s replies and its thinking.',
1610
+ adds3: 'Each step’s title, command, input and output, which can hold your files’ names and contents and what commands printed.',
1611
+ adds4: 'The questions the agent asked you, and your answers.',
1612
+ adds5: 'The instructions the agent started with, including your own from its settings.',
1613
+ addsKept: 'Still taken out: your home folder (shown as ~), keys, tokens and email addresses. Nothing is sent anywhere: the file stays on this computer until you attach it.',
1614
+ addsWho: 'Anyone who can see where you attach it can read it, a public GitHub issue included. Send it only where you mean to.',
1615
+ addsYes: 'Include them',
1616
+ addsNo: 'Cancel',
1617
+ exportedHas: 'In it:',
1618
+ partReport: 'The diagnostic report',
1619
+ partProblems: 'The problems of the last two weeks',
1620
+ partLogs: 'The end of {count} logs of Studio and the app',
1621
+ partTurns: 'How {count} failed turns went, without what was said',
1622
+ partTurnsWords: '{count} failed turns, with what was said',
1623
+ partCodex: 'Codex’s own warnings and errors around its problems',
1624
+ },
1625
+ agents: {
1626
+ intro: 'The agents the chat can use. Codex, Claude Code and the others under Your agents are your own, on the account signed in on this computer: to use another account, switch accounts in the agent itself, then disconnect and connect it again here. Your own key runs on models you set up yourself, each on its own service.',
1627
+ byokName: 'Your own key',
1628
+ groupYours: 'Your agents',
1629
+ groupMore: 'More agents you can use',
1630
+ recommended: 'Recommended',
1631
+ recommendedHint: 'The cheapest way: the subscription you already have',
1632
+ ready: 'Connected',
1633
+ off: 'Not connected',
1634
+ signedOut: 'Not signed in',
1635
+ waiting: 'Waiting for you to sign in…',
1636
+ waitingHint: 'Finish signing in in the window that opened, then come back.',
1637
+ waitingHintMinimax: 'Finish signing in in the window that opened, then come back. An international MiniMax account can’t pick its site there: in a terminal, run mcode login --region global, then Start again.',
1638
+ waitingHintCodebuddy: 'Finish signing in in the window that opened, then come back. That window is CodeBuddy’s own and is titled CodeBuddy, not OpenFilm or a terminal.',
1639
+ startAgain: 'Start again',
1640
+ missing: 'Not installed on this computer',
1641
+ claudeSetup: 'Open the Claude app’s Code tab once to install Claude Code',
1642
+ locate: 'Locate…',
1643
+ locateTitle: 'Choose the {name} program',
1644
+ locateButton: 'Use this',
1645
+ chosenAt: 'Using the program you chose: {path}',
1646
+ automatic: 'Find it automatically',
1647
+ notAProgram: 'That is not a program this computer can start. Choose the agent’s program itself (on Windows, the .exe or .cmd file).',
1648
+ appOnly: 'The {app} app is installed, but connecting needs {name}’s command-line agent.',
1649
+ installing: 'Installing in a terminal window… OpenFilm finds it once it’s done.',
1650
+ installConfirm: 'OpenFilm opens a terminal window and runs {name}’s official installer:',
1651
+ installRun: 'Run installer',
1652
+ notTheAgentApp: 'This is an editor or a desktop app, not {name}’s command-line agent. Connecting needs {name}’s command-line agent.',
1653
+ notCursorAgent: 'This is not Cursor’s command-line agent, which installs in a cursor-agent folder. Connecting needs Cursor’s command-line agent.',
1654
+ didNotStart: 'It did not start from there:',
1655
+ unreadable: 'It can’t read its own settings, so it can’t start. Fix what it names in its config file, or update it:',
1656
+ whyMissing: 'Why isn’t it found?',
1657
+ searching: 'Searching…',
1658
+ hintChosenMissing: 'The program you chose is not there any more. Choose it again, or find it automatically.',
1659
+ hintWsl: 'It is installed in WSL (Linux on Windows), which OpenFilm cannot use. Install it in Windows too, then come back.',
1660
+ hintUnusable: 'Files with its name were found, but none of them can be started. Use Locate… to choose the program itself.',
1661
+ hintNone: 'It is not in any of the folders searched. If {program} works in your terminal, find where it is there (“where {program}” on Windows, “which {program}” on a Mac) and choose that file with Locate….',
1662
+ hintFound: 'Found: {path}',
1663
+ reportNote: 'If it still is not found, copy the report and send it with an issue. It lists folders on this computer.',
1664
+ copyReport: 'Copy report',
1665
+ copied: 'Copied',
1666
+ close: 'Close',
1667
+ needsKey: 'Not set up',
1668
+ unavailable: 'Not available yet: coming in an update',
1669
+ checking: 'Checking…',
1670
+ connect: 'Connect',
1671
+ disconnect: 'Disconnect',
1672
+ disconnectHint: 'Stops OpenFilm using it; its sign-in stays. To use another account, switch accounts in {name}, then connect it again.',
1673
+ accountChatgpt: 'ChatGPT account',
1674
+ accountApiKey: 'API key',
1675
+ accountConsole: 'Anthropic Console',
1676
+ usage: 'Usage',
1677
+ usageLoading: 'Reading what is left of the plan…',
1678
+ usageFiveHour: '5 hours',
1679
+ usageWeek: 'This week',
1680
+ usageWindow: '{hours} hours',
1681
+ usageUsed: '{percent}% used',
1682
+ usageResets: 'resets {time}',
1683
+ signIn: 'Sign in',
1684
+ install: 'Install',
1685
+ setUpKey: 'Set up',
1686
+ change: 'Change',
1687
+ showInChat: 'Show in the chat',
1688
+ showHint: 'Only the agents switched on show in the chat.',
1689
+ failed: 'That did not work. Try again.',
1690
+ format: 'API format',
1691
+ address: 'Address',
1692
+ model: 'Model',
1693
+ modelPlaceholder: 'The model\'s name, as the service names it',
1694
+ addModel: 'Add a model',
1695
+ name: 'Name',
1696
+ namePlaceholder: 'Shown in the chat (the model, when empty)',
1697
+ edit: 'Edit',
1698
+ done: 'Done',
1699
+ keySame: 'Leave empty to use {name}\'s key',
1700
+ removeModel: 'Remove {name}',
1701
+ efforts: 'Reasoning effort',
1702
+ effortStart: 'Starts on',
1703
+ effortHint: 'Tick the efforts this model takes: the chat offers those. Auto sends none, so the service decides.',
1704
+ effortLevels: { auto: 'Auto', off: 'Off', minimal: 'Minimal', low: 'Low', medium: 'Medium', high: 'High', xhigh: 'Extra high', max: 'Max' },
1705
+ context: 'Context length',
1706
+ contextHint: 'Tokens, as the model\'s service documents it. Empty: 128K.',
1707
+ contextBad: 'A whole number of tokens, from 32,000 to 10,000,000.',
1708
+ key: 'API key',
1709
+ keyPlaceholder: 'Paste your API key',
1710
+ keyKept: 'Key ending in {last4} (leave empty to keep it)',
1711
+ byokNote: 'Each model has to read pictures: the agent looks at its own frames. Your keys stay on this computer, and each goes only to its service.',
1712
+ byokRules: 'Its rules are the project\'s own AGENTS.md (or CLAUDE.md), in the project\'s folder. One kept anywhere else, in a folder above or with the agent\'s settings, is not read.',
1713
+ save: 'Check and save',
1714
+ checkingKey: 'Checking…',
1715
+ cancel: 'Cancel',
1716
+ mcpSummary: 'Your MCP servers: {on} of {n} used in OpenFilm',
1717
+ mcpManage: 'Choose',
1718
+ mcpDone: 'Done',
1719
+ mcpNote: 'MCP servers you added to {agent} yourself are off in OpenFilm until you turn one on. Its own are always on.',
1720
+ mcpAllow: 'Use {name} in OpenFilm',
1721
+ skillsSummary: 'Your skills: {on} of {n} used in OpenFilm',
1722
+ skillsNote: 'Skills you installed in {agent} yourself are off in OpenFilm until you turn one on, so films come out the same each time. Its own are always on.',
1723
+ skillsAllow: 'Use {name} in OpenFilm',
1724
+ skillsUnfiltered: '{agent} uses all {n} of your own skills in OpenFilm, as in its own app.',
1725
+ mcpUnfiltered: '{agent} uses all {n} of your own MCP servers in OpenFilm, as in its own app.',
1726
+ },
1727
+ developer: {
1728
+ playbackGroup: 'Playback',
1729
+ playbackStats: 'Show playback stats',
1730
+ playbackStatsHint: 'While the film plays, the viewer’s corner shows how many of the film’s frames it draws a second, how many times a second the screen got no new frame, and whether a stretch plays from its render.',
1731
+ intro: 'For finding out what went wrong, and exactly what an agent did and why: nothing here changes what the agents do.',
1732
+ group: 'Each turn',
1733
+ changes: 'Show what each turn changed',
1734
+ changesHint: 'Under each reply, the files the turn added, deleted or changed, with the lines added and removed. Click a file to see its changed lines.',
1735
+ logs: 'Show each turn’s log',
1736
+ logsHint: 'In the chat, every turn gets a Log button: the prompt and the session it ran in, each tool call with its input and output, every question and answer, and how it ended, as the agent sent them.',
1737
+ where: 'Every turn is logged whether or not this is on, in the project’s .film/logs folder, on this computer only.',
1738
+ releaseGroup: 'Releases',
1739
+ previewWhatsNew: 'What’s new',
1740
+ previewWhatsNewHint: 'Shows the notes of {version} as people see them after updating.',
1741
+ preview: 'Preview',
1742
+ },
1743
+ shortcuts: {
1744
+ hint: "Keys follow your operating system, and pause while you type. Pick a scheme to use another editor's keys, or change any key in a custom scheme.",
1745
+ addMedia: "Add the media picked to the timeline",
1746
+ deselect: "Deselect",
1747
+ nudge: "Move selected element 1 px",
1748
+ nudgeFast: "Move selected element 10 px",
1749
+ editText: "Edit selected text",
1750
+ commitText: "Apply text edit",
1751
+ cancelText: "Cancel text edit / deselect",
1752
+ splitModeAll: 'With the split tool, click with it held: every track is cut there',
1753
+ editModeSwap: 'Hold while dropping a clip: it goes in between and what follows moves along',
1754
+ copyDrag: 'Drag a clip with it held: a copy goes where you let go, the clip stays',
1755
+ customName: "Custom {n}",
1756
+ scheme: "Shortcut scheme",
1757
+ restore: "Restore defaults",
1758
+ save: "Save",
1759
+ cancel: "Cancel",
1760
+ recording: "Press keys…",
1761
+ change: "Click to change",
1762
+ editCopy: "Click to change it in a copy",
1763
+ none: "None",
1764
+ clear: "Remove keys",
1765
+ replace: "Replace",
1766
+ copied: "{from} is built in, so it was copied to {to}. Your changes go there.",
1767
+ started: "{to} starts as a copy of {from}.",
1768
+ full: "All three custom schemes are in use. Choose one to change its keys.",
1769
+ conflict: "{keys} is already used for \"{action}\". Replace it?",
1770
+ fixed: "These keys can't be changed.",
1771
+ saveFailed: "Couldn't save the shortcuts: {error}",
1772
+ shuttleHold: "Step one frame back / forward (hold stop)",
1773
+ tabs: { timeline: "Timeline", player: "Player", basic: "Basic", other: "Other" },
1774
+ /* the editor's actions (lib/keymap ACTIONS) */
1775
+ actions: {
1776
+ "split": "Split at playhead",
1777
+ "split-all": "Split all tracks",
1778
+ "select-mode": "Select tool",
1779
+ "split-mode": "Split tool",
1780
+ "ripple-start": "Ripple trim start",
1781
+ "ripple-end": "Ripple trim end",
1782
+ "select-left": "Select all to the left",
1783
+ "select-right": "Select all to the right",
1784
+ "nudge-back": "Move clips 1 frame left",
1785
+ "nudge-forward": "Move clips 1 frame right",
1786
+ "toggle-magnet": "Main track magnet on / off",
1787
+ "toggle-snap": "Snapping on / off",
1788
+ "toggle-linkage": "Linkage on / off",
1789
+ "toggle-preview-axis": "Preview axis on / off",
1790
+ "zoom-in": "Zoom in",
1791
+ "zoom-out": "Zoom out",
1792
+ "zoom-reset": "Reset zoom",
1793
+ "zoom-fit": "Zoom to fit",
1794
+ "add-marker": "Add marker",
1795
+ "next-marker": "Next marker",
1796
+ "prev-marker": "Previous marker",
1797
+ "speed": "Clip speed",
1798
+ "detach-audio": "Detach audio",
1799
+ "play-pause": "Play / pause",
1800
+ "play-range": "Play in to out",
1801
+ "loop": "Loop playback",
1802
+ "shuttle-back": "Play backward",
1803
+ "shuttle-stop": "Stop",
1804
+ "shuttle-forward": "Play forward",
1805
+ "frame-back": "Back 1 frame",
1806
+ "frame-forward": "Forward 1 frame",
1807
+ "jump-back": "Back 10 frames",
1808
+ "jump-forward": "Forward 10 frames",
1809
+ "prev-cut": "Previous cut",
1810
+ "next-cut": "Next cut",
1811
+ "start": "Go to start",
1812
+ "end": "Go to end",
1813
+ "mark-in": "Mark in",
1814
+ "mark-out": "Mark out",
1815
+ "clear-range": "Clear in and out",
1816
+ "range-clip": "Mark selected clips",
1817
+ "go-in": "Go to in",
1818
+ "go-out": "Go to out",
1819
+ "insert-source": "Insert from source viewer",
1820
+ "overwrite-source": "Overwrite from source viewer",
1821
+ "undo": "Undo",
1822
+ "redo": "Redo",
1823
+ "cut": "Cut",
1824
+ "copy": "Copy",
1825
+ "paste": "Paste at playhead",
1826
+ "duplicate": "Duplicate",
1827
+ "remove": "Delete",
1828
+ "ripple-delete": "Ripple delete",
1829
+ "select-all": "Select all",
1830
+ "copy-attrs": "Copy attributes",
1831
+ "paste-attrs": "Paste attributes",
1832
+ "refer": "Add to chat",
1833
+ },
1834
+ },
1835
+ providers: {
1836
+ desc: 'Where voices, music, sound effects, transcripts, images and video come from. OpenFilm makes and edits films without any of them: connect one when your agent needs media. Which one makes each kind of media is chosen under Services.',
1837
+ groupRecommended: 'Recommended',
1838
+ groupMore: 'More providers',
1839
+ connect: 'Connect',
1840
+ disconnect: 'Disconnect',
1841
+ connected: 'Connected',
1842
+ and: 'and',
1843
+ keyNote: 'Your key pays the service directly. It stays on this computer and goes only to its own service.',
1844
+ getKey: 'Get your {name} key',
1845
+ key: 'Key',
1846
+ region: 'Region (eastus, …)',
1847
+ azureNote: "Voice-over. Each Azure service has its own key, and the region of the resource it is in: both are on the resource's Keys and Endpoint page.",
1848
+ pasteKey: 'Paste your {name} API key',
1849
+ save: 'Save',
1850
+ cancel: 'Cancel',
1851
+ keyEnding: 'Key ending in {last4}',
1852
+ useEnv: 'Use the key in ${env}',
1853
+ own: {
1854
+ title: "Custom services",
1855
+ note: "Services not listed above, as many as you like: one you run on this computer or one online (your own voice, a transcription server, an API not listed), with any interface. OpenFilm doesn't call them itself: your agent reads your description and calls them, and their keys stay on this computer, out of the agent's sight. You can also tell your agent about a service in the chat instead; set it up here when it takes a key, so the key stays out of the conversation.",
1856
+ add: "Add a custom service",
1857
+ edit: "Edit",
1858
+ remove: "Remove",
1859
+ name: "Name",
1860
+ namePlaceholder: "e.g. My voice",
1861
+ url: "Address",
1862
+ key: "Key",
1863
+ keyOptional: "Optional",
1864
+ keyKeep: "Leave empty to keep the key ending in {last4}",
1865
+ removeKey: "Remove the key",
1866
+ what: "Description",
1867
+ whatPlaceholder: "e.g. Speaks a script in my voice: POST /tts with {\"text\": \"…\"} answers a WAV. Or just its API docs: https://…",
1868
+ },
1869
+ verbs: {
1870
+ tts: 'Voice-over',
1871
+ voice: 'Voices',
1872
+ music: 'Music',
1873
+ sfx: 'Sound effects',
1874
+ asr: 'Transcription',
1875
+ image: 'Images',
1876
+ 'image-search': 'Image search',
1877
+ video: 'Video',
1878
+ translate: 'Subtitle translation',
1879
+ 'web-search': 'Web search',
1880
+ },
1881
+ },
1882
+ models: {
1883
+ desc: 'Which service makes each kind of media: a model of a connected provider. Connecting a provider fills the kinds that have none; change any of them here.',
1884
+ nothing: 'Nothing is connected yet. Connect a provider to choose its models.',
1885
+ goConnect: 'Connect a provider',
1886
+ none: 'None',
1887
+ connectNamed: 'Connect {names}',
1888
+ about: {
1889
+ tts: 'Speaks a script, and finds voices to speak it',
1890
+ music: 'Makes a soundtrack from a description',
1891
+ sfx: 'Makes a sound from a description',
1892
+ asr: 'Writes down what is said, word by word, for subtitles',
1893
+ image: 'Makes a picture from a description',
1894
+ 'image-search': 'Finds pictures on the web',
1895
+ video: 'Makes a video clip from a description or a picture',
1896
+ translate: 'Translates subtitles into another language',
1897
+ 'web-search': 'Searches the web and reads its pages',
1898
+ },
1899
+ },
1900
+ },
1901
+ };