Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa1fe8ab21 | |||
| 30d0c72338 | |||
| c2688bbcb0 | |||
| 38d003341f | |||
| 66aef503e3 |
@@ -0,0 +1,20 @@
|
||||
# Strip upstream (ArtCraft / Discord) branding. Run: perl tools/craft-skills/skills/debrand/debrand.pl . (--check in CI)
|
||||
delete docs/brand
|
||||
# MIT/Apache texts stay verbatim. The copyright holder line stays everywhere (legal requirement).
|
||||
keep ^(LICENSE-(MIT|APACHE)|\.debrand)$
|
||||
dropline ^crates/ui-egui/src/i18n/.*\.tsv$ :: [^#\n][^\n]*\t[^\n]*(?:ArtCraft|Discord|getartcraft)
|
||||
dropline ^ATTRIBUTION\.md$ :: \|\s*`docs/brand/
|
||||
sub (?s)## First-party brand marks\n.*?(?=## Third-party source code) =>
|
||||
sub (?s)\nThe ArtCraft name, wordmark and logos in docs/brand/.*?LICENSE-brand\.txt\.\n =>
|
||||
sub drawn by the owner in ArtCraft => drawn by the owner by hand
|
||||
sub in ArtCraft, then => by hand, then
|
||||
sub drew it in ArtCraft as => drew it by hand as
|
||||
sub owner's ArtCraft drawing => owner's drawing
|
||||
sub ArtCraft,[ ]? =>
|
||||
sub ArtCraft、 =>
|
||||
sub https://getartcraft\.com/apps/filmcraft => https://github.com/storytold/filmcraft
|
||||
sub https://discord\.gg/artcraft => https://github.com/storytold/filmcraft/issues
|
||||
forbid (?i)artcraft(?! Team and the FilmCraft contributors)
|
||||
forbid (?i)discord
|
||||
sub Help menu, About and Discord links => Help menu and About links
|
||||
sub \(artcraft#2093\) => (#2093)
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "tools/craft-skills"]
|
||||
path = tools/craft-skills
|
||||
url = https://git.marcospaulo.dev.br/storytold/craft-skills.git
|
||||
@@ -86,12 +86,8 @@ reproduce an image (for example, point lists traced from someone else's icon).
|
||||
`crates/media`, procedural looks in `crates/render`) are original work under the project licence
|
||||
and are listed in `ATTRIBUTION.md`.
|
||||
7. **When in doubt, leave it out** and draw or generate it yourself.
|
||||
8. **The one exception: first-party ArtCraft brand marks.** The ArtCraft name and logos in `docs/brand/`
|
||||
are trademarks of the ArtCraft Team, not open source, usable only unmodified and only in the context of
|
||||
FilmCraft under `docs/brand/LICENSE-brand.txt`; forks and modified versions must remove them. They still
|
||||
need a sidecar and an `ATTRIBUTION.md` row (licence `LicenseRef-ArtCraft-Trademark`). No other
|
||||
non-open asset is allowed, and this exception never covers third-party marks (Adobe, Discord, GitHub
|
||||
and other logos stay out; draw a generic icon instead).
|
||||
8. **No non-open assets.** Third-party marks (Adobe, GitHub and other logos) stay out; draw a generic icon
|
||||
instead.
|
||||
9. **Fonts live in [storytold/craft-fonts](https://github.com/storytold/craft-fonts), never in this
|
||||
repo.** Don't commit new font files (the small Latin UI fonts already in `assets/fonts/` stay). A
|
||||
font FilmCraft needs is added to craft-fonts, which the app reads through the optional build input
|
||||
|
||||
@@ -30,24 +30,24 @@ iconography, images or other Adobe assets; open licences only; every asset attri
|
||||
| `docs/images/filmcraft-scopes.png` | FilmCraft contributors | Original work: FilmCraft UI crop (scopes of a Charade (1963) frame, public domain) | MIT OR Apache-2.0 |
|
||||
| `docs/images/filmcraft-effects.png` | FilmCraft contributors | Original work: FilmCraft screenshot crop; NASA Earth Views (US Government work, public domain) | MIT OR Apache-2.0; footage public domain |
|
||||
| `docs/images/filmcraft-timeline.png` | FilmCraft contributors | Original work: FilmCraft UI crop; thumbnails from Night of the Living Dead (1968) and Carnival of Souls (1962), CC0 Chopin waveform | MIT OR Apache-2.0; film frames public domain |
|
||||
| `assets/app-icon/filmcraft.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; canonical vector | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; canonical vector | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `packaging/macos/dmg/background.svg` | @XusBadia | Original work: FilmCraft macOS DMG window background, derived from the FilmCraft app icon (`assets/app-icon/filmcraft.svg`); rendered to `background.tiff` by `packaging/macos/dmg/generate.py` | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) |
|
||||
| `packaging/macos/dmg/background.tiff` | @XusBadia | Rendered from `packaging/macos/dmg/background.svg` by `packaging/macos/dmg/generate.py` | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) |
|
||||
| `assets/app-icon/filmcraft-small.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; lighter vector | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft-1024.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; 1024 px render | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft-macos-512.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; macOS runtime Dock icon (512 px) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft.icns` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; macOS .icns | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft.ico` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Windows .ico (16-256 px) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 16 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 24 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 32 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 48 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 64 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 128 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 256 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme 512 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.filmcraft.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; Linux hicolor theme scalable | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `apps/filmcraft-web/web/favicon.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner in ArtCraft and vectorised; 128 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft-small.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; lighter vector | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft-1024.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; 1024 px render | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft-macos-512.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; macOS runtime Dock icon (512 px) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft.icns` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; macOS .icns | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/filmcraft.ico` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Windows .ico (16-256 px) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 16 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 24 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 32 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 48 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 64 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 128 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 256 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.filmcraft.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme 512 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.filmcraft.svg` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; Linux hicolor theme scalable | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
| `apps/filmcraft-web/web/favicon.png` | Brandon Thomas (FilmCraft owner) | Original work: FilmCraft app icon (owl with ear tufts), drawn by the owner by hand and vectorised; 128 px | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
|
||||
|
||||
## Golden test images
|
||||
|
||||
@@ -129,24 +129,6 @@ carry each font's licence as `OFL-<family>.txt`.
|
||||
| Shippori Mincho Regular (FONTDASU) | Japanese fallback for serif titles (native builds) | OFL-1.1 |
|
||||
| BIZ UDMincho Regular (Morisawa) | Japanese fallback for serif titles (native builds) | OFL-1.1 |
|
||||
|
||||
## First-party brand marks
|
||||
|
||||
The ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team. They are not open source and
|
||||
are not covered by the project licence; they may be used only unmodified and only in the context of
|
||||
FilmCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt). Forks and modified versions must
|
||||
remove them (AGENTS.md §1.8).
|
||||
|
||||
| File | Author | Source | Licence |
|
||||
|---|---|---|---|
|
||||
| `docs/brand/artcraft-logo-white.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark, light ink for dark backgrounds) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-logo-white.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark, light ink for dark backgrounds) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-logo.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark (symbol + "ARTCRAFT"), dark ink for light backgrounds) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-logo.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark (symbol + "ARTCRAFT"), dark ink for light backgrounds) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-mark-black.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), black) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-mark-black.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), black) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-mark.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), blue) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
| `docs/brand/artcraft-mark.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), blue) | ArtCraft trademark, not open source; `docs/brand/LICENSE-brand.txt` (not MIT/Apache) |
|
||||
|
||||
## Third-party source code
|
||||
|
||||
Source files that are transcribed from third-party code rather than written from scratch. Each keeps
|
||||
|
||||
@@ -1014,7 +1014,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "craft-ui"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/storytold/craft-libs?rev=5c874d51eeb3de70e735c8ce87a59a7dedd47675#5c874d51eeb3de70e735c8ce87a59a7dedd47675"
|
||||
source = "git+https://git.marcospaulo.dev.br/masi/craft-libs?rev=22544b6d619d4f16779b8bdfa3f0b642a86fc065#22544b6d619d4f16779b8bdfa3f0b642a86fc065"
|
||||
dependencies = [
|
||||
"egui",
|
||||
"serde",
|
||||
@@ -1674,7 +1674,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"arboard",
|
||||
"chrono",
|
||||
@@ -1707,7 +1707,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-aac"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -1717,7 +1717,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-ac3"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
"thiserror 2.0.21",
|
||||
@@ -1725,7 +1725,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-apv"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -1735,14 +1735,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-audio-dsp"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-automation"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"filmcraft-engine",
|
||||
@@ -1758,7 +1758,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-av1"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -1769,21 +1769,21 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-avi"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-bitstream"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"proptest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-captions"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"filmcraft-project",
|
||||
@@ -1796,11 +1796,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-cfb"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-cli"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-automation",
|
||||
"filmcraft-codecs",
|
||||
@@ -1822,7 +1822,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-codecs"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-aac",
|
||||
"filmcraft-ac3",
|
||||
@@ -1860,7 +1860,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-color"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"proptest",
|
||||
"serde",
|
||||
@@ -1868,7 +1868,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-dng"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-dng",
|
||||
"rayon",
|
||||
@@ -1877,7 +1877,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-dnx"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -1887,7 +1887,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-edit"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-geom",
|
||||
"filmcraft-media",
|
||||
@@ -1900,7 +1900,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-engine"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-audio-dsp",
|
||||
"filmcraft-captions",
|
||||
@@ -1934,7 +1934,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-export"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-aac",
|
||||
"filmcraft-apv",
|
||||
@@ -1965,7 +1965,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-flac"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -1974,7 +1974,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-format"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-media",
|
||||
"filmcraft-project",
|
||||
@@ -1987,7 +1987,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-frame"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"filmcraft-time",
|
||||
@@ -1997,7 +1997,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-geom"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"proptest",
|
||||
"serde",
|
||||
@@ -2005,7 +2005,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-golden"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"filmcraft-frame",
|
||||
@@ -2022,7 +2022,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-gpu"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"filmcraft-export",
|
||||
@@ -2041,7 +2041,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-h264"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -2051,7 +2051,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-h264enc"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -2061,7 +2061,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-hevc"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -2071,7 +2071,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-interchange"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-cfb",
|
||||
"filmcraft-color",
|
||||
@@ -2088,7 +2088,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-isobmff"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -2099,7 +2099,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-matroska"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
"serde_json",
|
||||
@@ -2107,7 +2107,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-media"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"filmcraft-dng",
|
||||
@@ -2123,7 +2123,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-mpa"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -2132,7 +2132,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-mpeg2v"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
"rayon",
|
||||
@@ -2141,7 +2141,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-mpegts"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
"thiserror 2.0.21",
|
||||
@@ -2149,28 +2149,28 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-mxf"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-ogg"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-opus"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-platform"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-codecs",
|
||||
@@ -2196,7 +2196,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-project"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"filmcraft-geom",
|
||||
@@ -2210,7 +2210,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-prores"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"filmcraft-testkit",
|
||||
@@ -2220,7 +2220,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-render"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-audio-dsp",
|
||||
"filmcraft-captions",
|
||||
@@ -2240,7 +2240,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-scopes"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"serde",
|
||||
@@ -2249,7 +2249,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-speech"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"candle-core",
|
||||
"candle-nn",
|
||||
@@ -2267,14 +2267,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-testkit"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"png",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-text"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-color",
|
||||
"harfrust",
|
||||
@@ -2286,7 +2286,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-time"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"proptest",
|
||||
"serde",
|
||||
@@ -2294,7 +2294,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-tts"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"candle-core",
|
||||
"candle-nn",
|
||||
@@ -2308,7 +2308,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-tts-text"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"thiserror 2.0.21",
|
||||
@@ -2316,7 +2316,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-ui-egui"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"cpu-time",
|
||||
"craft-ui",
|
||||
@@ -2355,14 +2355,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-vp8"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-vp9"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-bitstream",
|
||||
"rayon",
|
||||
@@ -2371,7 +2371,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filmcraft-web"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"eframe",
|
||||
"egui",
|
||||
@@ -7396,7 +7396,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
|
||||
|
||||
[[package]]
|
||||
name = "xtask"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
dependencies = [
|
||||
"filmcraft-testkit",
|
||||
"serde_json",
|
||||
|
||||
@@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"]
|
||||
default-members = ["crates/*", "apps/*", "xtask"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
edition = "2024"
|
||||
license = "MIT OR Apache-2.0"
|
||||
rust-version = "1.95"
|
||||
@@ -73,7 +73,7 @@ roxmltree = "0.21"
|
||||
|
||||
# ui
|
||||
# Shared frontend components; keep this dependency above the engine boundary.
|
||||
craft-ui = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "5c874d51eeb3de70e735c8ce87a59a7dedd47675", features = ["serde"] }
|
||||
craft-ui = { version = "0.1.0", git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "22544b6d619d4f16779b8bdfa3f0b642a86fc065", features = ["serde"] }
|
||||
egui = "0.36"
|
||||
eframe = { version = "0.36", default-features = false }
|
||||
egui_kittest = "0.36"
|
||||
|
||||
@@ -3,10 +3,6 @@ Copyright (c) 2026 ArtCraft Team and the FilmCraft contributors.
|
||||
Licensed under the MIT License or the Apache License, Version 2.0, at your option
|
||||
(LICENSE-MIT, LICENSE-APACHE).
|
||||
|
||||
The ArtCraft name, wordmark and logos in docs/brand/ are trademarks of the ArtCraft Team. They are
|
||||
not open source and are not covered by the license above; their terms are in
|
||||
docs/brand/LICENSE-brand.txt.
|
||||
|
||||
Third-party material
|
||||
|
||||
This product bundles third-party material under its own licenses, listed below. The per-file
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
<p align="center">
|
||||
<a href="https://getartcraft.com/">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/artcraft-logo-white.svg">
|
||||
<img alt="ArtCraft" src="docs/brand/artcraft-logo.svg" width="200">
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
<h1 align="center">FilmCraft</h1>
|
||||
|
||||
<p align="center">
|
||||
@@ -15,8 +5,7 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
An open-source, clean-room take on the Adobe Premiere Pro workflow: native on macOS, Windows and Linux, and in the browser via WebAssembly.<br>
|
||||
By the ArtCraft team.
|
||||
An open-source, clean-room take on the Adobe Premiere Pro workflow: native on macOS, Windows and Linux, and in the browser via WebAssembly.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -26,16 +15,6 @@
|
||||
<a href="#status"><img alt="Status: young and moving fast" src="https://img.shields.io/badge/status-young%20and%20moving%20fast-6a3fd6"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://getartcraft.com/apps/filmcraft"><b>FilmCraft on getartcraft.com</b></a> ·
|
||||
<a href="https://getartcraft.com/">ArtCraft</a> ·
|
||||
<a href="https://getartcraft.com/apps">All Crafting Apps</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
@@ -44,10 +23,6 @@
|
||||
|
||||
<p align="center"><sub><i>Apollo 11 - Tranquility</i>: a three-minute documentary edit of NASA's 1969 launch, landing and moonwalk film, with subtitles from the mission transcript. Every frame in these screenshots comes from public-domain footage, decoded, composited and graded by FilmCraft's own code.</sub></p>
|
||||
|
||||
> [!NOTE]
|
||||
> **ArtCraft is a community of artists from all walks of life.** Digital, generative, music,
|
||||
> games — if you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
|
||||
|
||||
<p align="center">
|
||||
<a href="#edit">Edit</a> ·
|
||||
<a href="#color">Color</a> ·
|
||||
@@ -262,7 +237,7 @@ git clone https://github.com/storytold/craft-fonts ../craft-fonts
|
||||
CRAFT_FONTS_DIR="$PWD/../craft-fonts" cargo run --release -p filmcraft
|
||||
```
|
||||
|
||||
The control protocol is documented in [docs/control-protocol.md](docs/control-protocol.md). Stuck, or want to show what you made? Ask in [Discord](https://discord.gg/artcraft).
|
||||
The control protocol is documented in [docs/control-protocol.md](docs/control-protocol.md).
|
||||
|
||||
## Documentation
|
||||
|
||||
@@ -298,7 +273,7 @@ The biggest gaps today:
|
||||
- **Real-world media and platforms.** Our decoders are bit-exact on conformance streams, but camera and phone files in the wild are less tested. Windows and Linux get far less testing than macOS.
|
||||
- **AI features.** Few so far; speech to text is optional and off by default.
|
||||
|
||||
Bug reports with real footage are the most useful thing you can send us: [open an issue](https://github.com/storytold/filmcraft/issues) or tell us in [Discord](https://discord.gg/artcraft).
|
||||
Bug reports with real footage are the most useful thing you can send us: [open an issue](https://github.com/storytold/filmcraft/issues).
|
||||
|
||||
## Architecture
|
||||
|
||||
@@ -318,8 +293,6 @@ Nothing below the front ends depends on a UI toolkit or OS API. `cargo xtask ci`
|
||||
|
||||
## Downloads
|
||||
|
||||
**New to FilmCraft?** Download it from the [FilmCraft page on getartcraft.com](https://getartcraft.com/apps/filmcraft). That's the easiest way to install it.
|
||||
|
||||
**Want a specific build or format?** On GitHub, the [latest release](https://github.com/storytold/filmcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/filmcraft/releases) has earlier versions and their notes. `<ver>` in the file names is the version number, and `SHA256SUMS.txt` lists a checksum for every file.
|
||||
|
||||
### Windows
|
||||
@@ -397,44 +370,22 @@ emerge --ask media-video/filmcraft-bin
|
||||
## The Crafting Apps
|
||||
|
||||
FilmCraft is one of the **Crafting Apps**: free, open-source creative tools from the
|
||||
[ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to
|
||||
[storytold](https://github.com/storytold) team, each written from scratch in Rust and each able to
|
||||
stand on its own.
|
||||
|
||||
| | App | What it's for | Code | Learn more |
|
||||
|:-:|---|---|---|---|
|
||||
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | **Video editing, color and sound · you are here** | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) | [Website](https://getartcraft.com/apps/pdfcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) |
|
||||
|
||||
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
|
||||
| | App | What it's for | Code |
|
||||
|:-:|---|---|---|
|
||||
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | **Video editing, color and sound · you are here** | [GitHub](https://github.com/storytold/filmcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) |
|
||||
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) |
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
|
||||
</p>
|
||||
|
||||
<h3 align="center">Come make things with us</h3>
|
||||
|
||||
<p align="center">
|
||||
Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film,
|
||||
set type, and people still figuring out what they like to make. Share what you're working on,
|
||||
ask for help, tell us what's broken, or tell us what you wish these tools could do.
|
||||
Whatever your medium and however long you've been at it, you're welcome here.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://discord.gg/artcraft"><b>discord.gg/artcraft</b></a> ·
|
||||
<a href="https://getartcraft.com/">getartcraft.com</a> ·
|
||||
<a href="https://getartcraft.com/apps">The Crafting Apps</a> ·
|
||||
<a href="https://getartcraft.com/apps/filmcraft">FilmCraft</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
---
|
||||
|
||||
## License and credits
|
||||
|
||||
@@ -448,22 +399,10 @@ with its author, source and license in [ATTRIBUTION.md](ATTRIBUTION.md). Builds
|
||||
|
||||
**Footage and music in the screenshots:** NASA's Apollo 11 film and television footage from [images.nasa.gov](https://images.nasa.gov) (launch, Launch Control Center, lunar surface and recovery) and the Apollo 11 air-to-ground voice transcript, all US Government works in the public domain (NASA does not endorse this project); *Night of the Living Dead* (1968), *Carnival of Souls* (1962) and *Charade* (1963), all in the US public domain; *Earth Views from the ISS* by NASA; Chopin's Nocturne Op. 48 No. 1 and Ballade No. 1, performed for Musopen and released under CC0. The media itself is not in this repository. Sources and details for every asset are in [ATTRIBUTION.md](ATTRIBUTION.md).
|
||||
|
||||
FilmCraft is an independent implementation. It contains no Adobe code, icons, images, presets or LUTs, and no GPL or LGPL code; every icon is drawn in code and every asset is openly licensed and attributed ([AGENTS.md](AGENTS.md)), apart from the ArtCraft name and logos, which are trademarks of the ArtCraft Team used under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt). ffmpeg is used only as an external test oracle.
|
||||
|
||||
The ArtCraft name, wordmark and logos in [`docs/brand/`](docs/brand/) are trademarks of the
|
||||
ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as
|
||||
part of this repository and FilmCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
|
||||
Forks and modified versions must remove them.
|
||||
FilmCraft is an independent implementation. It contains no Adobe code, icons, images, presets or LUTs, and no GPL or LGPL code; every icon is drawn in code and every asset is openly licensed and attributed ([AGENTS.md](AGENTS.md)). ffmpeg is used only as an external test oracle.
|
||||
|
||||
<sub>Adobe, Photoshop, Illustrator, Premiere Pro, Lightroom, Acrobat, After Effects and InDesign are trademarks or registered trademarks of Adobe Inc. in the United States and/or other countries. FilmCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Adobe Inc.; these names are used only to describe the workflows it is compatible with.</sub>
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://getartcraft.com/"><img alt="ArtCraft" src="docs/brand/artcraft-mark.svg" width="28"></a><br>
|
||||
<sub>Made by the <a href="https://getartcraft.com/">ArtCraft</a> team and community.</sub>
|
||||
</p>
|
||||
|
||||
## Star history
|
||||
|
||||
[](https://www.star-history.com/?repos=storytold%2Ffilmcraft&type=date&legend=top-left)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: favicon.png
|
||||
title: FilmCraft web app icon (favicon and loading image), 128 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -36,7 +36,7 @@ cpal = "0.16"
|
||||
arboard = "3"
|
||||
chrono = { version = "0.4", default-features = false, features = ["clock"] }
|
||||
sys-locale = "0.3"
|
||||
# Help menu / About / Discord links in the system browser (MIT; as PhotoCraft).
|
||||
# Help menu / About links in the system browser (MIT; as PhotoCraft).
|
||||
open = "5"
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
@@ -305,7 +305,7 @@ fn app_creator(launch: Launch, graphics: graphics::GraphicsStart, created: Arc<A
|
||||
app.hooks.run_dialog = Some(Box::new(run_dialog_off_thread));
|
||||
}
|
||||
app.hooks.open_path = Some(Box::new(open_path));
|
||||
// Help menu, About and Discord links (#642): eframe is built without its `links`
|
||||
// Help menu and About links (#642): eframe is built without its `links`
|
||||
// feature, so `ctx.open_url` does nothing on the desktop. Detached, so a launcher
|
||||
// that waits for the browser never freezes the UI.
|
||||
app.hooks.open_url = Some(Box::new(|url: &str| open::that_detached(url).map_err(|e| e.to_string())));
|
||||
|
||||
@@ -39,11 +39,10 @@ pub fn install(app: &FilmcraftApp, ctx: egui::Context) -> (Receiver<String>, Men
|
||||
native.push((it.clone(), mi.clone()));
|
||||
let _ = settings.append(&mi);
|
||||
}
|
||||
// About and Discord repeat Help menu commands: same translated labels, updated with them
|
||||
// About repeats Help menu commands: same translated labels, updated with them
|
||||
let label = |id: &str, english: &str| items.iter().find(|i| i.id == id).map_or_else(|| english.to_string(), |i| i.label.clone());
|
||||
let about = MenuItem::with_id("app.about", label("app.about", "About FilmCraft"), true, None);
|
||||
let discord = MenuItem::with_id("help.discord", label("help.discord", "Join the ArtCraft Discord…"), true, None);
|
||||
for (id, mi) in [("app.about", &about), ("help.discord", &discord)] {
|
||||
for (id, mi) in [("app.about", &about)] {
|
||||
if let Some(it) = items.iter().find(|i| i.id == id) {
|
||||
// recorded as built (enabled, no shortcut), so the first update applies the real state
|
||||
native.push((Item { enabled: true, shortcut: None, ..it.clone() }, mi.clone()));
|
||||
@@ -58,7 +57,6 @@ pub fn install(app: &FilmcraftApp, ctx: egui::Context) -> (Receiver<String>, Men
|
||||
let [(_, hide), (_, hide_others), (_, quit)] = &predefined;
|
||||
let _ = app_menu.append_items(&[
|
||||
&about,
|
||||
&discord,
|
||||
&PredefinedMenuItem::separator(),
|
||||
&settings,
|
||||
&PredefinedMenuItem::separator(),
|
||||
|
||||
@@ -2,7 +2,7 @@ FilmCraft app icon (filmcraft.svg and every file derived from it in this directo
|
||||
filmcraft-small.svg, filmcraft-1024.png, filmcraft-macos-512.png, filmcraft.icns, filmcraft.ico,
|
||||
hicolor/, and apps/filmcraft-web/web/favicon.png).
|
||||
|
||||
Original artwork made for this project by the FilmCraft owner (Brandon Thomas) in ArtCraft, then
|
||||
Original artwork made for this project by the FilmCraft owner (Brandon Thomas) by hand, then
|
||||
vectorised. No third-party material. Licensed like the rest of FilmCraft, under either of
|
||||
|
||||
* Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
|
||||
|
||||
@@ -23,7 +23,7 @@ Exactly three colours:
|
||||
|
||||
## Provenance
|
||||
|
||||
The owner drew it in ArtCraft as a 2880 px engraving-style image. The original is kept in craftrules
|
||||
The owner drew it by hand as a 2880 px engraving-style image. The original is kept in craftrules
|
||||
at `craftrules/assets/app-icons/filmcraft/source.png` (not in this repo). It was vectorised with
|
||||
craftrules `assets/logo-options/_tools/vectorize_tile.py`, which keys the drawing to the three-colour
|
||||
palette and traces the ink with potrace. Licence: [LICENSE.txt](LICENSE.txt) (MIT OR Apache-2.0).
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: filmcraft-1024.png
|
||||
title: FilmCraft app icon, 1024 px render
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: filmcraft-macos-512.png
|
||||
title: FilmCraft app icon, macOS runtime Dock icon (512 px)
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: filmcraft-small.svg
|
||||
title: FilmCraft app icon, lighter vector
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: filmcraft.icns
|
||||
title: FilmCraft app icon, macOS .icns
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: filmcraft.ico
|
||||
title: FilmCraft app icon, Windows .ico (16-256 px)
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
asset: filmcraft.svg
|
||||
title: FilmCraft app icon, canonical vector (owl with ear tufts)
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
notes: SVG traced at 2048 px with craftrules assets/logo-options/_tools/vectorize_tile.py from the owner's ArtCraft drawing (craftrules assets/app-icons/filmcraft/source.png). Three colours: ink #0b0b0c, paper #efe9dc, app colour #8b5cf6; 512 viewBox, rx=112. See assets/app-icon/README.md.
|
||||
notes: SVG traced at 2048 px with craftrules assets/logo-options/_tools/vectorize_tile.py from the owner's drawing (craftrules assets/app-icons/filmcraft/source.png). Three colours: ink #0b0b0c, paper #efe9dc, app colour #8b5cf6; 512 viewBox, rx=112. See assets/app-icon/README.md.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 128 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 16 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 24 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 256 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 32 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 48 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 512 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.png
|
||||
title: FilmCraft app icon, Linux hicolor theme 64 px
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
asset: ai.storyteller.filmcraft.svg
|
||||
title: FilmCraft app icon, Linux hicolor theme scalable
|
||||
author: Brandon Thomas (FilmCraft owner), for the FilmCraft project
|
||||
source: original work (drawn by the owner in ArtCraft, then vectorised)
|
||||
source: original work (drawn by the owner by hand, then vectorised)
|
||||
license: MIT OR Apache-2.0
|
||||
license-file: assets/app-icon/LICENSE.txt
|
||||
added: 2026-10-02 by Claude (agent) for Brandon Thomas
|
||||
|
||||
@@ -35,7 +35,6 @@ rayon = { workspace = true }
|
||||
web-time = "1"
|
||||
# Unicode Bidirectional Algorithm for Arabic and Hebrew captions in reading order (MIT OR Apache-2.0).
|
||||
unicode-bidi = "0.3.18"
|
||||
# ArtCraft wordmark (PNG) for the About dialog and Home screen.
|
||||
image = { version = "0.25", default-features = false, features = ["png"] }
|
||||
|
||||
# Thread/process CPU clocks for frame-job profiling (safe wrappers; see frames.rs).
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
//! The ArtCraft wordmark (first-party trademark, used with permission; see `docs/brand/` and
|
||||
//! AGENTS.md §1.8), decoded once and kept as a texture.
|
||||
|
||||
const LOGO_LIGHT_INK: &[u8] = include_bytes!("../../../docs/brand/artcraft-logo-white.png");
|
||||
const LOGO_DARK_INK: &[u8] = include_bytes!("../../../docs/brand/artcraft-logo.png");
|
||||
|
||||
/// The wordmark for a dark (`dark = true`) or light UI: light ink on dark themes. Its aspect
|
||||
/// ratio is width / height of the returned texture.
|
||||
pub fn wordmark(ctx: &egui::Context, dark: bool) -> Option<egui::TextureHandle> {
|
||||
let id = egui::Id::new(("artcraft-wordmark", dark));
|
||||
if let Some(t) = ctx.data(|d| d.get_temp::<egui::TextureHandle>(id)) {
|
||||
return Some(t);
|
||||
}
|
||||
let bytes = if dark { LOGO_LIGHT_INK } else { LOGO_DARK_INK };
|
||||
let img = image::load_from_memory_with_format(bytes, image::ImageFormat::Png).ok()?;
|
||||
// Large enough to stay sharp at 2x for the sizes we draw (≤ 320 pt wide).
|
||||
let img = img.resize(1024, 1024, image::imageops::FilterType::Lanczos3).to_rgba8();
|
||||
let color = egui::ColorImage::from_rgba_unmultiplied([img.width() as usize, img.height() as usize], img.as_raw());
|
||||
let tex = ctx.load_texture("artcraft-wordmark", color, egui::TextureOptions::LINEAR);
|
||||
ctx.data_mut(|d| d.insert_temp(id, tex.clone()));
|
||||
Some(tex)
|
||||
}
|
||||
|
||||
/// Draw the wordmark `height` points tall with its left edge at `left_center` (vertically centred).
|
||||
/// Returns the drawn rect.
|
||||
pub fn paint_wordmark(ui: &egui::Ui, left_center: egui::Pos2, height: f32, dark: bool) -> Option<egui::Rect> {
|
||||
let tex = wordmark(ui.ctx(), dark)?;
|
||||
let [w, h] = tex.size();
|
||||
let width = height * w as f32 / h.max(1) as f32;
|
||||
let r = egui::Rect::from_min_size(egui::pos2(left_center.x, left_center.y - height / 2.0), egui::vec2(width, height));
|
||||
ui.painter().image(tex.id(), r, egui::Rect::from_min_max(egui::pos2(0.0, 0.0), egui::pos2(1.0, 1.0)), egui::Color32::WHITE);
|
||||
Some(r)
|
||||
}
|
||||
@@ -24,7 +24,7 @@ pub(crate) fn craft_fonts() -> impl Iterator<Item = &'static filmcraft_text::fon
|
||||
}
|
||||
|
||||
// Hangul: neither the UI fonts nor the Chinese/Japanese fallbacks have it, so typed, pasted and
|
||||
// IME-composed Korean drew as missing-glyph boxes (artcraft#2093).
|
||||
// IME-composed Korean drew as missing-glyph boxes (#2093).
|
||||
const KOREAN_SAMPLE: &str = "한국어입력테스트";
|
||||
const KOREAN_PREFERRED: &[&str] = &["Malgun Gothic", "Apple SD Gothic Neo", "Noto Sans CJK KR", "Noto Sans KR", "Source Han Sans K", "NanumGothic"];
|
||||
|
||||
|
||||
@@ -120,20 +120,10 @@ pub fn show(app: &mut FilmcraftApp, ui: &mut egui::Ui, rect: Rect) {
|
||||
let wresp = ui.interact(wr, egui::Id::new("hdr-ws-name"), Sense::click());
|
||||
app.auto.add("header.workspaceName", wr, &ws);
|
||||
p.galley_with_override_text_color(pos2(wr.min.x + 4.0, rect.center().y - wg.size().y / 2.0), wg, if wresp.hovered() { t.text } else { t.text_dim });
|
||||
// Community: a labelled Discord button, always one click away.
|
||||
{
|
||||
let label = "Discord";
|
||||
let g = p.layout_no_wrap(label.to_string(), Tokens::ui(12.0), Color32::WHITE);
|
||||
let w = g.size().x + 34.0;
|
||||
let r = Rect::from_min_size(pos2(wr.min.x - w - 14.0, rect.center().y - 12.0), vec2(w, 24.0));
|
||||
let resp = ui.interact(r, egui::Id::new("hdr-discord"), Sense::click()).on_hover_text(tl!("Join the ArtCraft Discord (discord.gg/artcraft)"));
|
||||
app.auto.add("header.discord", r, "Join the ArtCraft Discord");
|
||||
ui.painter().rect_filled(r, 12.0, if resp.hovered() { t.accent_hover } else { t.accent });
|
||||
icons::paint(ui.painter(), Rect::from_center_size(pos2(r.min.x + 14.0, r.center().y), vec2(14.0, 14.0)), Icon::Chat, Color32::WHITE);
|
||||
ui.painter().galley(pos2(r.min.x + 25.0, r.center().y - g.size().y / 2.0), g, Color32::WHITE);
|
||||
// Localized menus and user titles can be wider than English. Use the actual gap.
|
||||
let left = left_end + 12.0;
|
||||
let right = r.min.x - 12.0;
|
||||
let right = wr.min.x - 12.0;
|
||||
if right > left + 40.0 {
|
||||
let mut job = egui::text::LayoutJob::simple_singleline(title, Tokens::ui(14.0), t.tab_text_active);
|
||||
job.wrap.max_width = right - left;
|
||||
@@ -147,10 +137,6 @@ pub fn show(app: &mut FilmcraftApp, ui: &mut egui::Ui, rect: Rect) {
|
||||
t.tab_text_active,
|
||||
);
|
||||
}
|
||||
|
||||
if resp.clicked() {
|
||||
crate::links::open(app, ui.ctx(), crate::links::DISCORD);
|
||||
}
|
||||
}
|
||||
let popup_id = egui::Id::new("workspaces-popup");
|
||||
if ws_resp.clicked() || wresp.clicked() {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# German video-editing vocabulary. No proprietary localisation resource, string table or product UI
|
||||
# was consulted or copied; add entries the same way. Like the German catalogs of the other Craft
|
||||
# apps, text addresses the user informally ("du") and commands use the infinitive ("Projekt
|
||||
# öffnen…"). Product, format and feature names (FilmCraft, ArtCraft, Lumetri, Essential Graphics,
|
||||
# öffnen…"). Product, format and feature names (FilmCraft, Lumetri, Essential Graphics,
|
||||
# EDL, AAF…) keep their spelling. This catalog covers every menu, including the native macOS
|
||||
# app menu; anything else is shown in English.
|
||||
#
|
||||
@@ -40,7 +40,6 @@
|
||||
Apply Default Transitions to Selection Standardübergänge auf Auswahl anwenden
|
||||
Apply Video Transition Videoübergang anwenden
|
||||
Arrange Anordnen
|
||||
ArtCraft Website ArtCraft-Website
|
||||
Assembly Montage
|
||||
Attach Proxies… Proxys anhängen…
|
||||
Audio Audio
|
||||
@@ -146,7 +145,6 @@
|
||||
Fill frame Bild füllen
|
||||
FilmCraft Help… FilmCraft-Hilfe…
|
||||
FilmCraft on GitHub FilmCraft auf GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft auf getartcraft.com
|
||||
Final Cut Pro XML… Final Cut Pro XML…
|
||||
Find Next Weitersuchen
|
||||
Find… Suchen…
|
||||
@@ -195,7 +193,6 @@
|
||||
Install Motion Graphics Template… Motion-Graphics-Vorlage installieren…
|
||||
Interpret Footage… Material interpretieren…
|
||||
Iris Iris
|
||||
Join the ArtCraft Discord… Dem ArtCraft-Discord beitreten…
|
||||
Keyboard Shortcuts… Tastenkürzel…
|
||||
Label Farbmarkierung
|
||||
Labels… Farbmarkierungen…
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 45.
|
@@ -11,7 +11,7 @@
|
||||
# Clean-room: every entry was written from the plain meaning of the English text using ordinary
|
||||
# Spanish video-editing vocabulary (pista, cabezal, secuencia, bandeja, procesar…). No proprietary
|
||||
# localisation resource, string table or product UI was consulted or copied; add entries the same
|
||||
# way. Product and technology names (FilmCraft, ArtCraft, Lumetri, ProRes, LUFS…) keep their
|
||||
# way. Product and technology names (FilmCraft, Lumetri, ProRes, LUFS…) keep their
|
||||
# spelling. "video" is written without an accent, as in the rest of this catalog.
|
||||
|
||||
About FilmCraft Acerca de FilmCraft
|
||||
@@ -40,7 +40,6 @@
|
||||
Apply Default Transitions to Selection Aplicar transiciones predeterminadas a la selección
|
||||
Apply Video Transition Aplicar transición de video
|
||||
Arrange Organizar
|
||||
ArtCraft Website Sitio web de ArtCraft
|
||||
Assembly Ensamblaje
|
||||
Attach Proxies… Adjuntar proxies…
|
||||
Audio Channels… Canales de audio…
|
||||
@@ -135,7 +134,6 @@
|
||||
Fill frame Rellenar fotograma
|
||||
FilmCraft Help… Ayuda de FilmCraft…
|
||||
FilmCraft on GitHub FilmCraft en GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft en getartcraft.com
|
||||
Find Next Buscar siguiente
|
||||
Find… Buscar…
|
||||
Fit Ajustar
|
||||
@@ -179,7 +177,6 @@
|
||||
Insert Frame Hold Segment Insertar segmento de fotograma congelado
|
||||
Install Motion Graphics Template… Instalar plantilla de animación…
|
||||
Interpret Footage… Interpretar material…
|
||||
Join the ArtCraft Discord… Únete al Discord de ArtCraft…
|
||||
Keyboard Shortcuts… Atajos de teclado…
|
||||
Label Etiqueta
|
||||
Labels… Etiquetas…
|
||||
@@ -370,7 +367,6 @@
|
||||
Master volume: use the Audio Track Mixer Volumen maestro: usa el mezclador de pistas de audio
|
||||
Search Buscar
|
||||
Quick Export Exportación rápida
|
||||
Join the ArtCraft Discord (discord.gg/artcraft) Únete al Discord de ArtCraft (discord.gg/artcraft)
|
||||
Cancel Cancelar
|
||||
OK Aceptar
|
||||
Interpret Footage Interpretar material
|
||||
@@ -413,8 +409,6 @@
|
||||
Delete Caption Track Eliminar pista de subtítulos
|
||||
Delete Empty Caption Tracks Eliminar pistas de subtítulos vacías
|
||||
Version {version} Versión {version}
|
||||
A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family. Un editor de video no lineal en Rust puro, desarrollado en sala limpia. Parte de la familia ArtCraft.
|
||||
Join the ArtCraft Discord Únete al Discord de ArtCraft
|
||||
Source code on GitHub Código fuente en GitHub
|
||||
Report an issue Informar de un problema
|
||||
MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1). MIT OR Apache-2.0. Fuentes: Inter, Noto Serif y JetBrains Mono (SIL OFL 1.1).
|
||||
@@ -455,7 +449,6 @@
|
||||
Bars and Tone Barras y tono
|
||||
SMPTE HD bars with 1 kHz reference tone Barras SMPTE HD con tono de referencia de 1 kHz
|
||||
Community Comunidad
|
||||
Join us on Discord Únete a nosotros en Discord
|
||||
OMF Export Settings Ajustes de exportación OMF
|
||||
AAF Export Settings Ajustes de exportación AAF
|
||||
OMF Title: Título OMF:
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 3 and column 95.
|
@@ -4,7 +4,7 @@
|
||||
# French video-editing vocabulary. No proprietary localisation resource, string table or product UI
|
||||
# was consulted or copied; add entries the same way. Commands use the infinitive ("Enregistrer
|
||||
# sous…"), messages address the user as "vous", and labels use French sentence case. Product,
|
||||
# format and technology names (FilmCraft, ArtCraft, Lumetri, ProRes, LUFS, EDL, AAF…) keep their
|
||||
# format and technology names (FilmCraft, Lumetri, ProRes, LUFS, EDL, AAF…) keep their
|
||||
# spelling. French spacing: a space before ":", ";", "?" and "!". This catalog has the same entries
|
||||
# as `es.tsv` plus the native macOS Settings menu; strings added later show in English until they
|
||||
# are translated. A native-speaker review is welcome.
|
||||
@@ -42,7 +42,6 @@
|
||||
Apply Default Transitions to Selection Appliquer les transitions par défaut à la sélection
|
||||
Apply Video Transition Appliquer une transition vidéo
|
||||
Arrange Disposition
|
||||
ArtCraft Website Site web d'ArtCraft
|
||||
Assembly Assemblage
|
||||
Attach Proxies… Associer des proxys…
|
||||
Audio Channels… Canaux audio…
|
||||
@@ -137,7 +136,6 @@
|
||||
Fill frame Remplir l'image
|
||||
FilmCraft Help… Aide de FilmCraft…
|
||||
FilmCraft on GitHub FilmCraft sur GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft sur getartcraft.com
|
||||
Find Next Rechercher le suivant
|
||||
Find… Rechercher…
|
||||
Fit Adapter
|
||||
@@ -181,7 +179,6 @@
|
||||
Insert Frame Hold Segment Insérer un segment d'image figée
|
||||
Install Motion Graphics Template… Installer un modèle d'animation graphique…
|
||||
Interpret Footage… Interpréter le métrage…
|
||||
Join the ArtCraft Discord… Rejoindre le Discord d'ArtCraft…
|
||||
Keyboard Shortcuts… Raccourcis clavier…
|
||||
Label Étiquette
|
||||
Labels… Étiquettes…
|
||||
@@ -372,7 +369,6 @@
|
||||
Master volume: use the Audio Track Mixer Volume principal : utilisez le Mixeur de pistes audio
|
||||
Search Rechercher
|
||||
Quick Export Exportation rapide
|
||||
Join the ArtCraft Discord (discord.gg/artcraft) Rejoindre le Discord d'ArtCraft (discord.gg/artcraft)
|
||||
Cancel Annuler
|
||||
OK OK
|
||||
Interpret Footage Interpréter le métrage
|
||||
@@ -415,8 +411,6 @@
|
||||
Delete Caption Track Supprimer la piste de sous-titres
|
||||
Delete Empty Caption Tracks Supprimer les pistes de sous-titres vides
|
||||
Version {version} Version {version}
|
||||
A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family. Un éditeur vidéo non linéaire en pur Rust, conçu en salle blanche. Membre de la famille ArtCraft.
|
||||
Join the ArtCraft Discord Rejoindre le Discord d'ArtCraft
|
||||
Source code on GitHub Code source sur GitHub
|
||||
Report an issue Signaler un problème
|
||||
MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1). MIT OR Apache-2.0. Polices : Inter, Noto Serif et JetBrains Mono (SIL OFL 1.1).
|
||||
@@ -457,7 +451,6 @@
|
||||
Bars and Tone Barres et tonalité
|
||||
SMPTE HD bars with 1 kHz reference tone Barres SMPTE HD avec tonalité de référence à 1 kHz
|
||||
Community Communauté
|
||||
Join us on Discord Rejoignez-nous sur Discord
|
||||
OMF Export Settings Paramètres d'exportation OMF
|
||||
AAF Export Settings Paramètres d'exportation AAF
|
||||
OMF Title: Titre OMF :
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 5 and column 83.
|
@@ -5,7 +5,7 @@
|
||||
# string table or product UI was consulted or copied; add entries the same way. Commands use the
|
||||
# base verb ("Simpan Sebagai…", "Tambah Penanda"), messages address the user as "Anda", and menu
|
||||
# labels keep the title case of the English source. Product, format and technology names
|
||||
# (FilmCraft, ArtCraft, Lumetri, ProRes, LUFS, EDL, AAF…) keep their spelling, and common loanwords
|
||||
# (FilmCraft, Lumetri, ProRes, LUFS, EDL, AAF…) keep their spelling, and common loanwords
|
||||
# of the trade (render, preset, mixer, gain, ripple, roll, slip, slide, snap, scrub, offline) stay
|
||||
# as they are. Decimal fractions in descriptions use a comma (29,97 fps). This catalog has the same
|
||||
# entries as `es.tsv` plus the native macOS Settings menu; strings added later show in English until
|
||||
@@ -47,7 +47,6 @@
|
||||
Apply Default Transitions to Selection Terapkan Transisi Bawaan ke Pilihan
|
||||
Apply Video Transition Terapkan Transisi Video
|
||||
Arrange Susun
|
||||
ArtCraft Website Situs Web ArtCraft
|
||||
Assembly Perakitan
|
||||
Attach Proxies… Lampirkan Proksi…
|
||||
Audio Channels… Kanal Audio…
|
||||
@@ -142,7 +141,6 @@
|
||||
Fill frame Isi bingkai
|
||||
FilmCraft Help… Bantuan FilmCraft…
|
||||
FilmCraft on GitHub FilmCraft di GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft di getartcraft.com
|
||||
Find Next Cari Berikutnya
|
||||
Find… Cari…
|
||||
Fit Pas
|
||||
@@ -186,7 +184,6 @@
|
||||
Insert Frame Hold Segment Sisipkan Segmen Tahan Bingkai
|
||||
Install Motion Graphics Template… Pasang Templat Grafis Gerak…
|
||||
Interpret Footage… Interpretasikan Rekaman…
|
||||
Join the ArtCraft Discord… Gabung ke Discord ArtCraft…
|
||||
Keyboard Shortcuts… Pintasan Keyboard…
|
||||
Label Label
|
||||
Labels… Label…
|
||||
@@ -377,7 +374,6 @@
|
||||
Master volume: use the Audio Track Mixer Volume master: gunakan Mixer Trek Audio
|
||||
Search Cari
|
||||
Quick Export Ekspor Cepat
|
||||
Join the ArtCraft Discord (discord.gg/artcraft) Gabung ke Discord ArtCraft (discord.gg/artcraft)
|
||||
Cancel Batal
|
||||
OK OK
|
||||
Interpret Footage Interpretasikan Rekaman
|
||||
@@ -420,8 +416,6 @@
|
||||
Delete Caption Track Hapus Trek Takarir
|
||||
Delete Empty Caption Tracks Hapus Trek Takarir Kosong
|
||||
Version {version} Versi {version}
|
||||
A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family. Editor video non-linear clean-room berbahasa Rust murni. Bagian dari keluarga ArtCraft.
|
||||
Join the ArtCraft Discord Gabung ke Discord ArtCraft
|
||||
Source code on GitHub Kode sumber di GitHub
|
||||
Report an issue Laporkan masalah
|
||||
MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1). MIT OR Apache-2.0. Font: Inter, Noto Serif dan JetBrains Mono (SIL OFL 1.1).
|
||||
@@ -462,7 +456,6 @@
|
||||
Bars and Tone Bar dan Nada
|
||||
SMPTE HD bars with 1 kHz reference tone Bar SMPTE HD dengan nada referensi 1 kHz
|
||||
Community Komunitas
|
||||
Join us on Discord Bergabunglah dengan kami di Discord
|
||||
OMF Export Settings Pengaturan Ekspor OMF
|
||||
AAF Export Settings Pengaturan Ekspor AAF
|
||||
OMF Title: Judul OMF:
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 14.
|
@@ -4,7 +4,7 @@
|
||||
# Clean-room: every entry was written from the plain meaning of the English text using ordinary
|
||||
# Japanese computing and video-editing vocabulary (クリップ, シーケンス, トラック, 再生ヘッド, ぼかし ...). No
|
||||
# proprietary localisation resource, string table or product UI was consulted or copied; add entries
|
||||
# the same way. Product and technology names (FilmCraft, ArtCraft, Lumetri, ProRes, LUFS ...) keep
|
||||
# the same way. Product and technology names (FilmCraft, Lumetri, ProRes, LUFS ...) keep
|
||||
# their spelling.
|
||||
#
|
||||
# House style, so new entries read like the rest:
|
||||
@@ -42,7 +42,6 @@
|
||||
Apply Default Transitions to Selection 選択範囲に既定のトランジションを適用
|
||||
Apply Video Transition ビデオトランジションを適用
|
||||
Arrange 重ね順
|
||||
ArtCraft Website ArtCraft の Web サイト
|
||||
Assembly アセンブリ
|
||||
Attach Proxies… プロキシを関連付け…
|
||||
Audio Channels… オーディオチャンネル…
|
||||
@@ -137,7 +136,6 @@
|
||||
Fill frame フレームを埋める
|
||||
FilmCraft Help… FilmCraft ヘルプ…
|
||||
FilmCraft on GitHub GitHub の FilmCraft
|
||||
FilmCraft on getartcraft.com getartcraft.com の FilmCraft
|
||||
Find Next 次を検索
|
||||
Find… 検索…
|
||||
Fit 合わせる
|
||||
@@ -181,7 +179,6 @@
|
||||
Insert Frame Hold Segment フレームホールドセグメントを挿入
|
||||
Install Motion Graphics Template… モーショングラフィックステンプレートをインストール…
|
||||
Interpret Footage… 素材を解釈…
|
||||
Join the ArtCraft Discord… ArtCraft の Discord に参加…
|
||||
Keyboard Shortcuts… キーボードショートカット…
|
||||
Label ラベル
|
||||
Labels… ラベル…
|
||||
@@ -371,7 +368,6 @@
|
||||
Master volume: use the Audio Track Mixer マスター音量はオーディオトラックミキサーで調整してください
|
||||
Search 検索
|
||||
Quick Export クイック書き出し
|
||||
Join the ArtCraft Discord (discord.gg/artcraft) ArtCraft の Discord に参加 (discord.gg/artcraft)
|
||||
Cancel キャンセル
|
||||
OK OK
|
||||
Interpret Footage 素材を解釈
|
||||
@@ -410,8 +406,6 @@
|
||||
Delete Audio Tracks オーディオトラックを削除する
|
||||
All Empty Tracks すべての空のトラック
|
||||
Version {version} バージョン {version}
|
||||
A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family. Rust だけで書かれた、クリーンルーム設計のノンリニアビデオ編集ソフトです。ArtCraft ファミリーの一員です。
|
||||
Join the ArtCraft Discord ArtCraft の Discord に参加
|
||||
Source code on GitHub GitHub のソースコード
|
||||
Report an issue 問題を報告
|
||||
MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1). MIT OR Apache-2.0。フォント: Inter、Noto Serif、JetBrains Mono (SIL OFL 1.1)。
|
||||
@@ -452,7 +446,6 @@
|
||||
Bars and Tone カラーバーとトーン
|
||||
SMPTE HD bars with 1 kHz reference tone 1 kHz 基準トーン付きの SMPTE HD カラーバー
|
||||
Community コミュニティ
|
||||
Join us on Discord Discord に参加
|
||||
OMF Export Settings OMF 書き出し設定
|
||||
AAF Export Settings AAF 書き出し設定
|
||||
OMF Title: OMF タイトル:
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 11 and column 59.
|
@@ -4,7 +4,7 @@
|
||||
# Brazilian Portuguese video-editing vocabulary. No proprietary localisation resource, string table
|
||||
# or product UI was consulted or copied; add entries the same way. Commands use the infinitive
|
||||
# ("Salvar como…"), instructions use the polite imperative ("Selecione um clipe…"), and labels use
|
||||
# sentence case. Product, format and technology names (FilmCraft, ArtCraft, Lumetri, ProRes, LUFS,
|
||||
# sentence case. Product, format and technology names (FilmCraft, Lumetri, ProRes, LUFS,
|
||||
# EDL, AAF…) keep their spelling; decimals in prose use a comma ("29,97 fps"). This catalog has the
|
||||
# same entries as `es.tsv` plus the native macOS Settings menu; strings added later show in English
|
||||
# until they are translated. A native-speaker review is welcome.
|
||||
@@ -44,7 +44,6 @@
|
||||
Apply Default Transitions to Selection Aplicar transições padrão à seleção
|
||||
Apply Video Transition Aplicar transição de vídeo
|
||||
Arrange Organizar
|
||||
ArtCraft Website Site do ArtCraft
|
||||
Assembly Montagem
|
||||
Attach Proxies… Anexar proxies…
|
||||
Audio Channels… Canais de áudio…
|
||||
@@ -139,7 +138,6 @@
|
||||
Fill frame Preencher quadro
|
||||
FilmCraft Help… Ajuda do FilmCraft…
|
||||
FilmCraft on GitHub FilmCraft no GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft no getartcraft.com
|
||||
Find Next Localizar próximo
|
||||
Find… Localizar…
|
||||
Fit Ajustar
|
||||
@@ -183,7 +181,6 @@
|
||||
Insert Frame Hold Segment Inserir segmento de quadro congelado
|
||||
Install Motion Graphics Template… Instalar modelo de gráficos de movimento…
|
||||
Interpret Footage… Interpretar clipes…
|
||||
Join the ArtCraft Discord… Entre no Discord do ArtCraft…
|
||||
Keyboard Shortcuts… Atalhos de teclado…
|
||||
Label Rótulo
|
||||
Labels… Rótulos…
|
||||
@@ -374,7 +371,6 @@
|
||||
Master volume: use the Audio Track Mixer Volume principal: use o misturador de faixas de áudio
|
||||
Search Pesquisar
|
||||
Quick Export Exportação rápida
|
||||
Join the ArtCraft Discord (discord.gg/artcraft) Entre no Discord do ArtCraft (discord.gg/artcraft)
|
||||
Cancel Cancelar
|
||||
OK OK
|
||||
Interpret Footage Interpretar clipes
|
||||
@@ -417,8 +413,6 @@
|
||||
Delete Caption Track Excluir faixa de legendas
|
||||
Delete Empty Caption Tracks Excluir faixas de legendas vazias
|
||||
Version {version} Versão {version}
|
||||
A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family. Um editor de vídeo não linear em Rust puro, desenvolvido em sala limpa. Parte da família ArtCraft.
|
||||
Join the ArtCraft Discord Entre no Discord do ArtCraft
|
||||
Source code on GitHub Código-fonte no GitHub
|
||||
Report an issue Relatar um problema
|
||||
MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1). MIT OR Apache-2.0. Fontes: Inter, Noto Serif e JetBrains Mono (SIL OFL 1.1).
|
||||
@@ -459,7 +453,6 @@
|
||||
Bars and Tone Barras e tom
|
||||
SMPTE HD bars with 1 kHz reference tone Barras SMPTE HD com tom de referência de 1 kHz
|
||||
Community Comunidade
|
||||
Join us on Discord Junte-se a nós no Discord
|
||||
OMF Export Settings Configurações de exportação OMF
|
||||
AAF Export Settings Configurações de exportação AAF
|
||||
OMF Title: Título OMF:
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 4.
|
@@ -30,7 +30,6 @@
|
||||
Apply Default Transitions to Selection Применить переходы по умолчанию к выделению
|
||||
Apply Video Transition Применить видеопереход
|
||||
Arrange Упорядочить
|
||||
ArtCraft Website Веб-сайт ArtCraft
|
||||
Assembly Сборка
|
||||
Attach Proxies… Прикрепить прокси…
|
||||
Audio Аудио
|
||||
@@ -128,7 +127,6 @@
|
||||
Fill frame Заполнить кадр
|
||||
FilmCraft Help… Справка FilmCraft…
|
||||
FilmCraft on GitHub FilmCraft на GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft на getartcraft.com
|
||||
Find Next Найти далее
|
||||
Find… Найти…
|
||||
Fit По размеру
|
||||
@@ -172,7 +170,6 @@
|
||||
Insert Frame Hold Segment Вставить сегмент стоп-кадра
|
||||
Install Motion Graphics Template… Установить шаблон анимированной графики…
|
||||
Interpret Footage… Интерпретировать материал…
|
||||
Join the ArtCraft Discord… Присоединиться к ArtCraft Discord…
|
||||
Keyboard Shortcuts… Сочетания клавиш…
|
||||
Label Метка
|
||||
Labels… Метки…
|
||||
|
||||
|
@@ -30,7 +30,6 @@
|
||||
Apply Default Transitions to Selection Застосувати типові переходи до виділення
|
||||
Apply Video Transition Застосувати відеоперехід
|
||||
Arrange Упорядкувати
|
||||
ArtCraft Website Вебсайт ArtCraft
|
||||
Assembly Компонування
|
||||
Attach Proxies… Приєднати проксі…
|
||||
Audio Аудіо
|
||||
@@ -128,7 +127,6 @@
|
||||
Fill frame Заповнити кадр
|
||||
FilmCraft Help… Довідка FilmCraft…
|
||||
FilmCraft on GitHub FilmCraft на GitHub
|
||||
FilmCraft on getartcraft.com FilmCraft на getartcraft.com
|
||||
Find Next Знайти далі
|
||||
Find… Знайти…
|
||||
Fit Умістити
|
||||
@@ -172,7 +170,6 @@
|
||||
Insert Frame Hold Segment Вставити сегмент стоп-кадру
|
||||
Install Motion Graphics Template… Установити шаблон анімаційної графіки…
|
||||
Interpret Footage… Інтерпретувати матеріал…
|
||||
Join the ArtCraft Discord… Приєднатися до Discord ArtCraft…
|
||||
Keyboard Shortcuts… Клавіатурні скорочення…
|
||||
Label Мітка
|
||||
Labels… Мітки…
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
#
|
||||
# 净室实现:每条译文均由英文含义直接译出,使用通用的中文视频剪辑术语(剪辑、时间轴、序列、
|
||||
# 轨道、关键帧……)。未参考或复制任何专有本地化资源、字符串表或产品界面。产品与技术名称
|
||||
# (FilmCraft、ArtCraft、Lumetri、ProRes、LUFS……)保留原文拼写。
|
||||
# (FilmCraft、Lumetri、ProRes、LUFS……)保留原文拼写。
|
||||
About FilmCraft 关于 FilmCraft
|
||||
Add Audio Submix Track 添加音频子混音轨道
|
||||
Add Caption at Playhead 在播放头处添加字幕
|
||||
@@ -35,7 +35,6 @@
|
||||
Apply Default Transitions to Selection 对所选对象应用默认过渡
|
||||
Apply Video Transition 应用视频过渡
|
||||
Arrange 排列
|
||||
ArtCraft Website ArtCraft 官网
|
||||
Assembly 组装
|
||||
Attach Proxies… 附加代理文件…
|
||||
Audio Channels… 音频声道…
|
||||
@@ -130,7 +129,6 @@
|
||||
Fill frame 填满帧
|
||||
FilmCraft Help… FilmCraft 帮助…
|
||||
FilmCraft on GitHub GitHub 上的 FilmCraft
|
||||
FilmCraft on getartcraft.com getartcraft.com 上的 FilmCraft
|
||||
Find Next 查找下一个
|
||||
Find… 查找…
|
||||
Fit 适配
|
||||
@@ -174,7 +172,6 @@
|
||||
Insert Frame Hold Segment 插入帧定格片段
|
||||
Install Motion Graphics Template… 安装动态图形模板…
|
||||
Interpret Footage… 解释素材…
|
||||
Join the ArtCraft Discord… 加入 ArtCraft Discord…
|
||||
Keyboard Shortcuts… 键盘快捷键…
|
||||
Label 标签
|
||||
Labels… 标签…
|
||||
@@ -365,7 +362,6 @@
|
||||
Master volume: use the Audio Track Mixer 主音量:请使用音频轨道混音器调整
|
||||
Search 搜索
|
||||
Quick Export 快速导出
|
||||
Join the ArtCraft Discord (discord.gg/artcraft) 加入 ArtCraft Discord(discord.gg/artcraft)
|
||||
Cancel 取消
|
||||
OK 确定
|
||||
Interpret Footage 解释素材
|
||||
@@ -404,8 +400,6 @@
|
||||
Delete Audio Tracks 删除音频轨道
|
||||
All Empty Tracks 所有空轨道
|
||||
Version {version} 版本 {version}
|
||||
A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family. 一款净室实现的纯 Rust 非线性视频编辑器,属于 ArtCraft 家族。
|
||||
Join the ArtCraft Discord 加入 ArtCraft Discord
|
||||
Source code on GitHub GitHub 上的源代码
|
||||
Report an issue 报告问题
|
||||
MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1). MIT 或 Apache-2.0。字体:Inter、Noto Serif 与 JetBrains Mono(SIL OFL 1.1)。
|
||||
@@ -446,7 +440,6 @@
|
||||
Bars and Tone 彩条与音调
|
||||
SMPTE HD bars with 1 kHz reference tone 带 1 kHz 参考音调的 SMPTE HD 彩条
|
||||
Community 社区
|
||||
Join us on Discord 在 Discord 上加入我们
|
||||
OMF Export Settings OMF 导出设置
|
||||
AAF Export Settings AAF 导出设置
|
||||
OMF Title: OMF 标题:
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 3 and column 95.
|
@@ -83,8 +83,7 @@ pub enum Icon {
|
||||
Undo,
|
||||
Redo,
|
||||
Bell,
|
||||
/// Community chat (the ArtCraft Discord): a speech bubble with three dots. Our own drawing,
|
||||
/// not the Discord logo.
|
||||
/// Community chat: a speech bubble with three dots.
|
||||
Chat,
|
||||
/// Website: a globe.
|
||||
Globe,
|
||||
|
||||
@@ -30,7 +30,6 @@ macro_rules! tlf {
|
||||
}
|
||||
|
||||
pub mod automation;
|
||||
pub mod brand;
|
||||
pub mod calc;
|
||||
mod cjk;
|
||||
pub mod control;
|
||||
@@ -159,7 +158,7 @@ pub struct HostHooks {
|
||||
/// running while the dialog is open (the desktop app on Linux, #260); without it the
|
||||
/// synchronous pickers above are used.
|
||||
pub run_dialog: Option<Box<dyn FnMut(native_dialogs::FileDialog) -> Receiver<Vec<String>>>>,
|
||||
/// Open a URL in the system browser (Help menu links, About dialog, Discord button, Import
|
||||
/// Open a URL in the system browser (Help menu links, About dialog, Import
|
||||
/// screen). Without it, or when it fails, links go through `egui::Context::open_url`, which
|
||||
/// opens a new tab on the web (the native egui backend is built without its `links` feature).
|
||||
pub open_url: Option<Box<dyn FnMut(&str) -> Result<(), String>>>,
|
||||
|
||||
@@ -1,30 +1,15 @@
|
||||
//! Community and project links (Help menu, About dialog, header Discord button, Home screen).
|
||||
//!
|
||||
//! FilmCraft is part of the ArtCraft family: the community lives on the ArtCraft Discord, every
|
||||
//! app has a page on the ArtCraft website and a public GitHub repository.
|
||||
//! Project links (Help menu, About dialog, Home screen).
|
||||
|
||||
/// The app's short name, used in the website and repository URLs.
|
||||
/// The app's short name, used in the repository URLs.
|
||||
pub const APP: &str = "filmcraft";
|
||||
|
||||
/// The ArtCraft community Discord.
|
||||
pub const DISCORD: &str = "https://discord.gg/artcraft";
|
||||
/// The ArtCraft website.
|
||||
pub const WEBSITE: &str = "https://getartcraft.com";
|
||||
/// FilmCraft's page on the ArtCraft website.
|
||||
pub const APP_PAGE: &str = "https://getartcraft.com/apps/filmcraft";
|
||||
/// FilmCraft's source repository.
|
||||
pub const GITHUB: &str = "https://github.com/storytold/filmcraft";
|
||||
/// New issue on FilmCraft's repository.
|
||||
pub const ISSUES: &str = "https://github.com/storytold/filmcraft/issues";
|
||||
|
||||
/// (command id, label, url) for every link, in menu order.
|
||||
pub const ALL: [(&str, &str, &str); 5] = [
|
||||
("help.discord", "Join the ArtCraft Discord…", DISCORD),
|
||||
("help.website", "ArtCraft Website", WEBSITE),
|
||||
("help.appPage", "FilmCraft on getartcraft.com", APP_PAGE),
|
||||
("help.github", "FilmCraft on GitHub", GITHUB),
|
||||
("help.reportIssue", "Report an Issue…", ISSUES),
|
||||
];
|
||||
pub const ALL: [(&str, &str, &str); 2] = [("help.github", "FilmCraft on GitHub", GITHUB), ("help.reportIssue", "Report an Issue…", ISSUES)];
|
||||
|
||||
/// The URL a `help.*` link command opens.
|
||||
pub fn url_for(command: &str) -> Option<&'static str> {
|
||||
@@ -50,17 +35,16 @@ mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn urls_follow_the_artcraft_scheme() {
|
||||
assert_eq!(APP_PAGE, format!("{WEBSITE}/apps/{APP}"));
|
||||
fn urls_follow_the_repo_scheme() {
|
||||
assert_eq!(GITHUB, format!("https://github.com/storytold/{APP}"));
|
||||
assert!(ALL.iter().all(|(id, _, u)| id.starts_with("help.") && u.starts_with("https://")));
|
||||
assert_eq!(url_for("help.discord"), Some(DISCORD));
|
||||
assert_eq!(url_for("help.github"), Some(GITHUB));
|
||||
assert_eq!(url_for("help.nope"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn links_open_through_the_host_hook() {
|
||||
// #642: on the desktop every link (Help menu, About, Discord button, Import screen) must
|
||||
// #642: on the desktop every link (Help menu, About, Import screen) must
|
||||
// reach the host's browser opener; `ctx.open_url` alone is a no-op natively.
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
@@ -77,8 +61,8 @@ mod tests {
|
||||
assert_eq!(r["url"], url, "{id}");
|
||||
assert_eq!(opened.borrow().last().map(String::as_str), Some(url), "{id}");
|
||||
}
|
||||
open(&mut app, &ctx, DISCORD);
|
||||
assert_eq!(opened.borrow().last().map(String::as_str), Some(DISCORD));
|
||||
open(&mut app, &ctx, GITHUB);
|
||||
assert_eq!(opened.borrow().last().map(String::as_str), Some(GITHUB));
|
||||
assert_eq!(opened.borrow().len(), ALL.len() + 1);
|
||||
|
||||
// A failing opener falls back to `ctx.open_url` instead of losing the click.
|
||||
|
||||
@@ -134,9 +134,6 @@ pub const UI_COMMANDS: &[UiCommand] = &[
|
||||
uic!("mode.import", "Import", [], None),
|
||||
uic!("mode.edit", "Edit", [], None),
|
||||
uic!("mode.export", "Export", ["File", "Export"], Some("Cmd+M")),
|
||||
uic!("help.discord", "Join the ArtCraft Discord…", ["Help"], None),
|
||||
uic!("help.website", "ArtCraft Website", ["Help"], None),
|
||||
uic!("help.appPage", "FilmCraft on getartcraft.com", ["Help"], None),
|
||||
uic!("help.github", "FilmCraft on GitHub", ["Help"], None),
|
||||
uic!("help.reportIssue", "Report an Issue…", ["Help"], None),
|
||||
uic!("help.revealLogFiles", "Reveal Log Files…", ["Help"], None),
|
||||
|
||||
@@ -408,7 +408,7 @@ fn delete_tracks(app: &mut FilmcraftApp, ctx: &egui::Context) -> bool {
|
||||
keep
|
||||
}
|
||||
|
||||
/// Help ▸ About FilmCraft, in three tabs: About (version and the ArtCraft community links),
|
||||
/// Help ▸ About FilmCraft, in three tabs: About (version and the project links),
|
||||
/// Contributors and Models (the credits compiled in from `contributors/contributors.json`, see
|
||||
/// `crate::credits` and docs/contributors.md).
|
||||
///
|
||||
@@ -443,57 +443,35 @@ fn about(app: &mut FilmcraftApp, ui: &mut egui::Ui) {
|
||||
}
|
||||
}
|
||||
|
||||
/// About ▸ About: version, licence and the ArtCraft community links. Joining the Discord is the
|
||||
/// first, accented button.
|
||||
/// About ▸ About: version, licence and the project links.
|
||||
///
|
||||
/// Automation ids: `about.discord`, `about.website`, `about.appPage`, `about.github`,
|
||||
/// `about.reportIssue`.
|
||||
/// Automation ids: `about.github`, `about.reportIssue`.
|
||||
fn about_tab(app: &mut FilmcraftApp, ui: &mut egui::Ui) {
|
||||
use crate::icons::{self, Icon};
|
||||
use crate::links;
|
||||
let t = app.tokens;
|
||||
ui.set_width(380.0);
|
||||
// ArtCraft wordmark (first-party trademark, docs/brand/).
|
||||
let (r, _) = ui.allocate_exact_size(egui::vec2(ui.available_width(), 30.0), egui::Sense::hover());
|
||||
crate::brand::paint_wordmark(ui, egui::pos2(r.min.x, r.center().y), 20.0, app.ui.dark);
|
||||
ui.add_space(6.0);
|
||||
ui.heading("FilmCraft");
|
||||
ui.label(tlf!("Version {version}", version = env!("CARGO_PKG_VERSION")));
|
||||
ui.label(tl!("A clean-room, pure-Rust non-linear video editor. Part of the ArtCraft family."));
|
||||
ui.label(tl!("A clean-room, pure-Rust non-linear video editor."));
|
||||
ui.add_space(10.0);
|
||||
let mut link = |ui: &mut egui::Ui, id: &str, icon: Icon, label: &str, url: &str, primary: bool| {
|
||||
let size = egui::vec2(ui.available_width(), if primary { 36.0 } else { 28.0 });
|
||||
let mut link = |ui: &mut egui::Ui, id: &str, icon: Icon, label: &str, url: &str| {
|
||||
let size = egui::vec2(ui.available_width(), 28.0);
|
||||
let (r, resp) = ui.allocate_exact_size(size, egui::Sense::click());
|
||||
let resp = resp.on_hover_text(url);
|
||||
app.auto.add(&format!("about.{id}"), r, label);
|
||||
let bg = if primary {
|
||||
if resp.hovered() { t.accent_hover } else { t.accent }
|
||||
} else if resp.hovered() {
|
||||
t.hover
|
||||
} else {
|
||||
egui::Color32::TRANSPARENT
|
||||
};
|
||||
let bg = if resp.hovered() { t.hover } else { egui::Color32::TRANSPARENT };
|
||||
ui.painter().rect_filled(r, 6.0, bg);
|
||||
let fg = if primary { egui::Color32::WHITE } else { t.text };
|
||||
let fg = t.text;
|
||||
let ir = egui::Rect::from_center_size(egui::pos2(r.min.x + 20.0, r.center().y), egui::vec2(18.0, 18.0));
|
||||
icons::paint(ui.painter(), ir, icon, fg);
|
||||
ui.painter().text(
|
||||
egui::pos2(r.min.x + 40.0, r.center().y),
|
||||
egui::Align2::LEFT_CENTER,
|
||||
label,
|
||||
crate::theme::Tokens::ui(if primary { 14.0 } else { 13.0 }),
|
||||
fg,
|
||||
);
|
||||
ui.painter().text(egui::pos2(r.min.x + 40.0, r.center().y), egui::Align2::LEFT_CENTER, label, crate::theme::Tokens::ui(13.0), fg);
|
||||
if resp.clicked() {
|
||||
links::open(app, ui.ctx(), url);
|
||||
}
|
||||
};
|
||||
link(ui, "discord", Icon::Chat, tl!("Join the ArtCraft Discord"), links::DISCORD, true);
|
||||
ui.add_space(6.0);
|
||||
link(ui, "website", Icon::Globe, "getartcraft.com", links::WEBSITE, false);
|
||||
link(ui, "appPage", Icon::Globe, tl!("FilmCraft on getartcraft.com"), links::APP_PAGE, false);
|
||||
link(ui, "github", Icon::Code, tl!("Source code on GitHub"), links::GITHUB, false);
|
||||
link(ui, "reportIssue", Icon::Code, tl!("Report an issue"), links::ISSUES, false);
|
||||
link(ui, "github", Icon::Code, tl!("Source code on GitHub"), links::GITHUB);
|
||||
link(ui, "reportIssue", Icon::Code, tl!("Report an issue"), links::ISSUES);
|
||||
ui.add_space(10.0);
|
||||
ui.label(egui::RichText::new(tl!("MIT OR Apache-2.0. Fonts: Inter, Noto Serif and JetBrains Mono (SIL OFL 1.1).")).small().color(t.text_dim));
|
||||
}
|
||||
|
||||
@@ -45,26 +45,17 @@ pub fn show(app: &mut FilmcraftApp, ui: &mut egui::Ui, rect: Rect) {
|
||||
}
|
||||
// Community and project links.
|
||||
let y = 90.0 + 150.0 + 36.0;
|
||||
// ArtCraft wordmark (first-party trademark, docs/brand/), then the section title.
|
||||
let logo = crate::brand::paint_wordmark(ui, rect.min + vec2(24.0, y), 15.0, app.ui.dark);
|
||||
let tx = logo.map_or(rect.min.x + 24.0, |r| r.max.x + 12.0);
|
||||
ui.painter().text(pos2(tx, rect.min.y + y), Align2::LEFT_CENTER, tl!("Community"), Tokens::semibold(15.0), t.text);
|
||||
ui.painter().text(pos2(rect.min.x + 24.0, rect.min.y + y), Align2::LEFT_CENTER, tl!("Community"), Tokens::semibold(15.0), t.text);
|
||||
let mut x = rect.min.x + 24.0;
|
||||
for (i, (id, label, url)) in crate::links::ALL.iter().take(4).enumerate() {
|
||||
let primary = i == 0;
|
||||
let label = if primary { tl!("Join us on Discord") } else { crate::i18n::t(label) };
|
||||
for (id, label, url) in crate::links::ALL.iter() {
|
||||
let label = crate::i18n::t(label);
|
||||
let g = ui.painter().layout_no_wrap(label.to_string(), Tokens::ui(13.0), t.text);
|
||||
let r = Rect::from_min_size(pos2(x, rect.min.y + y + 18.0), vec2(g.size().x + 44.0, 34.0));
|
||||
let resp = ui.interact(r, egui::Id::new(("imp-link", *id)), Sense::click()).on_hover_text(*url);
|
||||
app.auto.add(&format!("import.link.{}", id.trim_start_matches("help.")), r, label);
|
||||
let (bg, fg) = if primary {
|
||||
(if resp.hovered() { t.accent_hover } else { t.accent }, Color32::WHITE)
|
||||
} else {
|
||||
(if resp.hovered() { t.hover } else { t.tl_header_bg }, t.text)
|
||||
};
|
||||
let (bg, fg) = (if resp.hovered() { t.hover } else { t.tl_header_bg }, t.text);
|
||||
ui.painter().rect_filled(r, 8.0, bg);
|
||||
let icon = [crate::icons::Icon::Chat, crate::icons::Icon::Globe, crate::icons::Icon::Globe, crate::icons::Icon::Code][i];
|
||||
crate::icons::paint(ui.painter(), Rect::from_center_size(pos2(r.min.x + 20.0, r.center().y), vec2(16.0, 16.0)), icon, fg);
|
||||
crate::icons::paint(ui.painter(), Rect::from_center_size(pos2(r.min.x + 20.0, r.center().y), vec2(16.0, 16.0)), crate::icons::Icon::Code, fg);
|
||||
ui.painter().galley(pos2(r.min.x + 34.0, r.center().y - g.size().y / 2.0), g, fg);
|
||||
if resp.clicked() {
|
||||
crate::links::open(app, &ctx, url);
|
||||
|
||||
@@ -633,7 +633,7 @@ mod tests {
|
||||
ctx.run_ui(egui::RawInput::default(), |_| {}).textures_delta.clear();
|
||||
}
|
||||
|
||||
/// Typed, pasted or IME-composed Hangul draws real glyphs, not the missing-glyph box (artcraft#2093).
|
||||
/// Typed, pasted or IME-composed Hangul draws real glyphs, not the missing-glyph box (#2093).
|
||||
#[test]
|
||||
fn korean_text_renders_with_an_installed_korean_font() {
|
||||
const KOREAN: &str = "한국어 입력 테스트";
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//! Headless UI test of the community links: Help menu commands, the header Discord button, the
|
||||
//! About dialog and the Home (Import) screen.
|
||||
//! Headless UI test of the community links: Help menu commands, the About dialog and the Home (Import) screen.
|
||||
//!
|
||||
//! Set `FILMCRAFT_UI_SNAPSHOT_DIR=<dir>` to also render the window offscreen with wgpu and write
|
||||
//! `links-*.png` there; without it no GPU is needed.
|
||||
@@ -90,14 +89,11 @@ fn community_links_everywhere() {
|
||||
for (id, label, _) in links::ALL {
|
||||
assert!(text.contains(id) && text.contains(label), "Help menu lists {id}");
|
||||
}
|
||||
// Header: the Discord button is always there.
|
||||
assert_eq!(d.ids("header.discord"), vec!["header.discord".to_string()]);
|
||||
d.snapshot("header");
|
||||
// About dialog: Discord first, then website, app page, GitHub, issues.
|
||||
// About dialog: GitHub, issues.
|
||||
d.ok("engine.execute", json!({"command": "app.about", "params": {}}));
|
||||
d.frames(3);
|
||||
let about = d.ids("about.");
|
||||
for id in ["about.discord", "about.website", "about.appPage", "about.github", "about.reportIssue"] {
|
||||
for id in ["about.github", "about.reportIssue"] {
|
||||
assert!(about.iter().any(|a| a == id), "{id} in {about:?}");
|
||||
}
|
||||
d.snapshot("about");
|
||||
@@ -108,7 +104,7 @@ fn community_links_everywhere() {
|
||||
d.ok("engine.execute", json!({"command": "mode.import", "params": {}}));
|
||||
d.frames(3);
|
||||
let home = d.ids("import.link.");
|
||||
for id in ["import.link.discord", "import.link.website", "import.link.appPage", "import.link.github"] {
|
||||
for id in ["import.link.github", "import.link.reportIssue"] {
|
||||
assert!(home.iter().any(|a| a == id), "{id} in {home:?}");
|
||||
}
|
||||
d.snapshot("home");
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
ArtCraft brand assets: license
|
||||
|
||||
The ArtCraft name, wordmark and mark (the "ArtCraft Marks"), including every file in this
|
||||
directory in every color, size and format, are owned by the ArtCraft Team. They are trademarks
|
||||
and are NOT open source. They are not covered by FilmCraft's MIT OR Apache-2.0 license, and nothing in
|
||||
that license, in NOTICE or in any other file of this repository grants any right to them.
|
||||
|
||||
Permission
|
||||
|
||||
The ArtCraft Team grants a limited, non-exclusive, non-transferable, revocable, royalty-free
|
||||
permission to use the ArtCraft Marks only:
|
||||
|
||||
1. as part of copies of this repository; and
|
||||
2. within FilmCraft itself, its documentation and its official builds, to identify FilmCraft as made
|
||||
by the ArtCraft team and community and to link to getartcraft.com and its community.
|
||||
|
||||
Conditions
|
||||
|
||||
The permission holds only while every one of these is true:
|
||||
|
||||
- The marks are used exactly as supplied in this directory. Do not redraw, recolor, crop,
|
||||
stretch, rotate, animate, outline or add effects to them, extract parts of them, or combine
|
||||
them with any other name, mark or artwork.
|
||||
- They are used only in the context of FilmCraft, and only to say that the ArtCraft team makes it.
|
||||
They must never suggest that the ArtCraft Team made, sponsors, endorses, certifies or supports
|
||||
any other product, service, fork, modified version, plug-in, organization or person.
|
||||
- Neither the marks nor the ArtCraft name appear in the name, logo, icon, domain, social media
|
||||
handle, app-store listing, advertising or marketing of anything other than FilmCraft.
|
||||
|
||||
Forks and modified versions
|
||||
|
||||
If you distribute or publish a modified version of FilmCraft, or any work derived from it, you must
|
||||
remove the ArtCraft Marks from it (or replace them with your own) and must not call it ArtCraft or
|
||||
present it as an ArtCraft product. You may say, in plain text, that your work is based on FilmCraft by
|
||||
the ArtCraft team. A fork kept only to propose changes back to this repository may keep the marks
|
||||
unchanged.
|
||||
|
||||
Everything else
|
||||
|
||||
Any use not expressly permitted here needs prior written permission from the ArtCraft Team
|
||||
(https://getartcraft.com/). The permission ends automatically for anyone who breaks these terms.
|
||||
All other rights are reserved.
|
||||
|
Before Width: | Height: | Size: 31 KiB |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-logo-white.png
|
||||
title: ArtCraft wordmark, light ink for dark backgrounds
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: 3200x333 PNG. Bundled in the app (About dialog, Home screen) and shown in the README header. First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
|
Before Width: | Height: | Size: 5.3 KiB |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-logo-white.svg
|
||||
title: ArtCraft wordmark, light ink for dark backgrounds
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: SVG. Bundled in the app (About dialog, Home screen) and shown in the README header. First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
|
Before Width: | Height: | Size: 31 KiB |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-logo.png
|
||||
title: ArtCraft wordmark (symbol + "ARTCRAFT"), dark ink for light backgrounds
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: 3200x333 PNG. Bundled in the app (About dialog, Home screen) and shown in the README header. First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
|
Before Width: | Height: | Size: 5.3 KiB |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-logo.svg
|
||||
title: ArtCraft wordmark (symbol + "ARTCRAFT"), dark ink for light backgrounds
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: SVG. Bundled in the app (About dialog, Home screen) and shown in the README header. First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
|
Before Width: | Height: | Size: 26 KiB |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-mark-black.png
|
||||
title: ArtCraft symbol ("A" mark), black
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: 1024x1024 PNG. Kept for brand use (README, docs). First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
|
||||
<title>ArtCraft</title>
|
||||
<path fill="#0b0b0c" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 341 B |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-mark-black.svg
|
||||
title: ArtCraft symbol ("A" mark), black
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: SVG. Kept for brand use (README, docs). First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
|
Before Width: | Height: | Size: 24 KiB |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-mark.png
|
||||
title: ArtCraft symbol ("A" mark), blue
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: 1024x1024 PNG. Bundled in the app (About dialog, Home screen) and shown in the README header. First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
|
||||
<title>ArtCraft</title>
|
||||
<path fill="#4e7bfb" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 341 B |
@@ -1,8 +0,0 @@
|
||||
asset: artcraft-mark.svg
|
||||
title: ArtCraft symbol ("A" mark), blue
|
||||
author: ArtCraft Team
|
||||
source: original work (first-party ArtCraft brand asset supplied by the ArtCraft Team)
|
||||
license: LicenseRef-ArtCraft-Trademark — ArtCraft name, wordmark and logos are trademarks of the ArtCraft Team, not open source; usable only unmodified and only in the context of FilmCraft, under docs/brand/LICENSE-brand.txt. Not covered by the project's MIT OR Apache-2.0 license.
|
||||
license-file: docs/brand/LICENSE-brand.txt
|
||||
added: 2026-10-01 by Claude (agent) for Brandon Thomas
|
||||
notes: SVG. Bundled in the app (About dialog, Home screen) and shown in the README header. First-party brand mark: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
|
||||
@@ -18,10 +18,10 @@
|
||||
<launchable type="desktop-id">ai.storyteller.filmcraft.desktop</launchable>
|
||||
<icon type="stock">ai.storyteller.filmcraft</icon>
|
||||
<!-- Only url types known to appstream 0.15 (Ubuntu 22.04, where CI validates): no vcs-browser. -->
|
||||
<url type="homepage">https://getartcraft.com/apps/filmcraft</url>
|
||||
<url type="homepage">https://github.com/storytold/filmcraft</url>
|
||||
<url type="bugtracker">https://github.com/storytold/filmcraft/issues</url>
|
||||
<url type="help">https://github.com/storytold/filmcraft</url>
|
||||
<url type="contact">https://discord.gg/artcraft</url>
|
||||
<url type="contact">https://github.com/storytold/filmcraft/issues</url>
|
||||
<categories>
|
||||
<category>AudioVideo</category>
|
||||
<category>Video</category>
|
||||
|
||||
@@ -14,7 +14,7 @@ section: video
|
||||
priority: optional
|
||||
maintainer: ${FILMCRAFT_MAINTAINER}
|
||||
vendor: Learning Machines LLC
|
||||
homepage: https://getartcraft.com/apps/filmcraft
|
||||
homepage: https://github.com/storytold/filmcraft
|
||||
license: MIT OR Apache-2.0
|
||||
description: |-
|
||||
Open-source, native video editor: edit video, color and sound.
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
|
||||
<Icon Id="FilmcraftIcon.ico" SourceFile="$(var.IconPath)" />
|
||||
<Property Id="ARPPRODUCTICON" Value="FilmcraftIcon.ico" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="https://getartcraft.com/apps/filmcraft" />
|
||||
<Property Id="ARPURLUPDATEINFO" Value="https://getartcraft.com/apps/filmcraft" />
|
||||
<Property Id="ARPHELPLINK" Value="https://discord.gg/artcraft" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="https://github.com/storytold/filmcraft" />
|
||||
<Property Id="ARPURLUPDATEINFO" Value="https://github.com/storytold/filmcraft" />
|
||||
<Property Id="ARPHELPLINK" Value="https://github.com/storytold/filmcraft/issues" />
|
||||
|
||||
<StandardDirectory Id="ProgramFiles6432Folder">
|
||||
<Directory Id="INSTALLFOLDER" Name="FilmCraft" />
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
Produces, in $env:DIST (default: dist/release):
|
||||
filmcraft-<version>-windows-<arch>.msi per-machine installer (WiX v5)
|
||||
filmcraft-<version>-windows-<arch>-portable.zip filmcraft.exe + filmcraft-cli.exe + portable.txt
|
||||
filmcraft-cli-<version>-windows-<arch>.zip filmcraft-cli.exe standalone
|
||||
|
||||
The binaries link the C runtime statically (+crt-static), so neither the MSI nor the portable
|
||||
zip needs the Visual C++ redistributable. Signing is delegated to sign.ps1 (skipped with a
|
||||
@@ -25,6 +26,7 @@ param(
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Root = (Resolve-Path (Join-Path $PSScriptRoot '..\..')).Path
|
||||
Set-Location $Root
|
||||
|
||||
function Invoke-Native([string] $What, [scriptblock] $Block) {
|
||||
Write-Output "==> $What"
|
||||
@@ -56,6 +58,17 @@ if (-not $env:FILMCRAFT_BUILD_DATE) { $env:FILMCRAFT_BUILD_DATE = (Get-Date).ToU
|
||||
Write-Output "FilmCraft $Version for Windows $Arch ($Target)"
|
||||
|
||||
if (-not $SkipBuild) {
|
||||
# Locate rc.exe if not in PATH
|
||||
if (-not (Get-Command rc.exe -ErrorAction SilentlyContinue)) {
|
||||
$kits = Join-Path ${env:ProgramFiles(x86)} 'Windows Kits\10\bin'
|
||||
$foundRc = Get-ChildItem -Path $kits -Recurse -Filter rc.exe -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.FullName -match '\\x64\\rc\.exe$' } |
|
||||
Sort-Object FullName -Descending | Select-Object -First 1
|
||||
if ($foundRc) {
|
||||
$env:PATH = "$($foundRc.DirectoryName);$env:PATH"
|
||||
}
|
||||
}
|
||||
|
||||
# Static CRT: no VC++ redistributable needed. Scoped to the target so host build scripts and
|
||||
# proc-macros are unaffected.
|
||||
$flagVar = 'CARGO_TARGET_' + ($Target.ToUpper() -replace '-', '_') + '_RUSTFLAGS'
|
||||
@@ -125,6 +138,19 @@ $Zip = Join-Path $Dist "filmcraft-$Version-windows-$Arch-portable.zip"
|
||||
Remove-Item -Force $Zip -ErrorAction SilentlyContinue
|
||||
Compress-Archive -Path $Portable -DestinationPath $Zip
|
||||
|
||||
# ---- cli zip -----------------------------------------------------------------------------------
|
||||
$CliPortable = Join-Path $TargetDir "windows-package\filmcraft-cli-$Version-windows-$Arch"
|
||||
Remove-Item -Recurse -Force $CliPortable -ErrorAction SilentlyContinue
|
||||
New-Item -ItemType Directory -Force -Path $CliPortable | Out-Null
|
||||
Copy-Item (Join-Path $Stage 'filmcraft-cli.exe') $CliPortable
|
||||
foreach ($f in 'README.md', 'LICENSE', 'LICENSE-MIT', 'LICENSE-APACHE') {
|
||||
$p = Join-Path $Root $f
|
||||
if (Test-Path $p) { Copy-Item $p $CliPortable }
|
||||
}
|
||||
$CliZip = Join-Path $Dist "filmcraft-cli-$Version-windows-$Arch.zip"
|
||||
Remove-Item -Force $CliZip -ErrorAction SilentlyContinue
|
||||
Compress-Archive -Path $CliPortable -DestinationPath $CliZip
|
||||
|
||||
# Smoke-test the CLI when this machine can run it. An ARM64 build made on an x64 runner can't run
|
||||
# here; .github/workflows/windows-arm64.yml installs and runs it on ARM64 instead.
|
||||
$HostArch = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString().ToLowerInvariant()
|
||||
@@ -133,4 +159,4 @@ if ($Arch -ne 'arm64' -or $HostArch -eq 'arm64') {
|
||||
} else {
|
||||
Write-Output "skipping filmcraft-cli --version: an $Arch build doesn't run on this $HostArch machine"
|
||||
}
|
||||
Get-Item $Msi, $Zip | Format-Table Name, Length
|
||||
Get-Item $Msi, $Zip, $CliZip | Format-Table Name, Length
|
||||
|
||||