Skip to content

Commit e615168

Browse files
committed
docs: present video editor full page
1 parent e22e51b commit e615168

33 files changed

+1440
-819
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/* stylelint-disable scss/at-extend-no-missing-placeholder */
2+
@use 'bulma/sass/utilities' with (
3+
$class-prefix: 'bulma-'
4+
);
5+
@use 'bulma/sass/utilities/initial-variables' as iv;
6+
@use 'bulma/sass/base';
7+
@use 'bulma/sass/elements/button';
8+
@use 'bulma/sass/elements/block';
9+
@use 'bulma/sass/elements/content';
10+
@use 'bulma/sass/elements/progress';
11+
@use 'bulma/sass/components/dropdown';
12+
@use 'bulma/sass/components/card';
13+
@use 'bulma/sass/components/modal';
14+
@use 'bulma/sass/form/shared';
15+
@use 'bulma/sass/form/tools';
16+
@use 'bulma/sass/form/select';
17+
@use 'bulma/sass/grid/columns';
18+
@use 'bulma/sass/layout/level';
19+
@use 'bulma/sass/themes';
20+
@use 'bulma/sass/helpers/flexbox';
21+
22+
:root {
23+
--bulma-body-overflow-y: auto;
24+
}
25+
26+
.#{iv.$class-prefix}button.overlay {
27+
@extend .#{iv.$class-prefix}is-text;
28+
29+
color: var(--white);
30+
background-color: var(--primary-bg-05);
31+
32+
&:hover {
33+
background-color: var(--black-3);
34+
}
35+
36+
&:active {
37+
background-color: var(--black-3);
38+
}
39+
}
40+
41+
// https://github.com/jgthms/bulma/issues/4003
42+
.#{iv.$class-prefix}level.#{iv.$class-prefix}is-mobile > .#{iv.$class-prefix}level-right {
43+
flex-direction: row;
44+
}
45+
46+
dialog {
47+
padding: 0;
48+
background: transparent;
49+
border-style: none;
50+
}
51+
52+
.#{iv.$class-prefix}modal:open {
53+
@extend .#{iv.$class-prefix}is-active;
54+
}
55+
56+
.#{iv.$class-prefix}modal::backdrop {
57+
@extend .#{iv.$class-prefix}modal-background;
58+
}

