Šķîþ ţö ḿàîñ çöñţéñţ

Ḿüļţîḿöđàļ çöñţéñţ: îḿþļéḿéñţàţîöñ ḿàþ

Ţàçţîçàļ ñöţéš ƒöŕ ţĥé ḿüļţîḿöđàļ šüŕƒàçé đéšçŕîƃéđ îñ Ḿ-03: éẋţŕàçţîöñ, ŕéƒîñéḿéñţ, àñđ ṽîšîöñ. Ţĥé çöñţéñţ-ḿöđéļ àñçĥöŕš àŕé Ƒ-02: à ƃļöçķ çàŕŕîéš à ţéḿþöŕàļ TimingAnnotation, à šþàţîàļ GeometryAnnotation, àñđ à ŕéçöĝñîţîöñ Origin (ÖÇŔ/ÀŠŔ, ŵîţĥ çöñƒîđéñçé).

Ţŵö àẋéš öƒ àđàþţàţîöñ

Éṽéŕý îḿàĝé / àüđîö / ṽîđéö àššéţ çàñ ƃé àđàþţéđ ţŵö ŵàýš, àñđ ƃöţĥ àŕé ƒîŕšţ-çļàšš:

  • Éẋţŕàçţéđ çöñţéñţ: ţĥé ţéẋţ îñšîđé ţĥé àššéţ (ÖÇŔ ţéẋţ, šþééçĥ, öñ-šçŕééñ ƒŕàḿé ţéẋţ, šüƃţîţļé çüéš). Ţŕàñšļàţé îţ, ţĥéñ ŕöüñđ-ţŕîþ îñţö à ţéẋţ-çàŕŕýîñĝ àŕţîƒàçţ (à šüƃţîţļé ƒîļé, àñ àļţ-ţéẋţ šîđéçàŕ).
  • Ţĥé ŵĥöļé àššéţ (replace-asset): ţĥé ƒîļé îš ţĥé đéļîṽéŕàƃļé. Ţĥé þŕöĵéçţ þàîŕš ţĥé šöüŕçé ŵîţĥ à þéŕ-ļöçàļé ƒîļé ţĥé üšéŕ/çöññéçţöŕ šüþþļîéš, àñđ ţŕéàţš îţ àš àüţĥöŕîţàţîṽé. core/project.ResolveAssetVariants àñđ IsBinaryAssetFormat çöṽéŕ image, audio, àñđ video; ţĥé àüđîö/ṽîđéö ŵŕîţéŕš àŕé þàššţĥŕöüĝĥ šîñķš ţĥàţ éḿîţ ţĥé (ŕéþļàçéḿéñţ) ƃýţéš. Ţĥé éñĝîñé đöéš ñöţ šýñţĥéšîžé ţŕàñšļàţéđ ḿéđîà: ñö ŢŢŠ öŕ ŕé-éñçöđé îñ çöŕé.

Ŕéàđéŕš, ŵŕîţéŕš, ŕöüñđ-ţŕîþ

ƑöŕḿàţŔéàđéŕ éḿîţšŴŕîţéŕŔöüñđ-ţŕîþ
îḿàĝéÖÇŔ ƃļöçķš (ĝéöḿéţŕý + ĝļýþĥš) + àļţ-ţéẋţ çàþţîöñ, öŕ Ḿéđîàîḿàĝé ƃýţéš + .alt.txtàļţ-ţéẋţ šîđéçàŕ; ŵĥöļé-îḿàĝé ŕéþļàçé-àššéţ
àüđîöÀŠŔ ƃļöçķš (ţîḿîñĝ + Öŕîĝîñ), öŕ öþàǫüé Ḿéđîàþàššţĥŕöüĝĥšüƃţîţļé ƒîļé (ṽîà à ƒļöŵ); ŵĥöļé-àüđîö ŕéþļàçé-àššéţ
ṽîđéöàüđîö çĥîļđ-ļàýéŕ (ÀŠŔ) + ƒŕàḿéš çĥîļđ-ļàýéŕ (ÖÇŔ ĝéöḿéţŕý+ţîḿîñĝ), öŕ öþàǫüé Ḿéđîà ŵĥéñ ñö ƒƒḿþéĝþàššţĥŕöüĝĥšüƃţîţļé ƒîļé (šþééçĥ öñļý); ŵĥöļé-ṽîđéö ŕéþļàçé-àššéţ
ṽţţ / šŕţ / ţţḿļšüƃţîţļé çüéš ŵîţĥ TimingAnnotationýéšƃýţé-éẋàçţ šüƃţîţļé ŕöüñđ-ţŕîþ

Ţĥé srt ŕéàđéŕ þöþüļàţéš ţĥé çàñöñîçàļ TimingAnnotation, ñöţ öñļý Properties["timecode"]. Ţĥé video ŕéàđéŕ đéĝŕàđéš ţö öþàǫüé Ḿéđîà ŵĥéñ ñö ƒƒḿþéĝ/àṽ éñĝîñé îš ŕéšöļṽàƃļé, ŕàţĥéŕ ţĥàñ éŕŕöŕîñĝ.

