Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
c4d4426
feat(i18n): add Norwegian language support
TheFrostBunny Jan 29, 2026
1a7ea05
feat: add czech language
nwvh Feb 5, 2026
6d1974a
feat(i18n): update Norwegian language translations
TheFrostBunny Feb 8, 2026
5ef8b4f
fix: og tags fix?
JovannMC Feb 9, 2026
1c5cd9e
feat: job retry message
JovannMC Feb 9, 2026
9332c95
feat: apng & video to webp support
JovannMC Feb 11, 2026
24e1e0c
fix: update Turkish translations
ofadev Feb 11, 2026
1679910
fix: fix file name conflicts
JovannMC Feb 11, 2026
ca8a034
feat: webp to video support
JovannMC Feb 11, 2026
a4aaae6
Add files via upload
Kamiliusz1206 Feb 11, 2026
835efd0
Update settings.json
Kamiliusz1206 Feb 11, 2026
2127692
Update index.svelte.ts
Kamiliusz1206 Feb 11, 2026
4539051
fix: add missing env variable to compose
JovannMC Feb 11, 2026
da39283
fix: better privacy section visibility behaviour
JovannMC Feb 11, 2026
06d7cfa
fix: don't use naturalWidth/Height
JovannMC Feb 11, 2026
6846543
Fix mistakes in pl.json
Kamiliusz1206 Feb 11, 2026
23e2601
fix: use cache api for downloads above 2gb
JovannMC Feb 11, 2026
039ca40
Final fixes to pl.json
Kamiliusz1206 Feb 12, 2026
30bbb76
feat: start settings modal component
JovannMC Feb 12, 2026
d540947
fix: clean up/use FancyInput everywhere
JovannMC Feb 13, 2026
575f444
feat: start how settings is defined
JovannMC Feb 13, 2026
1ef2639
fix: better checkbox & settings behaviour
JovannMC Feb 14, 2026
3e4ff6b
feat: more conversion settings
JovannMC Feb 15, 2026
b32ec67
fix: forgor async oops
JovannMC Feb 15, 2026
33cd998
fix: update packages, fix local props state ref
JovannMC Feb 15, 2026
7fcbdcd
feat: imagemagick settings logic
JovannMC Feb 15, 2026
f797a6f
fix: update Turkish translations
ofadev Feb 17, 2026
4fca8a9
feat: ffmpeg/audio settings logic
JovannMC Feb 17, 2026
f129682
fix: open native category first
JovannMC Feb 18, 2026
892db30
feat: start vertd settings
JovannMC Feb 19, 2026
c9192fa
feat: confirm download for deletion
JovannMC Feb 19, 2026
1761227
fix: allow settingsmodal scroll
JovannMC Feb 19, 2026
1c65d37
fix: disable transparency option on jpeg
JovannMC Feb 19, 2026
e9db7a9
fix: proper dropdown option labelling
JovannMC Feb 19, 2026
e612146
fix: dropdown menu fixes
JovannMC Feb 19, 2026
3dbb80a
fix: build failure
JovannMC Feb 20, 2026
ff7456b
fix: all categories/formats fallback
JovannMC Feb 21, 2026
6980d6d
feat: send custom settings to vertd
JovannMC Feb 23, 2026
7f888e3
feat: preliminary mediabunny (sorry maya)
not-nullptr Feb 26, 2026
3c5a01f
fix: vertd custom settings
JovannMC Feb 27, 2026
b35c863
fix: default vertd speed slider
JovannMC Feb 27, 2026
9e58c69
feat: mediabunny new formats, fix bugs
JovannMC Feb 27, 2026
ffb6ef8
feat: mediabunny progress and cancel
JovannMC Feb 27, 2026
1bf93d9
feat: additional coders
JovannMC Mar 1, 2026
1aac50a
feat: codec compatibility object
JovannMC Mar 1, 2026
343fb34
Merge branch 'nullptr/mediabunny-v2' into maya/conversion-things
JovannMC Mar 1, 2026
96da202
feat: use & rework findConverters()
JovannMC Mar 6, 2026
9164dc8
fix: formatdropdown logic rework & bug fixes
JovannMC Mar 6, 2026
9b0470e
feat: choose converter, clean up logic
JovannMC Mar 8, 2026
95210e8
chore: re-organize structure a bit
JovannMC Mar 9, 2026
da58035
feat: CTA to try next converter
JovannMC Mar 9, 2026
55b67ec
fix: cleaner and better converter select logic
JovannMC Mar 10, 2026
9201f1e
fix: more bug fixes
JovannMC Mar 10, 2026
fb1bd52
feat: mediabunny video/audio codec, add custom inputs, show discarded…
JovannMC Mar 10, 2026
ed851d8
chore: clean up logging
JovannMC Mar 10, 2026
d18fe38
feat: add "partially ready" status
JovannMC Mar 10, 2026
ba6507b
feat: generic server upload warning
JovannMC Mar 11, 2026
1573bda
chore: update VERT language on local video conversion
JovannMC Mar 11, 2026
8360970
fix: better requiredConverters handling
JovannMC Mar 11, 2026
8e7b8ef
fix: page load crashes on iOS (and older phones)
JovannMC Mar 11, 2026
6b01ba3
fix: oops improper store access for previous fix
JovannMC Mar 11, 2026
c26ae45
chore: more language updates
JovannMC Mar 11, 2026
f26cd7e
fix: better mediabunny init status
JovannMC Mar 11, 2026
2c66718
feat: global settings modal, logging fixes
JovannMC Mar 11, 2026
290c6d2
fix: allow conversions if 1/(x) isn't ready
JovannMC Mar 11, 2026
f19f209
fix: webcodecs toast visible on initial load
JovannMC Mar 12, 2026
0d15de6
fix: better many files conversion panel handling
JovannMC Mar 12, 2026
d9b29e7
chore: subtitle shortened
JovannMC Mar 12, 2026
2e34c36
feat: video/audio codec for vertd
JovannMC Mar 16, 2026
bbc7768
fix: handle envelope response
JovannMC Mar 17, 2026
47734ee
fix: more transparent cardd blur
JovannMC Mar 18, 2026
7ebc535
feat: resolution for images
JovannMC Mar 20, 2026
f038dfc
feat: ping servers instead of ip location (#240)
JovannMC Mar 20, 2026
85f4ead
fix: forgor to sanitize
JovannMC Mar 20, 2026
8b965c4
feat: more file name format options (#241)
JovannMC Mar 20, 2026
4db3c69
feat: actually handle image resolution setting
JovannMC Mar 20, 2026
8729584
chore: update packages, fix svelte errors
JovannMC Mar 20, 2026
d3aeb9b
fix: code review suggestions
JovannMC Mar 20, 2026
75e9745
fix: large file fixes
JovannMC Mar 21, 2026
8edd462
fix: cancellation if settings empty
JovannMC Mar 21, 2026
e01c7a4
feat: feedback for downloading zip
JovannMC Mar 21, 2026
34a1a5d
feat: toast if file is too large for vertd
JovannMC Mar 22, 2026
eb30138
feat: scroll selected option into view for dropdown, highlight select…
JovannMC Mar 22, 2026
d8e1526
Merge branch 'pr/222' into maya/conversion-things
JovannMC Mar 25, 2026
299b629
Merge branch 'pr/223' into maya/conversion-things
JovannMC Mar 25, 2026
10cb4d8
Merge branch 'pr/228' into maya/conversion-things
JovannMC Mar 25, 2026
6f9106c
Merge branch 'pr/229' into maya/conversion-things
JovannMC Mar 25, 2026
2cc2325
feat: add norwegian, czech, polish languages
JovannMC Mar 25, 2026
10b5eda
chore: holy language re-organization and migration
JovannMC Mar 25, 2026
5241b2c
fix: dropdown scrolling with browser
JovannMC Mar 25, 2026
f8f54da
fix: stop uploading on vertd cancel
JovannMC Mar 28, 2026
c505aef
fix: download fails
JovannMC May 3, 2026
a739dfb
fix: hide incompatible animated image settings
JovannMC May 3, 2026
cf77cf6
feat: vertd custom headers (#180)
JovannMC May 3, 2026
343d5f2
feat: ui of image sequence/fps in format dropdown
JovannMC May 4, 2026
95ab509
feat: image sequence & fps in dropdown, fixes
JovannMC May 5, 2026
f210bb8
feat: image sequences
JovannMC May 9, 2026
2f30c45
fix: transparent images issues
JovannMC May 10, 2026
8850b25
fix: broken image sequences
JovannMC May 12, 2026
789637d
refactor: move converters into its own folders
JovannMC May 14, 2026
2d12ab4
fix: don't close dropdown on select
JovannMC May 15, 2026
35949a6
fix: few bugs with image sequences
JovannMC May 25, 2026
c139eae
refactor: run prettier
JovannMC May 25, 2026
ed9e18c
fix: ux clarity
JovannMC May 25, 2026
35ccc6f
fix: single image/size ico conversion memory leak (#252)
JovannMC May 25, 2026
ee81d0d
feat: encode multiple images for .ico
JovannMC May 27, 2026
7e16f9d
feat: from DICOM, .env.example update
JovannMC May 30, 2026
002730c
fix: proper dicom conversion
JovannMC May 30, 2026
efdc96e
fix: defer loading special handlers
JovannMC May 30, 2026
b6497de
feat: add qoi and qoa formats & refactor ffmpeg a bit
JovannMC May 30, 2026
84c36aa
feat: settings auto-adjustment, audio fixes
JovannMC Jun 1, 2026
058f16a
fix: imagemagick format conversion failures
JovannMC Jun 4, 2026
1258544
fix: rest of imagemagick formats
JovannMC Jun 4, 2026
0353f7c
fix: audio to video conversion fixes
JovannMC Jun 4, 2026
bcbb5e8
chore: update packages
JovannMC Jun 5, 2026
538e5f2
fix: audio file thumbnails not working
JovannMC Jun 5, 2026
120f6f4
fix: proper fix to audio thumbnails
JovannMC Jun 5, 2026
a5b89cf
fix: fix mpg, mpeg, vob, and amv conversions
JovannMC Jun 8, 2026
2345999
Merge branch 'main' into maya/conversion-things
JovannMC Sep 7, 2026
57b6c94
fix: complete merge and fix spanish translation
JovannMC Sep 7, 2026
a36a70f
chore: update packages
JovannMC Sep 7, 2026
3da3c2d
Merge branch 'main' into maya/conversion-things
JovannMC Sep 10, 2026
257920a
refactor: clear eslint/prettier/svelte-check warnings
JovannMC Sep 10, 2026
a977621
fix: detect file type
JovannMC Sep 10, 2026
2a9a8c4
feat: ogx and gxf support
JovannMC Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ PUB_VERTD_URL=https://vertd.vert.sh
PUB_DISABLE_ALL_EXTERNAL_REQUESTS=false

# Set to true to disable blocking video conversions of an uploaded file when repeated failures
# occur within an hour. Useful for local deployments where secure context (HTTPS) may not be
# available - required for calculating file hashes of videos to block temporarily.
PUB_DISABLE_FAILURE_BLOCKS=false
# occur within an hour. Setting to false is only recommended for production deployments where
# secure context (HTTPS) is available, which is required for calculating file hashes of videos to block temporarily.
PUB_DISABLE_FAILURE_BLOCKS=true

# Stripe donation settings
# Please keep these values the same, they support VERT's development!
Expand Down
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
package-lock.json
pnpm-lock.yaml
yarn.lock

src/lib/paraglide
2 changes: 1 addition & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"tabWidth": 4,
"singleQuote": false,
"plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}
6 changes: 2 additions & 4 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
{
"recommendations": [
"inlang.vs-code-extension"
]
}
"recommendations": ["inlang.vs-code-extension"]
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ VERT is built in Svelte and TypeScript.
- Conversion settings
- User-friendly interface built with Svelte

<sup>\* Non-local video conversion is available with our official instance, but the [daemon](https://github.com/VERT-sh/vertd) is easily self-hostable to maintain privacy and fully local functionality.</sup>
<sup>\* Local video conversion in-browser is supported, but some conversion may require server-side processing. Server video conversion is available with our official instance, but the [daemon](https://github.com/VERT-sh/vertd) is easily self-hostable to maintain privacy and fully local functionality.</sup>

## Documentation

Expand Down
580 changes: 293 additions & 287 deletions bun.lock

Large diffs are not rendered by default.

33 changes: 17 additions & 16 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
services:
vert:
container_name: vert
image: ghcr.io/vert-sh/vert:latest
build:
context: .
args:
PUB_HOSTNAME: ${PUB_HOSTNAME:-localhost:5173}
PUB_PLAUSIBLE_URL: ${PUB_PLAUSIBLE_URL:-}
PUB_ENV: ${PUB_ENV:-production}
PUB_DISABLE_ALL_EXTERNAL_REQUESTS: ${PUB_DISABLE_ALL_EXTERNAL_REQUESTS:-false}
PUB_VERTD_URL: ${PUB_VERTD_URL:-}
PUB_DONATION_URL: ${PUB_DONATION_URL:-https://donations.vert.sh}
PUB_STRIPE_KEY: ${PUB_STRIPE_KEY:-pk_live_51TlrPaFTPjkhEGBSu5Kwy5jJQYxcX5yUUHXiH5g7Xzvb0NKzDqbooc126HjlW35uUkfAgQN2ruEoCuyQynoxpKaA00ojFgQ116}
restart: unless-stopped
ports:
- ${PORT:-3000}:80
vert:
container_name: vert
image: ghcr.io/vert-sh/vert:latest
build:
context: .
args:
PUB_HOSTNAME: ${PUB_HOSTNAME:-localhost:5173}
PUB_PLAUSIBLE_URL: ${PUB_PLAUSIBLE_URL:-}
PUB_ENV: ${PUB_ENV:-production}
PUB_DISABLE_ALL_EXTERNAL_REQUESTS: ${PUB_DISABLE_ALL_EXTERNAL_REQUESTS:-false}
PUB_VERTD_URL: ${PUB_VERTD_URL:-https://vertd.vert.sh}
PUB_DONATION_URL: ${PUB_DONATION_URL:-https://donations.vert.sh}
PUB_STRIPE_KEY: ${PUB_STRIPE_KEY:-pk_live_51TlrPaFTPjkhEGBSu5Kwy5jJQYxcX5yUUHXiH5g7Xzvb0NKzDqbooc126HjlW35uUkfAgQN2ruEoCuyQynoxpKaA00ojFgQ116}
PUB_DISABLE_FAILURE_BLOCKS: ${PUB_DISABLE_FAILURE_BLOCKS:-false}
restart: unless-stopped
ports:
- ${PORT:-3000}:80
3 changes: 2 additions & 1 deletion docs/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ Yes! If you would prefer VERT to not make any requests to external services (vid
The only external request VERT will make with this option is to `cdn.jsdelivr.net`, which is used to download FFmpeg's WebAssembly build.

### What libraries does VERT use?
VERT uses FFmpeg for audio and video conversion, imagemagick for images and Pandoc for documents. A big thanks to them for maintaining such excellent libraries for so many years.

VERT uses FFmpeg for audio and video conversion, imagemagick for images and Pandoc for documents. A big thanks to them for maintaining such excellent libraries for so many years.
5 changes: 4 additions & 1 deletion docs/GETTING_STARTED.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,20 @@ This file covers how to get started with VERT.
### Prerequisites

Make sure you have the following installed:

- [Bun](https://bun.sh/)

### Installation

First, clone the repository:

```sh
git clone https://github.com/VERT-sh/VERT
cd VERT/
```

Install dependencies:

```sh
bun i
```
Expand All @@ -42,4 +45,4 @@ This will build the site to the `build` folder. You should then use a web server

### Using Docker

Check the dedicated [Docker](./DOCKER.md) page.
Check the dedicated [Docker](./DOCKER.md) page.
4 changes: 2 additions & 2 deletions docs/VIDEO_CONVERSION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

This file covers how video conversion works when using VERT.

On VERT, video uploads to a server for processing by default. This is because video conversion is hard to do in a browser as it uses a lot of resources, and will end up running very slowly (if it even works at all).
On VERT, video processing is done locally in your browser whenever possible using [Mediabunny](https://mediabunny.dev). However, some conversions may require server-side processing if it's unsupported or too slow to do it in the browser for some reason.

Our answer to this is [`vertd`](https://github.com/VERT-sh/vertd), which is a simple FFmpeg wrapper built in Rust. If you don't understand all that technical jargon, it basically allows you to convert videos using the full capacity of your computer, which results in much faster conversion. It runs on your computer (or a server somewhere, if you know what you're doing), and the VERT web interface reaches out to it in order to convert your videos.
Server-side processing is done through [`vertd`](https://github.com/VERT-sh/vertd), which is a simple FFmpeg wrapper built in Rust. If you don't understand all that technical jargon, it basically allows you to convert videos using the full capacity of your computer, which results in more conversions supported and being much faster. It runs on your computer (or a server somewhere, if you know what you're doing), and the VERT web interface reaches out to it in order to convert your videos, if it requests for it.

We host an official instance of [`vertd`](https://github.com/VERT-sh/vertd) so you do not have to host it yourself for convenience, but considering you're here, you probably want to host it for yourself. Essentially:

Expand Down
39 changes: 23 additions & 16 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,40 @@
import prettier from 'eslint-config-prettier';
import js from '@eslint/js';
import svelte from 'eslint-plugin-svelte';
import globals from 'globals';
import ts from 'typescript-eslint';
import prettier from "eslint-config-prettier";
import js from "@eslint/js";
import svelte from "eslint-plugin-svelte";
import globals from "globals";
import ts from "typescript-eslint";

export default ts.config(
js.configs.recommended,
...ts.configs.recommended,
...svelte.configs['flat/recommended'],
...svelte.configs["flat/recommended"],
prettier,
...svelte.configs['flat/prettier'],
...svelte.configs["flat/prettier"],
{
languageOptions: {
globals: {
...globals.browser,
...globals.node
}
}
...globals.node,
},
},
},
{
files: ['**/*.svelte'],
files: ["**/*.svelte"],

languageOptions: {
parserOptions: {
parser: ts.parser
}
}
parser: ts.parser,
},
},
},
{
ignores: ['build/', '.svelte-kit/', 'dist/']
}
ignores: ["build/", ".svelte-kit/", "dist/", "src/lib/paraglide/"],
},
{
files: ["**/*.ts", "**/*.svelte.ts", "**/*.svelte"],
rules: {
"svelte/no-at-html-tags": "off",
"svelte/valid-compile": "off",
},
},
);
Loading
Loading