docs/.vitepress/theme/custom.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@import './bulma-config.scss';
2+
13
:root {
24
--vp-c-brand-1: #1d6be4;
35
--vp-c-text-1: #212121;

docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"@gltf-transform/functions": "catalog:",
99
"@vueuse/core": "catalog:",
1010
"app-video-editor": "workspace:^",
11+
"bulma": "^1.0.4",
1112
"gltf-ar-effects": "workspace:^",
1213
"media-trimmer": "workspace:^",
1314
"webgl-effects": "workspace:^",

docs/roadmap.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Miru is under active development. Here's what we've done <span class="task-done"
1717

1818
Multi-track editing of video and audio clips with WebGL filters in a simple, mobile-friendly UI.
1919

20-
- ## <span class="task-date">2025-Q3</span> <span class="task-wip" /> Real-time AR effects
20+
- ## <span class="task-date">2025-Q3</span> <span class="task-done" /> Real-time AR effects
2121

2222
Using MediaPipe and Three.js, create a proof of concept with glTF interactivity and face landmark detection extension implementations and create a collection of sample AR effects.
2323

@@ -41,23 +41,23 @@ Miru is under active development. Here's what we've done <span class="task-done"
4141
- Preserve color profile
4242
- Increase browser and codec support with LibAVJS-WebCodecs-Polyfill
4343

44-
- ## <span class="task-date">2025-H2</span> <span class="task-todo" /> Explore using Miru in social media apps
44+
- ## <span class="task-date">2025-H2</span> <span class="task-wip" /> Explore using Miru in social media apps
4545

4646
Our image filters are currently used in Pixelfed. What other apps might benefit from integration with Miru?
4747
- Are the editors and AR effects also a good fit for chat apps like Delta Chat?
4848
- Do users of Loops want a built-in video editor in the web client?
4949
- Is a React Native or NativeScript implementation feasible and worth implementing?
5050

51-
- ## <span class="task-date">2026-H1</span> <span class="task-todo" /> Video editor improvements
51+
- ## <span class="task-date">2026-Q1</span> <span class="task-todo" /> Video editor improvements
5252

53-
Improve the desktop UX, widen input file format suport, add asset management, and add new clip types:
53+
Improve the desktop UX, widen input file format suport, add asset management, and add new content types:
5454
- Text
5555
- Images and stickers
5656
- Subtitles
5757

58-
- ## <span class="task-date">2026-H2</span> <span class="task-todo" /> Collaborative video editing
58+
- ## <span class="task-date">2026-Q1</span> <span class="task-todo" /> Collaborative video editing
5959

60-
Add local-first, real-time collaborative editing to Miru's video editor using CRDTs. Implement project management, invitations, and sharing.
60+
Add local-first collaborative editing to Miru's video editor using CRDTs. Implement project management, invitations, to run on an existing a self-hostable platform like Nextcloud or NextGraph.
6161

6262
- ## <span class="task-date">2026-H2</span> <span class="task-todo" /> AI-powered video editing tools
6363

docs/video-editor.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
---
2-
layout: page
2+
layout: false
33
title: Video editor
44
navbar: false
5-
pageClass: demo-page video-editor-demo-page
65
---
76

87
<script setup lang="ts">
8+
import { useRouter } from 'vitepress'
99
import { VideoEditorApp } from 'app-video-editor'
10+
11+
const router = useRouter()
1012
</script>
1113

12-
<div class="demo-container">
14+
<div >
1315
<ClientOnly>
14-
<VideoEditorApp class="demo-container" />
16+
<VideoEditorApp :onCloseProject="() => router.go('/')" />
1517
</ClientOnly>
1618
</div>

docs/video-trimmer.md

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import { ref, watchEffect } from 'vue'
1111
import { trim } from 'media-trimmer'
1212
import { type LoadInfo, type TrimState } from 'media-trimmer'
1313

14-
const videoEditorContainer = ref<HTMLElement>()
15-
1614
const source = ref('')
1715
const state = ref<TrimState>()
1816

@@ -64,7 +62,7 @@ const onInputFile = (event: Event) => {
6462
}
6563
</script>
6664

67-
<div class="demo-container">
65+
<div class="demo-container video-trimmer-demo">
6866
<media-trimmer
6967
class="block w-full p-0.5rem box-border"
7068
:source="source"
@@ -73,30 +71,35 @@ const onInputFile = (event: Event) => {
7371
:onLoad="onLoad"
7472
:onError="onError"
7573
></media-trimmer>
76-
<progress class="block w-full border-0" :value="progress" max="1" />
77-
<div class="flex items-center">
78-
<input
79-
type="file"
80-
accept="video/*"
81-
:onInput="onInputFile"
82-
/>
83-
<button
84-
type="button"
85-
:onClick="exportVideo"
86-
:disabled="!state"
87-
style="padding: 1rem; border: solid white"
88-
>
89-
Export
90-
</button>
91-
<a
92-
v-if="resultUrl"
93-
:href="resultUrl"
94-
target="_blank"
95-
:download="`trimmed${inputFile ? '-' + inputFile.name : ''}.mp4`"
96-
>
97-
Download
98-
</a>
9974

75+
<progress class="bulma-progress w-full border-0" :value="progress" max="1" />
76+
<div class="bulma-field bulma-is-grouped">
77+
<label :class="['bulma-button', !source && 'bulma-is-primary']">
78+
<div class="bulma-icon i-tabler:upload"></div>
79+
<span > Choose a file </span>
80+
<input type="file" name="video source" accept="video/*" :onInput="onInputFile" hidden />
81+
</label>
82+
<div class="control">
83+
<button
84+
v-if="source"
85+
:class="['bulma-button', !resultUrl && 'bulma-is-primary']"
86+
:onClick="exportVideo"
87+
>
88+
Export
89+
</button>
90+
</div>
91+
<div class="control">
92+
<a
93+
class="bulma-button bulma-is-success"
94+
v-if="resultUrl"
95+
:href="resultUrl"
96+
target="_blank"
97+
:download="`trimmed${inputFile ? '-' + inputFile.name : ''}.mp4`"
98+
>
99+
<div class="icon i-tabler:download"></div>
100+
Download
101+
</a>
102+
</div>
100103
</div>
101104
<video
102105
:src="resultUrl"

package.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
"check": "vue-tsc -b tsconfig.check.json --incremental",
1313
"lint:markdown": "markdownlint --ignore-path .gitignore --ignore '**/CHANGELOG.md' '**/*.md'",
1414
"lint:prettier": "prettier --check '**/*.{ts,js,tsx,jsx,cjs,vue,md,html,yaml,yml,json}'",
15-
"lint": "stylelint '**/*.css' && pnpm run lint:markdown && pnpm eslint --quiet && pnpm run lint:prettier",
16-
"lint:fix": "stylelint --fix '**/*.css' && pnpm run lint:markdown --fix && pnpm eslint --quiet --fix && pnpm lint:prettier --write",
15+
"lint": "stylelint '**/*.{css,scss}' && pnpm run lint:markdown && pnpm eslint --quiet && pnpm run lint:prettier",
16+
"lint:fix": "stylelint --fix '**/*.{css,scss}' && pnpm run lint:markdown --fix && pnpm eslint --quiet --fix && pnpm lint:prettier --write",
1717
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
1818
"prepare": "husky",
1919
"docs:dev": "vitepress dev docs",
@@ -107,14 +107,15 @@
107107
"rollup-plugin-glob-import": "^0.5.0",
108108
"rollup-plugin-glsl-optimize": "^1.0.4",
109109
"rollup-plugin-postcss": "^4.0.2",
110+
"sass-embedded": "^1.92.0",
110111
"semver": "^7.7.2",
111112
"sharp": "^0.34.3",
112113
"stats.js": "catalog:",
113114
"stylelint": "^16.23.1",
114115
"stylelint-config-css-modules": "^4.5.1",
115116
"stylelint-config-html": "^1.1.0",
116117
"stylelint-config-recess-order": "^7.2.0",
117-
"stylelint-config-standard": "^38.0.0",
118+
"stylelint-config-standard-scss": "^16.0.0",
118119
"stylelint-order": "^7.0.0",
119120
"stylelint-prettier": "^5.0.3",
120121
"taze": "^19.4.0",
@@ -129,7 +130,7 @@
129130
"vite": "6.1.0",
130131
"vite-bundle-analyzer": "^0.23.0",
131132
"vite-plugin-remote-assets": "^2.1.0",
132-
"vitepress": "2.0.0-alpha.2",
133+
"vitepress": "2.0.0-alpha.12",
133134
"vue-tsc": "^3.0.6"
134135
},
135136
"lint-staged": {
@@ -142,7 +143,7 @@
142143
"markdownlint --fix",
143144
"prettier --check --write"
144145
],
145-
"**/*.css": "stylelint --fix",
146+
"**/*.{css,scss}": "stylelint --fix",
146147
"**/*.(yaml|yml|json)": "prettier --check --write"
147148
},
148149
"browserslist": [
@@ -154,7 +155,8 @@
154155
"glsl-tokenizer": "patches/glsl-tokenizer.patch",
155156
"libavjs-webcodecs-polyfill": "patches/libavjs-webcodecs-polyfill.patch",
156157
"videocontext": "patches/videocontext.patch",
157-
"@mediapipe/tasks-vision": "patches/@mediapipe__tasks-vision.patch"
158+
"@mediapipe/tasks-vision": "patches/@mediapipe__tasks-vision.patch",
159+
"vitepress": "patches/vitepress.patch"
158160
},
159161
"onlyBuiltDependencies": [
160162
"esbuild",
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<!-- markdownlint-disable first-line-heading -->
2+
<div class="bulma-modal-card-body">
3+
<slot name="header" title="Videoeditor"></slot>
4+
5+
<div class="bulma-content">
6+
<p>
7+
Hallo, dies ist ein Freie-Software- und Open-Source-Online-Videoeditor. Schau es dir an, und gib uns Feedback auf <a target="_blank"
8+
href="https://discord.gg/mmwMvf4Pnv">Discord</a>, <a target="_blank"
9+
href="https://codeberg.org/miru-media/miru">Codeberg</a> oder <a target="_blank"
10+
href="https://github.com/miru-media/miru">Github</a>.
11+
</p>
12+
<p>
13+
<strong>Vorsicht: Er handelt sich noch um Alpha-Software, daher kann es passieren, dass mit einem Update deine Edits gelöscht werden!</strong>
14+
</p>
15+
<p>Der Editor ermöglicht dir:</p>
16+
<ul>
17+
<li>✅ Mehrere Videoclips hinzufügen</li>
18+
<li>✅ Audio-Dateien hinzufügen</li>
19+
<li>✅ Clips schneiden und trimmen</li>
20+
<li>✅ Filtereffekte anwenden</li>
21+
<li>✅ Exportieren als MP4 oder Webm</li>
22+
</ul>
23+
<p>Wir arbeiten noch an:</p>
24+
<ul>
25+
<li>Overlays von Bildern und Text</li>
26+
<li>Größenänderung und Positionierung</li>
27+
<li>Asset-Bibliothek</li>
28+
<li>Kollaboratives Editieren</li>
29+
<li>Übergänge und Crossfade-Effekte</li>
30+
<li>Untertitlen</li>
31+
<li>Keyframe-Animationen</li>
32+
</ul>
33+
</div>
34+
</div>
35+
36+
<slot name="confirm" text="Okay, los gehts!"></slot>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<!-- markdownlint-disable first-line-heading -->
2+
<div class="bulma-modal-card-body">
3+
<slot name="header" title="video editor"></slot>
4+
5+
<div class="bulma-content">
6+
<p>
7+
Hi and welcome to our free and open source online video editor.
8+
Try it out and send us feedback on <a target="_blank"
9+
href="https://discord.gg/mmwMvf4Pnv">Discord</a>, <a target="_blank"
10+
href="https://codeberg.org/miru-media/miru">Codeberg</a>, or <a target="_blank"
11+
href="https://github.com/miru-media/miru">Github</a>.
12+
</p>
13+
<p>
14+
<strong>It's still alpha software and you might lose some of your work after an update!</strong> That said, the editor lets you:
15+
</p>
16+
<ul>
17+
<li>✅ Add multiple video clips</li>
18+
<li>✅ Add audio files</li>
19+
<li>✅ Split and trim</li>
20+
<li>✅ Add filter effects</li>
21+
<li>✅ Export to MP4 or Webm</li>
22+
</ul>
23+
<p>We're still working on:</p>
24+
<ul>
25+
<li>Image and text overlays</li>
26+
<li>Resizing and positioning on the canvas</li>
27+
<li>Asset library</li>
28+
<li>Collaborative editing</li>
29+
<li>Transitions crossfade effects</li>
30+
<li>Subtitles</li>
31+
<li>Keyframe animations</li>
32+
</ul>
33+
</div>
34+
</div>
35+
36+
<slot name="confirm" text="Okay, let's go!"></slot>

0 commit comments

Comments
 (0)