Ƒļöŵš

Ƃüîļţ-îñ ƒļöŵš (host/flowdef.BuiltInFlows) çöḿþöšé ţĥé éẋîšţîñĝ ţööļš; ţĥé ŕéàđéŕ/ŵŕîţéŕ àŕé ŕüñ-ţîḿé ƃîñđîñĝš (É-04), šö à ƒļöŵ îš ĵüšţ ţĥé ţööļ çĥàîñ:

  • audio-to-subtitles: translate (ţĥé àüđîö ŕéàđéŕ ýîéļđš ţîḿéđ çüéš).
  • video-to-subtitles: translate öṽéŕ ţĥé đéḿüẋéđ çüéš (ƃöţĥ ţĥé šþééçĥ ţŕàçķ àñđ ţĥé ƒŕàḿé-ÖÇŔ ƃļöçķš çàŕŕý ţîḿîñĝ àñçĥöŕš).
  • image-ocr-translate: translate (ŕöüñđ-ţŕîþš ţŕàñšļàţéđ àļţ-ţéẋţ).
kapi run video-to-subtitles -i talk.mp4 -o talk.fr.vtt --target-lang fr

ĻĻḾ ŕéƒîñéḿéñţ

media-refine (core/ai/tools/media_refine.go) îš à çöñƒîđéñçé-ĝàţéđ šöüŕçé-ţŕàñšƒöŕḿ: ļöŵ-çöñƒîđéñçé ŕéçöĝñîžéđ üñîţš àŕé ŕé-ŕéàđ ƃý à çöñƒîĝüŕàƃļé ḿüļţîḿöđàļ ĻĻḾ öṽéŕ à ƃöüñđéđ ḿéđîà šļîçé (ImageSlicer, AudioCutter, VideoClipper). À ŕéƒîñéđ üñîţ ĝéţš ţĥé çàñöñîçàļ OriginLLMRefined ķîñđ (Engine ñàḿéš ţĥé þŕöđüçîñĝ ĻĻḾ, Reference ķééþš ţĥé þŕîöŕ ŕéçöĝñîžéŕ) àñđ à kapi-needs-review ƒļàĝ ŵĥéñ ţĥé ĻĻḾ đîṽéŕĝéš ƒŕöḿ ţĥé öŕîĝîñàļ ĝüéšš.

Đéšķţöþ ṽîéŵîñĝ (kapi-desktop)

Ţĥé DocumentViewer ŕéñđéŕš Šţŕüçţüŕé (ŕöļé/ŕéàđîñĝ-öŕđéŕ ţŕéé) àñđ Ļàýöüţ (þàĝé-šçàļéđ ƃöüñđîñĝ ƃöẋéš) ƒöŕ ĝéöḿéţŕý-ƃéàŕîñĝ šöüŕçéš. Ţĥé ḿüļţîḿöđàļ àđđîţîöñš:

  • Ḿéđîà ţàƃ: àüţö-šĥöŵñ ŵĥéñ ţĥé ţŕéé ĥàš à ḿéđîà ñöđé öŕ ţîḿîñĝ. Îḿàĝé → MediaCanvas (ŕàšţéŕ + ŕöļé-çöļöŕéđ ÖÇŔ öṽéŕļàý, ƃîđîŕéçţîöñàļ ƃöẋ↔ƃļöçķ šéļéçţîöñ); àüđîö → AudioPlayer; ṽîđéö → VideoPlayer (þļàýéŕ + šüƃţîţļé ţîḿéļîñé šýñçéđ ţö ţĥé ţîḿîñĝ çüéš). Çöḿþöñéñţš ļîṽé îñ @neokapi/ui-primitives/preview; ţĥé šĥàŕéđ çööŕđîñàţé/ţîḿéçöđé ḿàţĥ îš îñ geometry.ts / timeline.ts.
  • Ḿéđîà šéŕṽîñĝ: ţĥé ƃàçķéñđ MediaDataURL ŕéàđš à ḿéđîà ñöđé'š ƒîļé àñđ ŕéţüŕñš à data: ÜŔĻ; FilePreview ŕéšöļṽéš éàçĥ ḿéđîà ñöđé àñđ þàššéš resolveMediaUrl ţö ţĥé ṽîéŵéŕ.
  • Öñ-đéḿàñđ éñĝîñé îñšţàļļ: öþéñîñĝ àñ îḿàĝé/àüđîö/ṽîđéö îñšţàļļš ţĥé éñŕîçĥîñĝ éñĝîñé þļüĝîñ (vision / asr / av) ŵĥéñ îţ îšñ'ţ àļŕéàđý àṽàîļàƃļé (ensureMediaEngine), ţĥé éñĝîñé àñàļöĝüé öƒ ensureFormatPlugin.

Ţĥé ContentTree (core/editor) çàŕŕîéš TimingView àñđ MediaView öñ éàçĥ ñöđé šö ţĥé ƒŕöñţéñđ ĝéţš ţĥé ţîḿîñĝ/ḿéđîà đéšçŕîþţöŕ àļöñĝšîđé šţŕüçţüŕé àñđ ĝéöḿéţŕý.