@crievo/omni 0.0.0-stage → 0.1.1
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.
- package/.env.example +41 -0
- package/README.md +2 -2
- package/bin/omni.mjs +18 -0
- package/docs/onboarding/clone-voice.png +0 -0
- package/docs/onboarding/getting-started.png +0 -0
- package/docs/onboarding/new-video.png +0 -0
- package/docs/onboarding/providers.png +0 -0
- package/docs/onboarding/publish.png +0 -0
- package/docs/onboarding/references.png +0 -0
- package/docs/onboarding.md +212 -0
- package/omnivideo.config.example.json +437 -0
- package/package.json +40 -4
- package/reference/captions.md +156 -0
- package/reference/carousel-contract.md +91 -0
- package/reference/cloud.md +96 -0
- package/reference/learnings.md +792 -0
- package/reference/omnichat.md +305 -0
- package/reference/premiere-mcp.md +91 -0
- package/reference/publish.md +305 -0
- package/reference/scenes-contract.md +109 -0
- package/reference/studio.md +666 -0
- package/reference/voicestudio.md +81 -0
- package/reference/writing-for-voice.md +67 -0
- package/requirements.txt +3 -0
- package/studio/api/app.ts +87 -0
- package/studio/api/lib/errors.ts +33 -0
- package/studio/api/lib/files.ts +41 -0
- package/studio/api/lib/hono.ts +9 -0
- package/studio/api/lib/result.ts +14 -0
- package/studio/api/lib/validate.ts +31 -0
- package/studio/api/lib/video.ts +10 -0
- package/studio/api/middleware/json-charset.ts +11 -0
- package/studio/api/middleware/local-only.ts +32 -0
- package/studio/api/middleware/no-timeout.ts +10 -0
- package/studio/api/routes/admin.ts +18 -0
- package/studio/api/routes/agent-cascade.ts +100 -0
- package/studio/api/routes/agent-history.ts +23 -0
- package/studio/api/routes/agent.ts +162 -0
- package/studio/api/routes/analytics.ts +31 -0
- package/studio/api/routes/approval.ts +60 -0
- package/studio/api/routes/archive.ts +12 -0
- package/studio/api/routes/captions.ts +28 -0
- package/studio/api/routes/carousel.ts +38 -0
- package/studio/api/routes/clone.ts +27 -0
- package/studio/api/routes/create.ts +19 -0
- package/studio/api/routes/events.ts +11 -0
- package/studio/api/routes/export.ts +14 -0
- package/studio/api/routes/media.ts +30 -0
- package/studio/api/routes/omnichat.ts +113 -0
- package/studio/api/routes/onboarding.ts +14 -0
- package/studio/api/routes/publish.ts +40 -0
- package/studio/api/routes/queue.ts +14 -0
- package/studio/api/routes/references.ts +40 -0
- package/studio/api/routes/runner.ts +17 -0
- package/studio/api/routes/schedule.ts +47 -0
- package/studio/api/routes/services.ts +11 -0
- package/studio/api/routes/sessions.ts +27 -0
- package/studio/api/routes/settings.ts +102 -0
- package/studio/api/routes/sound.ts +45 -0
- package/studio/api/routes/thumbnail.ts +18 -0
- package/studio/api/routes/usage.ts +13 -0
- package/studio/api/routes/videos.ts +41 -0
- package/studio/api/routes/voices.ts +71 -0
- package/studio/api/services/admin.ts +113 -0
- package/studio/api/services/agent-cascade.ts +975 -0
- package/studio/api/services/agent-claude.ts +47 -0
- package/studio/api/services/agent-history.ts +103 -0
- package/studio/api/services/agent-persona.ts +77 -0
- package/studio/api/services/agent-tools.ts +2237 -0
- package/studio/api/services/agent-ui-tools.ts +259 -0
- package/studio/api/services/agent-wait.ts +32 -0
- package/studio/api/services/agent.ts +553 -0
- package/studio/api/services/analytics.ts +92 -0
- package/studio/api/services/approval.ts +134 -0
- package/studio/api/services/archive.ts +38 -0
- package/studio/api/services/captions.ts +268 -0
- package/studio/api/services/carousel.ts +206 -0
- package/studio/api/services/classify.ts +196 -0
- package/studio/api/services/clone-phrases.ts +75 -0
- package/studio/api/services/clone.ts +722 -0
- package/studio/api/services/create.ts +421 -0
- package/studio/api/services/events.ts +215 -0
- package/studio/api/services/media.ts +32 -0
- package/studio/api/services/omnichat.ts +624 -0
- package/studio/api/services/onboarding.ts +77 -0
- package/studio/api/services/publish.ts +287 -0
- package/studio/api/services/queue.ts +150 -0
- package/studio/api/services/references.ts +269 -0
- package/studio/api/services/root.ts +60 -0
- package/studio/api/services/services.ts +114 -0
- package/studio/api/services/sessions.ts +1007 -0
- package/studio/api/services/settings.ts +983 -0
- package/studio/api/services/sound.ts +311 -0
- package/studio/api/services/thumbnail.ts +133 -0
- package/studio/api/services/usage.ts +27 -0
- package/studio/api/services/videos.ts +418 -0
- package/studio/api/services/voice-pause.ts +98 -0
- package/studio/api/services/voices.ts +324 -0
- package/studio/runner/runner.ts +244 -0
- package/studio/shared/omni-actions.ts +68 -0
- package/studio/shared/omni-admin.ts +52 -0
- package/studio/shared/omni-farewell.ts +48 -0
- package/studio/shared/omni-hotword.ts +20 -0
- package/studio/shared/omni-screens.ts +228 -0
- package/studio/shared/schemas/admin.ts +15 -0
- package/studio/shared/schemas/agent-cascade.ts +58 -0
- package/studio/shared/schemas/agent-history.ts +73 -0
- package/studio/shared/schemas/agent.ts +50 -0
- package/studio/shared/schemas/analytics.ts +6 -0
- package/studio/shared/schemas/approval.ts +22 -0
- package/studio/shared/schemas/captions.ts +19 -0
- package/studio/shared/schemas/carousel.ts +26 -0
- package/studio/shared/schemas/clone.ts +40 -0
- package/studio/shared/schemas/common.ts +16 -0
- package/studio/shared/schemas/omnichat.ts +54 -0
- package/studio/shared/schemas/onboarding.ts +5 -0
- package/studio/shared/schemas/publish.ts +45 -0
- package/studio/shared/schemas/references.ts +20 -0
- package/studio/shared/schemas/settings.ts +82 -0
- package/studio/shared/schemas/sound.ts +22 -0
- package/studio/shared/schemas/videos.ts +38 -0
- package/studio/shared/schemas/voices.ts +23 -0
- package/studio/shared/types/api.ts +1290 -0
- package/studio/studio.ts +148 -0
- package/studio/tsconfig.json +15 -0
- package/studio/web/assets/logos/cartesia.svg +4 -0
- package/studio/web/assets/logos/elevenlabs.svg +12 -0
- package/studio/web/assets/logos/fish.svg +24 -0
- package/studio/web/assets/logos/omni-black.png +0 -0
- package/studio/web/assets/logos/omni-white.png +0 -0
- package/studio/web/assets/logos/voicestudio.svg +21 -0
- package/studio/web/components/AgentMark.tsx +7 -0
- package/studio/web/components/AgentWalking.tsx +11 -0
- package/studio/web/components/ApiKeyField.tsx +104 -0
- package/studio/web/components/AppShell.tsx +64 -0
- package/studio/web/components/ApprovalNotice.tsx +65 -0
- package/studio/web/components/AvatarGroupIcon.tsx +22 -0
- package/studio/web/components/AvatarNameField.tsx +86 -0
- package/studio/web/components/AvatarPicker.tsx +84 -0
- package/studio/web/components/BrandLogo.tsx +16 -0
- package/studio/web/components/CartesiaPlanSetting.tsx +90 -0
- package/studio/web/components/ClaudeWalking.tsx +32 -0
- package/studio/web/components/CloneVoiceDialog/GuidedScript.tsx +39 -0
- package/studio/web/components/CloneVoiceDialog/LanguageBar.tsx +37 -0
- package/studio/web/components/CloneVoiceDialog/LevelMeter.tsx +31 -0
- package/studio/web/components/CloneVoiceDialog/ProviderChoice.tsx +81 -0
- package/studio/web/components/CloneVoiceDialog/QualityPanel.tsx +62 -0
- package/studio/web/components/CloneVoiceDialog/RecordStep.tsx +50 -0
- package/studio/web/components/CloneVoiceDialog/RecorderBar.tsx +79 -0
- package/studio/web/components/CloneVoiceDialog/RedoSummary.tsx +54 -0
- package/studio/web/components/CloneVoiceDialog/SaveStep.tsx +91 -0
- package/studio/web/components/CloneVoiceDialog/SourceBar.tsx +30 -0
- package/studio/web/components/CloneVoiceDialog/index.tsx +141 -0
- package/studio/web/components/CloneVoiceDialog/types.ts +28 -0
- package/studio/web/components/CloneVoiceDialog/useCloneVoice.ts +528 -0
- package/studio/web/components/ConnectionSignals.tsx +51 -0
- package/studio/web/components/EditVoiceDialog/EditVoiceFooter.tsx +72 -0
- package/studio/web/components/EditVoiceDialog/ProviderCards.tsx +81 -0
- package/studio/web/components/EditVoiceDialog/index.tsx +256 -0
- package/studio/web/components/ErrorBanner.tsx +115 -0
- package/studio/web/components/FinishedTask.tsx +41 -0
- package/studio/web/components/FishModelSetting.tsx +69 -0
- package/studio/web/components/FishPriceSetting.tsx +44 -0
- package/studio/web/components/HumanBanner.tsx +64 -0
- package/studio/web/components/Lightbox.tsx +41 -0
- package/studio/web/components/LogStream.tsx +42 -0
- package/studio/web/components/Markdown.tsx +21 -0
- package/studio/web/components/MissingDmsPanel/BatchSend.tsx +137 -0
- package/studio/web/components/MissingDmsPanel/CommentCard.tsx +168 -0
- package/studio/web/components/MissingDmsPanel/CommentFeed.tsx +45 -0
- package/studio/web/components/MissingDmsPanel/DmBubble.tsx +38 -0
- package/studio/web/components/MissingDmsPanel/ReplyComposer.tsx +63 -0
- package/studio/web/components/MissingDmsPanel/index.tsx +98 -0
- package/studio/web/components/NotFound.tsx +48 -0
- package/studio/web/components/Omni/OmniAvatarPicker.tsx +92 -0
- package/studio/web/components/Omni/OmniCards.tsx +202 -0
- package/studio/web/components/Omni/OmniGlow.tsx +183 -0
- package/studio/web/components/Omni/OmniHistory.tsx +119 -0
- package/studio/web/components/Omni/OmniHotword.tsx +40 -0
- package/studio/web/components/Omni/OmniMicSelect.tsx +92 -0
- package/studio/web/components/Omni/OmniVoiceSample.tsx +81 -0
- package/studio/web/components/Omni/OmniWidget.tsx +743 -0
- package/studio/web/components/Omni/PendingActions.tsx +200 -0
- package/studio/web/components/Omni/Transcript.tsx +127 -0
- package/studio/web/components/OmnichatAccountStatus.tsx +87 -0
- package/studio/web/components/OmnichatRulePanel/RuleConfig.tsx +150 -0
- package/studio/web/components/OmnichatRulePanel/RuleDryRun.tsx +15 -0
- package/studio/web/components/OmnichatRulePanel/RuleEnableConfirm.tsx +42 -0
- package/studio/web/components/OmnichatRulePanel/RuleSkeleton.tsx +18 -0
- package/studio/web/components/OmnichatRulePanel/RuleStatus.tsx +55 -0
- package/studio/web/components/OmnichatRulePanel/index.tsx +115 -0
- package/studio/web/components/OmnichatRulePanel/rule-steps.ts +67 -0
- package/studio/web/components/OmnichatRulePanel/steps/MessageStep.tsx +91 -0
- package/studio/web/components/OmnichatRulePanel/steps/RepliesStep.tsx +201 -0
- package/studio/web/components/OmnichatRulePanel/steps/TriggerStep.tsx +76 -0
- package/studio/web/components/OmnichatRulePanel/steps/types.ts +11 -0
- package/studio/web/components/Palette.tsx +17 -0
- package/studio/web/components/PlatformCard.tsx +109 -0
- package/studio/web/components/PlatformIcon.tsx +19 -0
- package/studio/web/components/ProviderCard.tsx +80 -0
- package/studio/web/components/ProviderDetail.tsx +367 -0
- package/studio/web/components/ProviderLogo.tsx +20 -0
- package/studio/web/components/QueuePanel.tsx +77 -0
- package/studio/web/components/ReferenceActions.tsx +89 -0
- package/studio/web/components/ReferencePicker.tsx +136 -0
- package/studio/web/components/ResultMessage.tsx +7 -0
- package/studio/web/components/RuleForm.tsx +138 -0
- package/studio/web/components/RuleLog.tsx +151 -0
- package/studio/web/components/RunningTask.tsx +23 -0
- package/studio/web/components/SampleList.tsx +55 -0
- package/studio/web/components/SessionPanel.tsx +352 -0
- package/studio/web/components/SettingRow.tsx +14 -0
- package/studio/web/components/SettingsCategorySkeleton.tsx +25 -0
- package/studio/web/components/SidePanel.tsx +77 -0
- package/studio/web/components/Sidebar.tsx +289 -0
- package/studio/web/components/StageStepper.tsx +87 -0
- package/studio/web/components/StudioOffline.tsx +80 -0
- package/studio/web/components/TaskName.tsx +17 -0
- package/studio/web/components/TopBanners.tsx +30 -0
- package/studio/web/components/VideoOmnichatPanel.tsx +287 -0
- package/studio/web/components/VoiceAvatar.tsx +33 -0
- package/studio/web/components/VoiceCarousel.tsx +196 -0
- package/studio/web/components/VoiceCategory.tsx +9 -0
- package/studio/web/components/VoiceModal.tsx +39 -0
- package/studio/web/components/VoiceProfileCard.tsx +75 -0
- package/studio/web/components/VoiceProfilePicker.tsx +107 -0
- package/studio/web/components/VoiceProfilesSettings.tsx +150 -0
- package/studio/web/components/VoiceProviderCard.tsx +118 -0
- package/studio/web/components/VoiceProvidersCard.tsx +26 -0
- package/studio/web/components/WaitList.tsx +21 -0
- package/studio/web/components/icons.tsx +247 -0
- package/studio/web/components/ui/accordion.tsx +47 -0
- package/studio/web/components/ui/badge.tsx +18 -0
- package/studio/web/components/ui/calendar.tsx +43 -0
- package/studio/web/components/ui/chart.tsx +229 -0
- package/studio/web/components/ui/checkbox.tsx +26 -0
- package/studio/web/components/ui/cx.ts +2 -0
- package/studio/web/components/ui/date-time-picker.tsx +84 -0
- package/studio/web/components/ui/panel.tsx +23 -0
- package/studio/web/components/ui/picker.tsx +58 -0
- package/studio/web/components/ui/popover.tsx +24 -0
- package/studio/web/components/ui/select.tsx +89 -0
- package/studio/web/components/ui/skeleton.tsx +10 -0
- package/studio/web/components/ui/slider.tsx +68 -0
- package/studio/web/components/ui/switch.tsx +13 -0
- package/studio/web/components/ui/tooltip.tsx +59 -0
- package/studio/web/hooks/useAccounts.ts +27 -0
- package/studio/web/hooks/useAdmin.ts +12 -0
- package/studio/web/hooks/useAnalytics.ts +21 -0
- package/studio/web/hooks/useAvatarAudioReactive.ts +87 -0
- package/studio/web/hooks/useBrowserConnect.ts +48 -0
- package/studio/web/hooks/useClonePlan.ts +14 -0
- package/studio/web/hooks/useConnected.ts +7 -0
- package/studio/web/hooks/useLiveQuery.ts +29 -0
- package/studio/web/hooks/useMenuCollapsed.ts +32 -0
- package/studio/web/hooks/useMicDevices.ts +53 -0
- package/studio/web/hooks/useMissingDms.ts +211 -0
- package/studio/web/hooks/useMissingSetupSteps.ts +26 -0
- package/studio/web/hooks/useNow.ts +11 -0
- package/studio/web/hooks/useOmniAgent.ts +278 -0
- package/studio/web/hooks/useOmniClaude.ts +124 -0
- package/studio/web/hooks/useOmniDock.ts +142 -0
- package/studio/web/hooks/useOmniGreeting.ts +60 -0
- package/studio/web/hooks/useOmniHotword.ts +128 -0
- package/studio/web/hooks/useOmnichat.ts +26 -0
- package/studio/web/hooks/useOnboarding.ts +27 -0
- package/studio/web/hooks/usePost.ts +23 -0
- package/studio/web/hooks/useQueue.ts +10 -0
- package/studio/web/hooks/useReferences.ts +20 -0
- package/studio/web/hooks/useRuleEditor.ts +101 -0
- package/studio/web/hooks/useRunner.ts +24 -0
- package/studio/web/hooks/useSaveAction.ts +23 -0
- package/studio/web/hooks/useSchedule.ts +11 -0
- package/studio/web/hooks/useServices.ts +10 -0
- package/studio/web/hooks/useSessions.ts +15 -0
- package/studio/web/hooks/useSettings.ts +11 -0
- package/studio/web/hooks/useSettingsSection.ts +30 -0
- package/studio/web/hooks/useSidePanel.ts +23 -0
- package/studio/web/hooks/useSound.ts +30 -0
- package/studio/web/hooks/useUsage.ts +11 -0
- package/studio/web/hooks/useVideoVoice.ts +36 -0
- package/studio/web/hooks/useVideos.ts +21 -0
- package/studio/web/hooks/useVoiceProfilePreview.ts +52 -0
- package/studio/web/hooks/useVoiceProfiles.ts +7 -0
- package/studio/web/hooks/useVoiceRunning.ts +10 -0
- package/studio/web/hooks/useVoiceStudioClosed.ts +8 -0
- package/studio/web/index.html +19 -0
- package/studio/web/lib/agent.ts +7 -0
- package/studio/web/lib/alerts.ts +210 -0
- package/studio/web/lib/analytics-metrics.ts +351 -0
- package/studio/web/lib/api.ts +70 -0
- package/studio/web/lib/audio.ts +39 -0
- package/studio/web/lib/avatars.ts +41 -0
- package/studio/web/lib/calendar.ts +218 -0
- package/studio/web/lib/caption-position.ts +249 -0
- package/studio/web/lib/carousel.ts +24 -0
- package/studio/web/lib/chime.ts +42 -0
- package/studio/web/lib/clone-voice.ts +55 -0
- package/studio/web/lib/export.ts +11 -0
- package/studio/web/lib/files.ts +8 -0
- package/studio/web/lib/format.ts +93 -0
- package/studio/web/lib/media.ts +29 -0
- package/studio/web/lib/mic-device.ts +72 -0
- package/studio/web/lib/missing-dms.ts +70 -0
- package/studio/web/lib/omni-cards.ts +42 -0
- package/studio/web/lib/omni-cascade.ts +1067 -0
- package/studio/web/lib/omni-greeting-audio.ts +24 -0
- package/studio/web/lib/omni-hotword.ts +231 -0
- package/studio/web/lib/omni-panel.ts +67 -0
- package/studio/web/lib/omni-realtime.ts +811 -0
- package/studio/web/lib/omni-ui.ts +402 -0
- package/studio/web/lib/omni-wait.ts +174 -0
- package/studio/web/lib/omnichat-api.ts +44 -0
- package/studio/web/lib/orb.ts +270 -0
- package/studio/web/lib/pcm-recorder.ts +115 -0
- package/studio/web/lib/platforms.ts +17 -0
- package/studio/web/lib/providers.ts +27 -0
- package/studio/web/lib/publish-draft.ts +52 -0
- package/studio/web/lib/publish-settings.ts +81 -0
- package/studio/web/lib/query-client.ts +122 -0
- package/studio/web/lib/references.ts +13 -0
- package/studio/web/lib/services.ts +40 -0
- package/studio/web/lib/sessions.ts +103 -0
- package/studio/web/lib/settings-categories.ts +58 -0
- package/studio/web/lib/sound-audio.ts +33 -0
- package/studio/web/lib/sound-timeline.ts +291 -0
- package/studio/web/lib/sse.ts +86 -0
- package/studio/web/lib/stage-history.ts +141 -0
- package/studio/web/lib/stages.ts +344 -0
- package/studio/web/lib/studio-offline.ts +60 -0
- package/studio/web/lib/upload.ts +24 -0
- package/studio/web/lib/video-tabs.ts +118 -0
- package/studio/web/lib/voice-profile-draft.ts +34 -0
- package/studio/web/lib/voice-profiles.ts +3 -0
- package/studio/web/main.tsx +14 -0
- package/studio/web/pages/AdminPage/index.tsx +123 -0
- package/studio/web/pages/AgentPage/components/Measurements.tsx +102 -0
- package/studio/web/pages/AgentPage/index.tsx +28 -0
- package/studio/web/pages/AnalyticsPage/components/About.tsx +52 -0
- package/studio/web/pages/AnalyticsPage/components/ChannelCards.tsx +106 -0
- package/studio/web/pages/AnalyticsPage/components/ChannelView.tsx +137 -0
- package/studio/web/pages/AnalyticsPage/components/CollectionStatus.tsx +46 -0
- package/studio/web/pages/AnalyticsPage/components/Comparison.tsx +68 -0
- package/studio/web/pages/AnalyticsPage/components/Diagnosis.tsx +50 -0
- package/studio/web/pages/AnalyticsPage/components/Highlights.tsx +49 -0
- package/studio/web/pages/AnalyticsPage/components/Hint.tsx +11 -0
- package/studio/web/pages/AnalyticsPage/components/HookVsBody.tsx +100 -0
- package/studio/web/pages/AnalyticsPage/components/HourlyWave.tsx +133 -0
- package/studio/web/pages/AnalyticsPage/components/Insights.tsx +70 -0
- package/studio/web/pages/AnalyticsPage/components/MetricCard.tsx +46 -0
- package/studio/web/pages/AnalyticsPage/components/PlanSection.tsx +40 -0
- package/studio/web/pages/AnalyticsPage/components/ProgressionChart.tsx +155 -0
- package/studio/web/pages/AnalyticsPage/components/ReelBarsChart.tsx +154 -0
- package/studio/web/pages/AnalyticsPage/components/ReelThumb.tsx +19 -0
- package/studio/web/pages/AnalyticsPage/components/ReelView.tsx +290 -0
- package/studio/web/pages/AnalyticsPage/components/ReelsTable.tsx +269 -0
- package/studio/web/pages/AnalyticsPage/components/RequestWithFocus.tsx +38 -0
- package/studio/web/pages/AnalyticsPage/components/SegmentedControl.tsx +35 -0
- package/studio/web/pages/AnalyticsPage/components/VsMedian.tsx +31 -0
- package/studio/web/pages/AnalyticsPage/index.tsx +17 -0
- package/studio/web/pages/GettingStartedPage/index.tsx +174 -0
- package/studio/web/pages/NewVideoPage/components/DeliverablesPicker.tsx +62 -0
- package/studio/web/pages/NewVideoPage/components/FormatPicker.tsx +33 -0
- package/studio/web/pages/NewVideoPage/index.tsx +133 -0
- package/studio/web/pages/NotFoundPage/index.tsx +9 -0
- package/studio/web/pages/OmnichatPage/components/NewFromLink.tsx +59 -0
- package/studio/web/pages/OmnichatPage/components/RuleListItem.tsx +64 -0
- package/studio/web/pages/OmnichatPage/components/RulePreview.tsx +14 -0
- package/studio/web/pages/OmnichatPage/components/RuleView.tsx +88 -0
- package/studio/web/pages/OmnichatPage/index.tsx +153 -0
- package/studio/web/pages/QueuePage/index.tsx +22 -0
- package/studio/web/pages/ReferencePage/components/ReferenceTexts.tsx +131 -0
- package/studio/web/pages/ReferencePage/index.tsx +216 -0
- package/studio/web/pages/ReferencesPage/components/NewReferenceForm.tsx +150 -0
- package/studio/web/pages/ReferencesPage/components/ReferenceCard.tsx +42 -0
- package/studio/web/pages/ReferencesPage/components/ReferenceGridSkeleton.tsx +31 -0
- package/studio/web/pages/ReferencesPage/index.tsx +67 -0
- package/studio/web/pages/SchedulePage/components/CalendarSkeleton.tsx +18 -0
- package/studio/web/pages/SchedulePage/components/DayView.tsx +177 -0
- package/studio/web/pages/SchedulePage/components/HourPicker.tsx +103 -0
- package/studio/web/pages/SchedulePage/components/MonthDayCell.tsx +111 -0
- package/studio/web/pages/SchedulePage/components/MonthView.tsx +47 -0
- package/studio/web/pages/SchedulePage/components/PlatformIcons.tsx +12 -0
- package/studio/web/pages/SchedulePage/components/PostThumb.tsx +15 -0
- package/studio/web/pages/SchedulePage/components/WeekColumn.tsx +75 -0
- package/studio/web/pages/SchedulePage/components/WeekView.tsx +35 -0
- package/studio/web/pages/SchedulePage/index.tsx +285 -0
- package/studio/web/pages/SettingsPage/components/AgentAccounts.tsx +263 -0
- package/studio/web/pages/SettingsPage/components/AgentCategory.tsx +20 -0
- package/studio/web/pages/SettingsPage/components/ModelPicker.tsx +49 -0
- package/studio/web/pages/SettingsPage/components/ModelsSettings.tsx +138 -0
- package/studio/web/pages/SettingsPage/components/PlatformsCategory.tsx +23 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/AccountStatus.tsx +29 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/AutoPublishPanel.tsx +90 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/BrowserConnect.tsx +62 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/CheckField.tsx +19 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/InstagramPanel.tsx +113 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/OmnichatSettingsPanel.tsx +146 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/SaveBar.tsx +33 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/SchedulePanel.tsx +132 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/SettingsCard.tsx +47 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/SettingsCardGroup.tsx +19 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/TextPanel.tsx +55 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/TiktokPanel.tsx +123 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/YoutubePanel.tsx +100 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/badges.tsx +15 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/index.tsx +40 -0
- package/studio/web/pages/SettingsPage/components/PublishingCategory/types.ts +10 -0
- package/studio/web/pages/SettingsPage/components/UsageCategory.tsx +389 -0
- package/studio/web/pages/SettingsPage/components/VoiceProvidersCategory.tsx +97 -0
- package/studio/web/pages/SettingsPage/index.tsx +85 -0
- package/studio/web/pages/VideoPage/components/AudioPlayer.tsx +113 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/AxisField.tsx +50 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/CaptionList.tsx +56 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/CaptionListItem.tsx +92 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/CaptionMargins.tsx +57 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/CaptionStyleFields.tsx +70 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/CaptionTextForm.tsx +87 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/ColorField.tsx +37 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/MarginField.tsx +59 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/NumberField.tsx +57 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/PositionControls.tsx +140 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/captionEditor.ts +215 -0
- package/studio/web/pages/VideoPage/components/CaptionPositionEditor/useCaptionPosition.ts +154 -0
- package/studio/web/pages/VideoPage/components/CarouselChangeRequest.tsx +72 -0
- package/studio/web/pages/VideoPage/components/CarouselCompositionStage.tsx +80 -0
- package/studio/web/pages/VideoPage/components/CarouselCreate.tsx +63 -0
- package/studio/web/pages/VideoPage/components/CarouselMissing.tsx +19 -0
- package/studio/web/pages/VideoPage/components/CarouselPublishStage.tsx +173 -0
- package/studio/web/pages/VideoPage/components/CarouselScriptStage.tsx +82 -0
- package/studio/web/pages/VideoPage/components/CarouselSlideCard.tsx +49 -0
- package/studio/web/pages/VideoPage/components/CarouselViewer.tsx +55 -0
- package/studio/web/pages/VideoPage/components/ChangedVoices.tsx +53 -0
- package/studio/web/pages/VideoPage/components/CompositionStage.tsx +78 -0
- package/studio/web/pages/VideoPage/components/CoverPicker.tsx +32 -0
- package/studio/web/pages/VideoPage/components/EditorStage.tsx +53 -0
- package/studio/web/pages/VideoPage/components/LineTakes.tsx +160 -0
- package/studio/web/pages/VideoPage/components/LineTextEditor.tsx +124 -0
- package/studio/web/pages/VideoPage/components/LineVoicePicker.tsx +37 -0
- package/studio/web/pages/VideoPage/components/MediaImage.tsx +25 -0
- package/studio/web/pages/VideoPage/components/MotionScriptStage.tsx +39 -0
- package/studio/web/pages/VideoPage/components/NarrationStage.tsx +70 -0
- package/studio/web/pages/VideoPage/components/PublishForm.tsx +387 -0
- package/studio/web/pages/VideoPage/components/PublishStage.tsx +76 -0
- package/studio/web/pages/VideoPage/components/PublishText.tsx +149 -0
- package/studio/web/pages/VideoPage/components/ScenesApprovalPanel.tsx +278 -0
- package/studio/web/pages/VideoPage/components/ScheduledInfo.tsx +72 -0
- package/studio/web/pages/VideoPage/components/ScriptApprovalPanel.tsx +189 -0
- package/studio/web/pages/VideoPage/components/ScriptStage.tsx +17 -0
- package/studio/web/pages/VideoPage/components/SequencePlayer.tsx +146 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/AddSound.tsx +117 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/AreaSelection.tsx +74 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/BedPanel.tsx +94 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/BedRow.tsx +45 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/CaptionOverlay.tsx +44 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/CaptionSaveBar.tsx +32 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/CaptionsPanel.tsx +22 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/ClipBlock.tsx +111 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/ClipPanel.tsx +76 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/CutsPanel.tsx +44 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/EditorTabBar.tsx +73 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/EffectChoice.tsx +46 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/EffectItem.tsx +89 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/EffectPanel.tsx +232 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/EffectsRow.tsx +21 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/Lane.tsx +39 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/MarkerRow.tsx +40 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/MuteButton.tsx +36 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/NumberInput.tsx +37 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/PlanWarnings.tsx +19 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/PlayerResizeHandle.tsx +50 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/PreviewControls.tsx +51 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/SceneRow.tsx +54 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/SettingsPanel.tsx +65 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/SoundLibrary.tsx +99 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/SoundPreview.tsx +82 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/SpeedPanel.tsx +128 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/TimelineDock.tsx +56 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/TimelineFooter.tsx +26 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/TimelineSkeleton.tsx +21 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/TimelineToolbar.tsx +160 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/TimelineTracks.tsx +121 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/TrackSidebar.tsx +30 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/VoiceRow.tsx +53 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/Waveform.tsx +97 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/clipActions.ts +50 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/effectActions.ts +161 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/index.tsx +161 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/timelineGeometry.ts +45 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/types.ts +43 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useAutosave.ts +107 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useEditorShortcuts.ts +168 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useFitHeight.ts +40 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useFollowPlayhead.ts +21 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useListenMix.ts +43 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/usePlayback.ts +231 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/usePlayerWidth.ts +27 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useSoundData.ts +124 -0
- package/studio/web/pages/VideoPage/components/SoundTimeline/useSoundTimeline.ts +511 -0
- package/studio/web/pages/VideoPage/components/StageDrawer/CompareVersions.tsx +111 -0
- package/studio/web/pages/VideoPage/components/StageDrawer/VersionCard.tsx +81 -0
- package/studio/web/pages/VideoPage/components/StageDrawer/VersionMedia.tsx +24 -0
- package/studio/web/pages/VideoPage/components/StageDrawer/VersionText.tsx +15 -0
- package/studio/web/pages/VideoPage/components/StageDrawer/index.tsx +109 -0
- package/studio/web/pages/VideoPage/components/StageProcess.tsx +126 -0
- package/studio/web/pages/VideoPage/components/StageResult.tsx +69 -0
- package/studio/web/pages/VideoPage/components/SwapReference.tsx +92 -0
- package/studio/web/pages/VideoPage/components/ThumbnailPanel.tsx +252 -0
- package/studio/web/pages/VideoPage/components/TimingPanel.tsx +89 -0
- package/studio/web/pages/VideoPage/components/VideoPlayer.tsx +18 -0
- package/studio/web/pages/VideoPage/components/VideoSkeleton.tsx +50 -0
- package/studio/web/pages/VideoPage/components/VideoVoiceInfo.tsx +33 -0
- package/studio/web/pages/VideoPage/components/VideoVoicePicker.tsx +165 -0
- package/studio/web/pages/VideoPage/components/VoicePauseBanner.tsx +56 -0
- package/studio/web/pages/VideoPage/components/WithLogo.tsx +10 -0
- package/studio/web/pages/VideoPage/index.tsx +295 -0
- package/studio/web/pages/VideosPage/components/PublishedOn.tsx +85 -0
- package/studio/web/pages/VideosPage/components/ServicesPanel.tsx +81 -0
- package/studio/web/pages/VideosPage/components/SessionsPanel.tsx +62 -0
- package/studio/web/pages/VideosPage/components/VideoListSkeleton.tsx +25 -0
- package/studio/web/pages/VideosPage/components/VideoRow.tsx +122 -0
- package/studio/web/pages/VideosPage/index.tsx +134 -0
- package/studio/web/pages/VoicePage/index.tsx +28 -0
- package/studio/web/router.tsx +201 -0
- package/studio/web/styles/base/elements.css +55 -0
- package/studio/web/styles/base/utilities.css +25 -0
- package/studio/web/styles/components/badge.css +33 -0
- package/studio/web/styles/components/claude-running.css +27 -0
- package/studio/web/styles/components/claude-session.css +212 -0
- package/studio/web/styles/components/claude-walking.css +92 -0
- package/studio/web/styles/components/clone-voice-save.css +136 -0
- package/studio/web/styles/components/clone-voice.css +379 -0
- package/studio/web/styles/components/controls.css +70 -0
- package/studio/web/styles/components/data-and-image.css +54 -0
- package/studio/web/styles/components/forms.css +132 -0
- package/studio/web/styles/components/human-banner.css +99 -0
- package/studio/web/styles/components/lightbox.css +50 -0
- package/studio/web/styles/components/markdown.css +68 -0
- package/studio/web/styles/components/modal.css +70 -0
- package/studio/web/styles/components/omni-cards.css +105 -0
- package/studio/web/styles/components/omni.css +859 -0
- package/studio/web/styles/components/omnichat.css +538 -0
- package/studio/web/styles/components/panel.css +115 -0
- package/studio/web/styles/components/platform-card.css +140 -0
- package/studio/web/styles/components/provider-card.css +132 -0
- package/studio/web/styles/components/queue.css +185 -0
- package/studio/web/styles/components/reference-actions.css +133 -0
- package/studio/web/styles/components/reference-picker.css +146 -0
- package/studio/web/styles/components/results-drawer.css +224 -0
- package/studio/web/styles/components/segmented.css +115 -0
- package/studio/web/styles/components/side-panel-tab.css +23 -0
- package/studio/web/styles/components/status-signals.css +66 -0
- package/studio/web/styles/components/stepper.css +208 -0
- package/studio/web/styles/components/table.css +19 -0
- package/studio/web/styles/components/tabs.css +24 -0
- package/studio/web/styles/components/ui/accordion.css +71 -0
- package/studio/web/styles/components/ui/chart.css +162 -0
- package/studio/web/styles/components/ui/checkbox.css +37 -0
- package/studio/web/styles/components/ui/date-picker.css +153 -0
- package/studio/web/styles/components/ui/select.css +110 -0
- package/studio/web/styles/components/ui/skeleton.css +25 -0
- package/studio/web/styles/components/ui/slider.css +81 -0
- package/studio/web/styles/components/ui/switch.css +41 -0
- package/studio/web/styles/components/ui/tooltip.css +24 -0
- package/studio/web/styles/components/voice-carousel.css +255 -0
- package/studio/web/styles/components/voice-editor.css +179 -0
- package/studio/web/styles/components/voice-grid.css +56 -0
- package/studio/web/styles/components/voice-profiles.css +192 -0
- package/studio/web/styles/design-system.md +136 -0
- package/studio/web/styles/index.css +116 -0
- package/studio/web/styles/layout/page.css +41 -0
- package/studio/web/styles/layout/sidebar-groups.css +39 -0
- package/studio/web/styles/layout/sidebar.css +111 -0
- package/studio/web/styles/pages/agent.css +26 -0
- package/studio/web/styles/pages/analytics/dashboard.css +614 -0
- package/studio/web/styles/pages/analytics/insights.css +48 -0
- package/studio/web/styles/pages/getting-started.css +166 -0
- package/studio/web/styles/pages/new-video/form.css +32 -0
- package/studio/web/styles/pages/not-found.css +59 -0
- package/studio/web/styles/pages/references.css +204 -0
- package/studio/web/styles/pages/schedule/calendar.css +541 -0
- package/studio/web/styles/pages/schedule/chip-states.css +60 -0
- package/studio/web/styles/pages/settings/models.css +72 -0
- package/studio/web/styles/pages/settings/shell.css +361 -0
- package/studio/web/styles/pages/settings/usage.css +63 -0
- package/studio/web/styles/pages/studio-offline.css +105 -0
- package/studio/web/styles/pages/video/caption-controls.css +194 -0
- package/studio/web/styles/pages/video/captions-grid.css +70 -0
- package/studio/web/styles/pages/video/captions.css +79 -0
- package/studio/web/styles/pages/video/editor-chat.css +103 -0
- package/studio/web/styles/pages/video/export.css +50 -0
- package/studio/web/styles/pages/video/frames.css +29 -0
- package/studio/web/styles/pages/video/fullscreen-stage.css +400 -0
- package/studio/web/styles/pages/video/instagram-carousel.css +309 -0
- package/studio/web/styles/pages/video/layout.css +285 -0
- package/studio/web/styles/pages/video/narration.css +138 -0
- package/studio/web/styles/pages/video/preview-overview.css +11 -0
- package/studio/web/styles/pages/video/processing-notice.css +34 -0
- package/studio/web/styles/pages/video/publish-when.css +76 -0
- package/studio/web/styles/pages/video/publish.css +97 -0
- package/studio/web/styles/pages/video/result.css +96 -0
- package/studio/web/styles/pages/video/scenes.css +167 -0
- package/studio/web/styles/pages/video/sound-timeline.css +672 -0
- package/studio/web/styles/pages/video/sound-toolbar.css +149 -0
- package/studio/web/styles/pages/video/take-player.css +100 -0
- package/studio/web/styles/pages/video/thumbnail.css +157 -0
- package/studio/web/styles/pages/video/timeline.css +117 -0
- package/studio/web/styles/pages/video/voice-picker.css +14 -0
- package/studio/web/styles/pages/video-list/active-row.css +27 -0
- package/studio/web/styles/pages/video-list/card-link.css +49 -0
- package/studio/web/styles/pages/video-list/list.css +86 -0
- package/studio/web/styles/theme/identity/details.css +204 -0
- package/studio/web/styles/theme/identity/shell.css +249 -0
- package/studio/web/styles/theme/identity/surfaces.css +183 -0
- package/studio/web/styles/theme/identity/titles-and-buttons.css +120 -0
- package/studio/web/styles/theme/no-borders/blocks.css +208 -0
- package/studio/web/styles/theme/no-borders/controls.css +256 -0
- package/studio/web/styles/tokens.css +245 -0
- package/studio/web/types/api.ts +2 -0
- package/studio/web/types/assets.d.ts +9 -0
- package/templates/brief.md +27 -0
- package/templates/captions.html +204 -0
- package/templates/carousel-composition.md +47 -0
- package/templates/carousel-script.md +60 -0
- package/templates/components/voiceavatar/README.md +87 -0
- package/templates/components/voiceavatar/demo.html +50 -0
- package/templates/components/voiceavatar/voiceavatar.js +415 -0
- package/templates/motion.md +80 -0
- package/templates/playbook.md +43 -0
- package/templates/reference.md +123 -0
- package/templates/scene.html +112 -0
- package/templates/scenes.example.json +96 -0
- package/templates/script.md +63 -0
- package/templates/slide.html +71 -0
- package/templates/wireframe.html +91 -0
- package/tools/analysis.mjs +300 -0
- package/tools/approval.mjs +442 -0
- package/tools/assemble.mjs +942 -0
- package/tools/build-motion.mjs +437 -0
- package/tools/captions.mjs +246 -0
- package/tools/carousel.mjs +558 -0
- package/tools/compose.mjs +307 -0
- package/tools/cuts.mjs +74 -0
- package/tools/editor.mjs +419 -0
- package/tools/epidemic-capture.js +54 -0
- package/tools/fanout.mjs +69 -0
- package/tools/history.mjs +70 -0
- package/tools/history.py +61 -0
- package/tools/job-queue.mjs +180 -0
- package/tools/job_queue.py +430 -0
- package/tools/lib/agents.mjs +412 -0
- package/tools/lib/channel.mjs +399 -0
- package/tools/lib/claude-settings.mjs +67 -0
- package/tools/lib/cli.mjs +9 -0
- package/tools/lib/fanout.mjs +234 -0
- package/tools/lib/http.mjs +94 -0
- package/tools/lib/index.js +14 -0
- package/tools/lib/mcp-server.mjs +69 -0
- package/tools/lib/metrics/metrics.mjs +204 -0
- package/tools/lib/narration.mjs +15 -0
- package/tools/lib/oauth-client.mjs +295 -0
- package/tools/lib/omnichat/config.mjs +139 -0
- package/tools/lib/omnichat/errors.mjs +42 -0
- package/tools/lib/omnichat/extract.mjs +82 -0
- package/tools/lib/omnichat/gate.mjs +151 -0
- package/tools/lib/omnichat/manual.mjs +166 -0
- package/tools/lib/omnichat/match.mjs +78 -0
- package/tools/lib/omnichat/pass.mjs +393 -0
- package/tools/lib/omnichat/record.mjs +208 -0
- package/tools/lib/omnichat/text.mjs +315 -0
- package/tools/lib/omnichat/webhook.mjs +166 -0
- package/tools/lib/pairing.mjs +99 -0
- package/tools/lib/paths.mjs +41 -0
- package/tools/lib/platforms/instagram.mjs +469 -0
- package/tools/lib/platforms/tiktok.mjs +343 -0
- package/tools/lib/platforms/youtube.mjs +228 -0
- package/tools/lib/publish/publish.mjs +244 -0
- package/tools/lib/schedule/schedule.mjs +191 -0
- package/tools/lib/service.mjs +134 -0
- package/tools/lib/skill-client.mjs +126 -0
- package/tools/lib/skills-release.mjs +196 -0
- package/tools/lib/testing.mjs +52 -0
- package/tools/lib/up.mjs +187 -0
- package/tools/metrics.mjs +415 -0
- package/tools/models.mjs +134 -0
- package/tools/narrate.mjs +257 -0
- package/tools/omni.mjs +298 -0
- package/tools/omni_paths.py +12 -0
- package/tools/omnichat.mjs +1577 -0
- package/tools/omnivideo.py +1122 -0
- package/tools/package.mjs +130 -0
- package/tools/platforms.mjs +236 -0
- package/tools/premiere.mjs +533 -0
- package/tools/publish.mjs +1496 -0
- package/tools/reference.mjs +1408 -0
- package/tools/render.mjs +426 -0
- package/tools/runner.mjs +156 -0
- package/tools/setup.mjs +466 -0
- package/tools/skills-release.mjs +93 -0
- package/tools/sound.mjs +1323 -0
- package/tools/soundtrack.mjs +217 -0
- package/tools/thumbnail.mjs +271 -0
- package/tools/timing.mjs +108 -0
- package/tools/usage.py +628 -0
- package/tools/voice-envelope.mjs +185 -0
- package/tools/voice.py +448 -0
- package/tools/voice_sample.py +75 -0
- package/tools/wireframe.mjs +230 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# <name> · <o que a peça é, em poucas palavras>
|
|
2
|
+
|
|
3
|
+
Fonte: <source>.
|
|
4
|
+
<summary>.
|
|
5
|
+
|
|
6
|
+
Medido nos quadros: `measurements.json` e `sheets/`. O que é estimativa leva `≈`.
|
|
7
|
+
O passo a passo é a skill `av-reference`: medir, Tipo, movimento (`curve`),
|
|
8
|
+
guia e prova (`compare`).
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Essência
|
|
13
|
+
|
|
14
|
+
Uma ou duas frases: o que a peça faz e por que prende. É o texto que aparece
|
|
15
|
+
no `reference.mjs list`, então escreva para quem vai escolher entre
|
|
16
|
+
estilos visuais. Se a essência mora numa camada que o código não reproduz (Tipo),
|
|
17
|
+
diga aqui.
|
|
18
|
+
|
|
19
|
+
## Tipo
|
|
20
|
+
|
|
21
|
+
**<motion de shape | tipografia cinética | UI / product demo | site | filmado /
|
|
22
|
+
documental | híbrido>** · reproduzível em código: **<inteiro | em parte |
|
|
23
|
+
só a camada gráfica>**. Superfície do `measurements.json`: <n> cores cobrem 90 %,
|
|
24
|
+
<n> % chapado.
|
|
25
|
+
|
|
26
|
+
| camada | na peça | em código |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| fundo | | sim · ou o substituto, e que função ele guarda |
|
|
29
|
+
| herói | | |
|
|
30
|
+
| texto | | |
|
|
31
|
+
| textura | | |
|
|
32
|
+
| edição | ritmo, corte, passagem | |
|
|
33
|
+
|
|
34
|
+
## Ritmo
|
|
35
|
+
|
|
36
|
+
Do `measurements.json`: quantos planos e de quanto, quanto do tempo a tela segura,
|
|
37
|
+
onde estão os picos de mudança. Diga o que isso pede ao roteiro de motion:
|
|
38
|
+
quanto dura um beat, quanto a tela segura depois dele, se a peça corta ou flui.
|
|
39
|
+
|
|
40
|
+
## Layout
|
|
41
|
+
|
|
42
|
+
Grade, margens, zonas vazias (topo e base), onde fica o herói. Medidas em px
|
|
43
|
+
no formato original.
|
|
44
|
+
|
|
45
|
+
## Cor
|
|
46
|
+
|
|
47
|
+
| token | hex | OKLCH | uso |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
|
|
50
|
+
A paleta do `measurements.json` traz a área de cada cor; aqui entra o papel de
|
|
51
|
+
cada uma. Diga onde o acento aparece e onde ele nunca aparece.
|
|
52
|
+
|
|
53
|
+
## Tipografia
|
|
54
|
+
|
|
55
|
+
| papel | corpo | peso | tracking | cor | caixa |
|
|
56
|
+
|---|---|---|---|---|---|
|
|
57
|
+
|
|
58
|
+
Família provável e como você chegou nela.
|
|
59
|
+
|
|
60
|
+
## Movimento
|
|
61
|
+
|
|
62
|
+
**Camadas:** o que tem câmera, o que fica fixo.
|
|
63
|
+
**Câmera:** cada movimento com tempo, amplitude e curva.
|
|
64
|
+
**Curvas:** as duas ou três que a peça usa, medidas com `curve` (de onde: `t`
|
|
65
|
+
e caixa), com o nome CSS/GSAP mais perto.
|
|
66
|
+
**Ritmo interno:** escalonamento entre itens, quanto um elemento espera o
|
|
67
|
+
anterior assentar.
|
|
68
|
+
|
|
69
|
+
## Primitivas
|
|
70
|
+
|
|
71
|
+
Os elementos que se repetem, cada um como uma unidade que a composição monta.
|
|
72
|
+
Cinco a dez descrevem quase qualquer peça de shape.
|
|
73
|
+
|
|
74
|
+
### <nome da primitiva> · `sheets/<onde ver>.png`
|
|
75
|
+
|
|
76
|
+
- **anatomia:** forma, camadas, tamanho em px, traço, raio, sombra
|
|
77
|
+
- **entra:** de que estado, `curve` medida (`cubic-bezier`, duração), escalonamento
|
|
78
|
+
- **vive:** o que continua se mexendo depois de entrar
|
|
79
|
+
- **se transforma:** em que vira, troca no lugar
|
|
80
|
+
- **sai:** como e com que curva
|
|
81
|
+
|
|
82
|
+
## Timeline
|
|
83
|
+
|
|
84
|
+
| t (s) | o que acontece |
|
|
85
|
+
|---|---|
|
|
86
|
+
|
|
87
|
+
## Som
|
|
88
|
+
|
|
89
|
+
Trilha, pulso (do `measurements.json`), efeitos e em que quadro caem, narração.
|
|
90
|
+
|
|
91
|
+
## Vale levar
|
|
92
|
+
|
|
93
|
+
Princípios que funcionam em outro assunto, um por linha, concretos o bastante
|
|
94
|
+
para virar regra no `motion.md`.
|
|
95
|
+
|
|
96
|
+
## Não copiar
|
|
97
|
+
|
|
98
|
+
Marca, assets, dados e o que só faz sentido naquela peça.
|
|
99
|
+
|
|
100
|
+
## Tokens
|
|
101
|
+
|
|
102
|
+
```css
|
|
103
|
+
:root{
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Prova
|
|
108
|
+
|
|
109
|
+
`proof/proof.html` recria <t0–t1 s> da peça só com este guia, no tamanho dela.
|
|
110
|
+
|
|
111
|
+
| volta | SSIM | ΔE cor | ΔE paleta | o que mudou |
|
|
112
|
+
|---|---|---|---|---|
|
|
113
|
+
|
|
114
|
+
Bateu: …
|
|
115
|
+
Ainda diverge, e por quê: …
|
|
116
|
+
|
|
117
|
+
## Arquivos
|
|
118
|
+
|
|
119
|
+
- o vídeo e `measurements.json` (com `curves` e `proofs`)
|
|
120
|
+
- `sheets/contacts.png`: um quadro a cada intervalo fixo, em linhas
|
|
121
|
+
- `sheets/cuts.png`: antes | depois de cada corte
|
|
122
|
+
- `sheets/comparison.png`: estilo visual | prova | diferença, da última volta
|
|
123
|
+
- `proof/proof.html`: o trecho recriado em código, ponto de partida das cenas
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>scene</title>
|
|
6
|
+
<!-- ============================================================
|
|
7
|
+
omnivideo BASE SCENE. Copy to videos/<slug>/motion/src/<id>.html.
|
|
8
|
+
|
|
9
|
+
Only the timing engine comes ready; the visuals belong to the scene. The
|
|
10
|
+
size follows the viewport render.mjs opens (1080×1920 or 1920×1080).
|
|
11
|
+
|
|
12
|
+
still: node tools/render.mjs scene.html --still f.png --at 2 --w 1080 --h 1920
|
|
13
|
+
browser preview: open with ?t=2.4
|
|
14
|
+
|
|
15
|
+
Two clocks: --t is the scene's (0 at its first frame); the video's is
|
|
16
|
+
--scene-start + --t. What crosses the cut (background, slow camera) moves
|
|
17
|
+
in video time; the rest, in scene time.
|
|
18
|
+
============================================================ -->
|
|
19
|
+
<style>
|
|
20
|
+
/* ========================= ENGINE (do not edit) ========================= */
|
|
21
|
+
:root{ --t:0s; }
|
|
22
|
+
|
|
23
|
+
/* Non-inherited: without this a parent's --dur leaks into every child and the
|
|
24
|
+
var(--dur, 600ms) fallback never fires. */
|
|
25
|
+
@property --start{ syntax:"*"; inherits:false; }
|
|
26
|
+
@property --dur { syntax:"*"; inherits:false; }
|
|
27
|
+
@property --ease { syntax:"*"; inherits:false; }
|
|
28
|
+
@property --iter { syntax:"*"; inherits:false; }
|
|
29
|
+
|
|
30
|
+
[data-anim]{
|
|
31
|
+
animation-duration:var(--dur, 600ms);
|
|
32
|
+
animation-timing-function:var(--ease, cubic-bezier(0.22,1,0.36,1));
|
|
33
|
+
animation-iteration-count:var(--iter, 1);
|
|
34
|
+
animation-delay:calc(var(--start, 0s) - var(--t));
|
|
35
|
+
animation-fill-mode:both; /* holds before AND after */
|
|
36
|
+
animation-play-state:paused; /* time comes from the delay, not the clock */
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* ========================= CANVAS ========================= */
|
|
40
|
+
html,body{ margin:0; width:100vw; height:100vh; overflow:hidden; background:var(--bg); font-family:var(--sans); }
|
|
41
|
+
:root{
|
|
42
|
+
--bg:#F5F5F3;
|
|
43
|
+
--sans:"Schibsted Grotesk","Helvetica Neue",Helvetica,Arial,sans-serif; /* channel default (av-motion) */
|
|
44
|
+
--margin:4.5vw; /* sides and bottom */
|
|
45
|
+
--margin-top:calc(var(--margin) * 1.2); /* top 20 % larger: the top safe area doesn't overlap */
|
|
46
|
+
--caption-zone:19vh; /* 9:16: captions live here; no content */
|
|
47
|
+
}
|
|
48
|
+
.canvas{
|
|
49
|
+
position:absolute; inset:0 0 var(--caption-zone) 0;
|
|
50
|
+
padding:var(--margin-top) var(--margin) var(--margin);
|
|
51
|
+
display:flex; flex-direction:column; justify-content:center; gap:3vh;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ========================= CONTINUOUS (optional) =========================
|
|
55
|
+
A layer that crosses the cut moves in VIDEO time: with a negative --start
|
|
56
|
+
at --scene-start, it is at the same point on one scene's last frame and on
|
|
57
|
+
the next one's first. Infinite loops only like this, never in scene time.
|
|
58
|
+
|
|
59
|
+
.live-bg{ animation-name:drift; --start:calc(0s - var(--scene-start, 0s));
|
|
60
|
+
--dur:16s; --iter:infinite; --ease:linear; }
|
|
61
|
+
|
|
62
|
+
To apply it the same way in every scene, put it in motion/src/_common.html:
|
|
63
|
+
the build pastes that file in place of the omnivideo:common marker, at the
|
|
64
|
+
start of the body. */
|
|
65
|
+
|
|
66
|
+
/* ========================= SCENE (replace) ========================= */
|
|
67
|
+
@keyframes enter{
|
|
68
|
+
from{ opacity:0; transform:translateY(12px); filter:blur(3px); }
|
|
69
|
+
to { opacity:1; transform:none; filter:none; }
|
|
70
|
+
}
|
|
71
|
+
.title{ font:700 6.5vw/1.1 var(--sans); color:#111; margin:0; }
|
|
72
|
+
.support{ font:400 4vw/1.3 var(--sans); color:#555; margin:0; }
|
|
73
|
+
</style>
|
|
74
|
+
</head>
|
|
75
|
+
<body>
|
|
76
|
+
<!-- omnivideo:common -->
|
|
77
|
+
<main class="canvas">
|
|
78
|
+
<!-- Beat: --start comes from scenes.json via --b-<element>. The value after
|
|
79
|
+
the comma is only for opening the source alone in the browser.
|
|
80
|
+
An element that carries into the next scene gets data-continues="<name>"
|
|
81
|
+
in both; `build-motion.mjs --transitions` measures whether it jumps at the cut. -->
|
|
82
|
+
<h1 class="title" data-anim style="animation-name:enter; --start:var(--b-title, 0.6s);">Título da cena</h1>
|
|
83
|
+
<p class="support" data-anim style="animation-name:enter; --start:calc(var(--b-support, 1.8s) + 0ms);">Apoio que entra no segundo beat</p>
|
|
84
|
+
</main>
|
|
85
|
+
|
|
86
|
+
<script>
|
|
87
|
+
/* ---------------------------------------------------------------------------
|
|
88
|
+
GSAP or Motion (optional): a PAUSED timeline, positioned by the --t that
|
|
89
|
+
render.mjs writes on <html>. Beat times in window.OMNIVIDEO.beats.
|
|
90
|
+
|
|
91
|
+
const beats = window.OMNIVIDEO?.beats ?? {};
|
|
92
|
+
const tl = gsap.timeline({ paused: true });
|
|
93
|
+
tl.from("#chart", { scaleY: 0, duration: 0.9, ease: "power2.out" }, beats["chart"] ?? 1.2);
|
|
94
|
+
const seek = () => tl.seek(parseFloat(document.documentElement.style.getPropertyValue("--t")) || 0);
|
|
95
|
+
new MutationObserver(seek).observe(document.documentElement, { attributes: true, attributeFilter: ["style"] });
|
|
96
|
+
seek();
|
|
97
|
+
|
|
98
|
+
A timeline that crosses the cut: tl.seek((window.OMNIVIDEO?.start ?? 0) + t).
|
|
99
|
+
|
|
100
|
+
No clock: no Date.now(), no unseeded Math.random(), no
|
|
101
|
+
requestAnimationFrame driving visuals, no play().
|
|
102
|
+
--------------------------------------------------------------------------- */
|
|
103
|
+
|
|
104
|
+
/* browser preview: ?t=2.4 freezes the scene at that instant */
|
|
105
|
+
const q = new URLSearchParams(location.search);
|
|
106
|
+
if (q.has("t")) document.documentElement.style.setProperty("--t", q.get("t") + "s");
|
|
107
|
+
|
|
108
|
+
/* signal for the renderer: only after fonts (and GSAP setup, if any) */
|
|
109
|
+
document.fonts.ready.then(() => { window.__ready = true; });
|
|
110
|
+
</script>
|
|
111
|
+
</body>
|
|
112
|
+
</html>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "2026-10-12-exemplo",
|
|
3
|
+
"title": "Decisão de IA em milissegundos",
|
|
4
|
+
"format": {
|
|
5
|
+
"aspect": "9:16",
|
|
6
|
+
"w": 1080,
|
|
7
|
+
"h": 1920,
|
|
8
|
+
"fps": 30
|
|
9
|
+
},
|
|
10
|
+
"references": [
|
|
11
|
+
"apura-paraguai"
|
|
12
|
+
],
|
|
13
|
+
"scenes": [
|
|
14
|
+
{
|
|
15
|
+
"id": "c01",
|
|
16
|
+
"title": "Gancho",
|
|
17
|
+
"goal": "Mostrar o contraste: minutos contra milissegundos.",
|
|
18
|
+
"visual": "Duas barras de tempo lado a lado. A do LLM cresce devagar; a do Jev mal sai do chão.",
|
|
19
|
+
"hero": "barra do Jev",
|
|
20
|
+
"min_duration": 4.8,
|
|
21
|
+
"html": "motion/c01.html",
|
|
22
|
+
"mp4": "motion/c01.mp4",
|
|
23
|
+
"beats": [
|
|
24
|
+
{
|
|
25
|
+
"element": "titulo",
|
|
26
|
+
"t": 0.6,
|
|
27
|
+
"enters_with": "c01f1"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"element": "barra-llm",
|
|
31
|
+
"t": 1.8,
|
|
32
|
+
"enters_with": "c01f1:minutos"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"element": "barra-jev",
|
|
36
|
+
"t": 4.2,
|
|
37
|
+
"enters_with": "c01f2:milissegundos",
|
|
38
|
+
"sound": {
|
|
39
|
+
"name": "barra-whoosh.mp3",
|
|
40
|
+
"offset": 0,
|
|
41
|
+
"db": -3
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"lines": [
|
|
46
|
+
{
|
|
47
|
+
"id": "c01f1",
|
|
48
|
+
"text": "Uma IA de ponta pode levar minutos pra tomar uma única decisão."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "c01f2",
|
|
52
|
+
"text": "O Jev decide em milissegundos."
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "c02",
|
|
58
|
+
"title": "Como funciona",
|
|
59
|
+
"goal": "Entrada qualquer, saída tipada.",
|
|
60
|
+
"visual": "Card de estado à esquerda, conector tracejado com pacote, card de decisão à direita com a probabilidade.",
|
|
61
|
+
"hero": "card de decisão",
|
|
62
|
+
"transition": {
|
|
63
|
+
"continues": [
|
|
64
|
+
"fundo"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"min_duration": 5.4,
|
|
68
|
+
"html": "motion/c02.html",
|
|
69
|
+
"mp4": "motion/c02.mp4",
|
|
70
|
+
"beats": [
|
|
71
|
+
{
|
|
72
|
+
"element": "card-estado",
|
|
73
|
+
"t": 0.6,
|
|
74
|
+
"enters_with": "c02f1"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"element": "conector",
|
|
78
|
+
"t": 2.4,
|
|
79
|
+
"enters_with": "c02f1:sai"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"element": "card-decisao",
|
|
83
|
+
"t": 3.6,
|
|
84
|
+
"enters_with": "c02f1:tipada",
|
|
85
|
+
"sound": "clique-seco.mp3"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"lines": [
|
|
89
|
+
{
|
|
90
|
+
"id": "c02f1",
|
|
91
|
+
"text": "Entra o estado, do jeito que vier, e sai uma decisão tipada, com probabilidade."
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Roteiro · <título>
|
|
2
|
+
|
|
3
|
+
| formato | duração alvo | velocidade | palavras | estimativa (÷ 2,2 ÷ velocidade) |
|
|
4
|
+
|---|---|---|---|---|
|
|
5
|
+
| 9:16 | 45 s | 1,2× | 0 | 0 s |
|
|
6
|
+
|
|
7
|
+
**Tese:** uma frase.
|
|
8
|
+
|
|
9
|
+
## Estratégia
|
|
10
|
+
|
|
11
|
+
| | |
|
|
12
|
+
|---|---|
|
|
13
|
+
| pilar | um dos pilares do `channel/playbook.md` |
|
|
14
|
+
| objetivo | alcance · seguidor · salvamento · lead (um só) |
|
|
15
|
+
| métrica que julga | a do objetivo |
|
|
16
|
+
| para quem | quem para de rolar |
|
|
17
|
+
| promessa | o que a pessoa leva, numa frase |
|
|
18
|
+
| pergunta que segura | a dúvida que o gancho abre e o fim responde |
|
|
19
|
+
| CTA | o que o objetivo pede |
|
|
20
|
+
|
|
21
|
+
## Ganchos
|
|
22
|
+
|
|
23
|
+
| | fala | quadro 0 | texto na tela | tipo |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| **A · escolhido** | a primeira frase | o que está na tela no primeiro quadro | 2 a 5 palavras | risco · resultado · contradição · número · pergunta |
|
|
26
|
+
| B | | | | |
|
|
27
|
+
| C | | | | |
|
|
28
|
+
|
|
29
|
+
**Por que o A:** uma frase, com o que o playbook e as métricas mostram.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## B1 · Gancho
|
|
34
|
+
|
|
35
|
+
**Ideia:** o gancho A.
|
|
36
|
+
|
|
37
|
+
> Texto falado.
|
|
38
|
+
|
|
39
|
+
## B2 · Segura
|
|
40
|
+
|
|
41
|
+
**Ideia:** por que ficar: a promessa ou a pergunta que segura.
|
|
42
|
+
|
|
43
|
+
> Texto falado.
|
|
44
|
+
|
|
45
|
+
## B3 · <ideia>
|
|
46
|
+
|
|
47
|
+
**Ideia:** uma linha; termina abrindo o próximo bloco.
|
|
48
|
+
|
|
49
|
+
> Texto falado.
|
|
50
|
+
|
|
51
|
+
**Fonte:** `source/…` (todo fato com número, nome ou data)
|
|
52
|
+
|
|
53
|
+
## B4 · Payoff
|
|
54
|
+
|
|
55
|
+
**Ideia:** a resposta da pergunta que segura.
|
|
56
|
+
|
|
57
|
+
> Texto falado.
|
|
58
|
+
|
|
59
|
+
## B5 · Fechamento
|
|
60
|
+
|
|
61
|
+
**Ideia:** o CTA do objetivo.
|
|
62
|
+
|
|
63
|
+
> Texto falado, terminando no CTA.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>slide</title>
|
|
6
|
+
<!-- ============================================================
|
|
7
|
+
omnivideo carousel BASE SLIDE. Copy to
|
|
8
|
+
videos/<slug>/carousel/src/<id>.html (s01, s02…).
|
|
9
|
+
|
|
10
|
+
The slide is a still image: no --t, no animation. The size follows the
|
|
11
|
+
viewport carousel.mjs opens (4:5 → 1080×1350, 1:1 → 1080×1080,
|
|
12
|
+
3:4 → 1080×1440); the width is always 1080, so px measures hold
|
|
13
|
+
in all three.
|
|
14
|
+
|
|
15
|
+
build: node tools/carousel.mjs build videos/<slug> --slide s01
|
|
16
|
+
browser preview: open the carousel/<id>.html the build generates
|
|
17
|
+
|
|
18
|
+
The build injects at the end of the head:
|
|
19
|
+
:root{ --slide-i:2; --slide-n:8; --slide-w:1080px; --slide-h:1350px; }
|
|
20
|
+
window.OMNICAROUSEL = { slide, index, total, format, slides: [{ id, role }] }
|
|
21
|
+
(--slide-i starts at 0), and pastes carousel/src/_common.html in place of
|
|
22
|
+
the omnivideo:common marker: background, tokens and frame equal on every
|
|
23
|
+
slide. The _common styles go up to the start of the head: they are the
|
|
24
|
+
base, and this slide's style overrides.
|
|
25
|
+
|
|
26
|
+
An element that crosses the seam between two slides (panorama): position
|
|
27
|
+
on the whole carousel, shifted by the slide you are on,
|
|
28
|
+
left: calc(1400px - var(--slide-i) * var(--slide-w));
|
|
29
|
+
The same code in _common.html draws the right part on each slide.
|
|
30
|
+
============================================================ -->
|
|
31
|
+
<style>
|
|
32
|
+
/* ========================= CANVAS (default; _common.html may swap it) ========================= */
|
|
33
|
+
:root{
|
|
34
|
+
--bg:#F5F5F3;
|
|
35
|
+
--ink:#111;
|
|
36
|
+
--support:#555;
|
|
37
|
+
--sans:"Schibsted Grotesk","Helvetica Neue",Helvetica,Arial,sans-serif; /* channel default */
|
|
38
|
+
--margin:88px; /* sides: the profile grid crops 4:5 to 3:4 (~34 px each side) */
|
|
39
|
+
--margin-v:104px; /* top and bottom */
|
|
40
|
+
}
|
|
41
|
+
html,body{ margin:0; width:100vw; height:100vh; overflow:hidden; background:var(--bg); font-family:var(--sans); color:var(--ink); }
|
|
42
|
+
.canvas{
|
|
43
|
+
position:absolute; inset:0;
|
|
44
|
+
padding:var(--margin-v) var(--margin);
|
|
45
|
+
display:flex; flex-direction:column; justify-content:center; gap:32px;
|
|
46
|
+
box-sizing:border-box;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* ========================= SLIDE (swap) ========================= */
|
|
50
|
+
.title{ font:800 88px/1.02 var(--sans); letter-spacing:-0.035em; margin:0; }
|
|
51
|
+
.support{ font:500 40px/1.3 var(--sans); color:var(--support); margin:0; }
|
|
52
|
+
</style>
|
|
53
|
+
</head>
|
|
54
|
+
<body>
|
|
55
|
+
<!-- omnivideo:common -->
|
|
56
|
+
<main class="canvas">
|
|
57
|
+
<h1 class="title">Título do slide</h1>
|
|
58
|
+
<p class="support">Uma frase de apoio, curta, que se lê em dois segundos.</p>
|
|
59
|
+
</main>
|
|
60
|
+
|
|
61
|
+
<script>
|
|
62
|
+
/* Drawing in JS (generated SVG, cell grid, chart): build it here, with data
|
|
63
|
+
from the slide itself or from window.OMNICAROUSEL, and only then tell the
|
|
64
|
+
renderer. No Math.random() without a seed: the same slide always comes out the same.
|
|
65
|
+
|
|
66
|
+
A decorative element that bleeds past the margin on purpose (a shape bleeding
|
|
67
|
+
off the edge, panorama) gets data-free: the build does not flag it. Text never bleeds. */
|
|
68
|
+
document.fonts.ready.then(() => { window.__ready = true; });
|
|
69
|
+
</script>
|
|
70
|
+
</body>
|
|
71
|
+
</html>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>wireframes</title>
|
|
6
|
+
<!-- ============================================================
|
|
7
|
+
Motion script WIREFRAMES. Copy to
|
|
8
|
+
videos/<slug>/motion/wireframes/wireframes.html.
|
|
9
|
+
|
|
10
|
+
The base of the video's wireframes: the tokens (match the Style in
|
|
11
|
+
motion.md) and the classes. Each scene's frame is its own file,
|
|
12
|
+
motion/wireframes/src/<id>.html, with one section of class "frame"
|
|
13
|
+
and the scene's id, written by that scene's fork in parallel
|
|
14
|
+
(.claude/skills/av-motion/wireframe.md has the examples);
|
|
15
|
+
tools/wireframe.mjs pastes them at the omnivideo:frames marker in the body. A quick
|
|
16
|
+
still so the user sees each scene's visual idea before approving: where
|
|
17
|
+
the hero sits, what supports it, how much it takes. Not the scene: no
|
|
18
|
+
animation, no assets, no polish.
|
|
19
|
+
|
|
20
|
+
Everything gray, EXCEPT what has the most contrast or focus in the scene:
|
|
21
|
+
that gets the real color (.focus). One, at most two, per frame.
|
|
22
|
+
|
|
23
|
+
render: node tools/wireframe.mjs videos/<slug> (all + _sheet.png)
|
|
24
|
+
============================================================ -->
|
|
25
|
+
<style>
|
|
26
|
+
/* ===== tokens: match the Style in motion.md ===== */
|
|
27
|
+
:root{
|
|
28
|
+
--bg:#F5F5F3; /* the style's background (dark → dark) */
|
|
29
|
+
--gray:#D6D6D2; /* blocks */
|
|
30
|
+
--gray-text:#8E8E8A; /* text and lines */
|
|
31
|
+
--focus:#E8452C; /* the style's accent color */
|
|
32
|
+
--sans:"Schibsted Grotesk","Helvetica Neue",Helvetica,Arial,sans-serif;
|
|
33
|
+
--margin:4.5vw; /* sides and bottom */
|
|
34
|
+
--margin-top:calc(var(--margin) * 1.2); /* top 20 % larger (top safe area) */
|
|
35
|
+
--caption-zone:19vh; /* 9:16: captions live here */
|
|
36
|
+
}
|
|
37
|
+
/* dark style: swap the three above, for example
|
|
38
|
+
--bg:#111; --gray:#2E2E2E; --gray-text:#7A7A7A; */
|
|
39
|
+
|
|
40
|
+
/* ===== base (do not edit) ===== */
|
|
41
|
+
html,body{ margin:0; background:var(--bg); font-family:var(--sans); }
|
|
42
|
+
.frame{ position:relative; width:100vw; height:100vh; overflow:hidden; background:var(--bg); }
|
|
43
|
+
.canvas{
|
|
44
|
+
position:absolute; inset:0 0 var(--caption-zone) 0; padding:var(--margin-top) var(--margin) var(--margin); box-sizing:border-box;
|
|
45
|
+
display:flex; flex-direction:column; justify-content:center; gap:3vh;
|
|
46
|
+
}
|
|
47
|
+
@media (min-aspect-ratio:1/1){ :root{ --caption-zone:0px; } }
|
|
48
|
+
/* where the captions will sit, hatched (9:16 only) */
|
|
49
|
+
@media (max-aspect-ratio:1/1){
|
|
50
|
+
.frame::after{
|
|
51
|
+
content:""; position:absolute; left:0; right:0; bottom:0; height:var(--caption-zone);
|
|
52
|
+
background:repeating-linear-gradient(-45deg, transparent 0 14px, color-mix(in srgb, var(--gray-text) 18%, transparent) 14px 16px);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* solid block: image, card, screen, icon, logo */
|
|
57
|
+
.block{ background:var(--gray); border-radius:1.2vw; }
|
|
58
|
+
/* empty frame: window, border-only card */
|
|
59
|
+
.outline{ border:0.4vw solid var(--gray); border-radius:1.2vw; box-sizing:border-box; }
|
|
60
|
+
/* real words (title, number, label): size goes inline */
|
|
61
|
+
.text{ color:var(--gray-text); font-weight:700; line-height:1.1; margin:0; }
|
|
62
|
+
/* supporting text without the words: gray lines */
|
|
63
|
+
.lines{ height:calc(var(--n, 3) * 3.2vh); background:repeating-linear-gradient(var(--gray) 0 1.6vh, transparent 1.6vh 3.2vh); }
|
|
64
|
+
/* label inside a block: "logo typesafe", "print do chatgpt" */
|
|
65
|
+
.label{ display:grid; place-items:center; font:500 2.4vw/1.2 var(--sans); color:var(--gray-text); text-align:center; }
|
|
66
|
+
|
|
67
|
+
/* what has the most contrast or focus leaves the gray */
|
|
68
|
+
.block.focus{ background:var(--focus); }
|
|
69
|
+
.outline.focus{ border-color:var(--focus); }
|
|
70
|
+
.text.focus{ color:var(--focus); }
|
|
71
|
+
.block.focus .label, .block.focus.label{ color:var(--bg); }
|
|
72
|
+
|
|
73
|
+
/* the motion, in one line: "→ entra da direita", "conta 0 → 92%" (optional, one per frame) */
|
|
74
|
+
.note{
|
|
75
|
+
position:absolute; font:500 2.2vw/1.3 ui-monospace,Menlo,monospace; color:var(--gray-text);
|
|
76
|
+
border:2px dashed var(--gray-text); border-radius:0.8vw; padding:0.6vw 1.2vw; background:var(--bg);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ===== frames: one per scene ===== */
|
|
80
|
+
</style>
|
|
81
|
+
</head>
|
|
82
|
+
<body>
|
|
83
|
+
|
|
84
|
+
<!-- omnivideo:frames -->
|
|
85
|
+
|
|
86
|
+
<script>
|
|
87
|
+
/* signal for the renderer: only after fonts */
|
|
88
|
+
document.fonts.ready.then(() => { window.__ready = true; });
|
|
89
|
+
</script>
|
|
90
|
+
</body>
|
|
91
|
+
</html>
|