chore: debrand ArtCraft and Discord references

Remove Discord button, Help menu links, sibling-app links and brand assets; rewrite docs and packaging URLs. Add .debrand rules.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Marcos Paulo
2026-10-11 21:25:31 -03:00
parent 470ea7a3af
commit 91efb894f7
65 changed files with 132 additions and 472 deletions
+24
View File
@@ -0,0 +1,24 @@
# 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 ^ATTRIBUTION\.md$ :: \|\s*`docs/brand/
sub (?s)\nThe ArtCraft name, wordmark and logos in docs/brand/.*?LICENSE-brand\.txt\.\n =>
sub drawn in ArtCraft, vectorised => drawn by hand, vectorised
sub drawing by the project owner in ArtCraft\) => drawing by the project owner)
sub made for this project by the project owner in ArtCraft, then => made for this project by the project owner by hand, then
sub the project owner drew it in ArtCraft => the project owner drew it by hand
sub owner's ArtCraft unicorn drawing => owner's unicorn drawing
sub The owner's ArtCraft drawing => The owner's drawing
sub https://getartcraft\.com/apps/effectcraft => https://github.com/storytold/effectcraft
sub https://discord\.gg/artcraft => https://github.com/storytold/effectcraft/issues
sub https://getartcraft\.com => https://example.com
sub \[Discord\]\(https://github\.com/storytold/effectcraft/issues\) and in\nGitHub issues => GitHub issues
sub Come tell us what matters most to you on \[Discord\]\(https://github\.com/storytold/effectcraft/issues\)\. => Tell us what matters most to you in [GitHub issues](https://github.com/storytold/effectcraft/issues).
sub links \(Help menu, Discord, Settings\) => links (Help menu, Settings)
sub the Discord and other links do nothing => the links do nothing
sub \(6 October, on Discord\) => (6 October)
sub the Tools bar and About dialog carry the ArtCraft mark => the Tools bar and About dialog carry the app mark
forbid (?i)artcraft(?! Team and the EffectCraft contributors)
forbid (?i)discord
sub ffmpeg export, Discord presence, => ffmpeg export,
+3
View File
@@ -0,0 +1,3 @@
[submodule "tools/craft-skills"]
path = tools/craft-skills
url = https://git.marcospaulo.dev.br/storytold/craft-skills.git
-6
View File
@@ -76,12 +76,6 @@ reproduce an image (for example, point lists traced from someone else's icon).
`crates/engine/src/demo.rs`, generators in `crates/effects`) 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
EffectCraft 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).
## 2. Clean-room code
+15 -33
View File
@@ -18,21 +18,21 @@ iconography, images or other Adobe assets; open licences only; every asset attri
| `assets/fonts/JetBrainsMono-Regular.ttf` | The JetBrains Mono Project Authors | https://github.com/JetBrains/JetBrainsMono | OFL-1.1 (`assets/fonts/OFL-JetBrainsMono.txt`) |
| `apps/effectcraft-web/web/favicon.svg` | EffectCraft contributors | Original work: web app icon, a copy of `assets/app-icon/effectcraft-small.svg` (the unicorn app icon) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `packaging/macos/dmg/background.svg` | @XusBadia | Original work: macOS DMG Finder window background, derived from the EffectCraft app icon (`assets/app-icon/effectcraft.svg`); rendered to a TIFF by `packaging/macos/package.sh` at package time | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) |
| `assets/app-icon/effectcraft-1024.png` | EffectCraft contributors | Original work: effectCraft app icon, 1024 px (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft-macos-512.png` | EffectCraft contributors | Original work: effectCraft runtime Dock icon (macOS) (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft-small.svg` | EffectCraft contributors | Original work: effectCraft app icon, light vector (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft.icns` | EffectCraft contributors | Original work: effectCraft macOS app icon (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft.ico` | EffectCraft contributors | Original work: effectCraft Windows app icon (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft.svg` | EffectCraft contributors | Original work: effectCraft app icon, master vector (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 128x128 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 16x16 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 24x24 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 256x256 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 32x32 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 48x48 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 512x512 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 64x64 (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.effectcraft.svg` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor scalable (owner's ArtCraft unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft-1024.png` | EffectCraft contributors | Original work: effectCraft app icon, 1024 px (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft-macos-512.png` | EffectCraft contributors | Original work: effectCraft runtime Dock icon (macOS) (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft-small.svg` | EffectCraft contributors | Original work: effectCraft app icon, light vector (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft.icns` | EffectCraft contributors | Original work: effectCraft macOS app icon (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft.ico` | EffectCraft contributors | Original work: effectCraft Windows app icon (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/effectcraft.svg` | EffectCraft contributors | Original work: effectCraft app icon, master vector (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 128x128 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 16x16 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 24x24 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 256x256 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 32x32 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 48x48 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 512x512 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor 64x64 (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.effectcraft.svg` | EffectCraft contributors | Original work: effectCraft app icon, Linux hicolor scalable (owner's unicorn drawing, vectorised) | MIT OR Apache-2.0 (`assets/app-icon/LICENSE.txt`) |
| `crates/lottie/tests/fixtures/bouncing-ball.json` | EffectCraft contributors | Original work: hand-written Lottie test fixture (bouncing ball, eased position keys) | MIT OR Apache-2.0 |
| `crates/lottie/tests/fixtures/shapes-gradient.json` | EffectCraft contributors | Original work: hand-written Lottie test fixture (star, rectangle, gradient fill, dashed stroke, trim paths) | MIT OR Apache-2.0 |
| `crates/lottie/tests/fixtures/precomp-matte-text.json` | EffectCraft contributors | Original work: hand-written Lottie test fixture (precomp, track matte, parented text) | MIT OR Apache-2.0 |
@@ -103,22 +103,4 @@ configuration from these Apache-2.0 projects:
- `crates/segment/src/mobilesam.rs` follows the MobileSAM, TinyViT and Segment Anything
architectures and their Apache-2.0 reference code.
## 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 as part of this repository and EffectCraft,
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 brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-logo-white.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark, light ink for dark backgrounds) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-logo.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark (symbol + "ARTCRAFT"), dark ink for light backgrounds) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-logo.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft wordmark (symbol + "ARTCRAFT"), dark ink for light backgrounds) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-mark-black.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), black) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-mark-black.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), black) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-mark.png` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), blue) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
| `docs/brand/artcraft-mark.svg` | ArtCraft Team | Original work: first-party ArtCraft brand mark (ArtCraft symbol ("A" mark), blue) | ArtCraft brand terms, not open source (`docs/brand/LICENSE-brand.txt`) |
- Appearance theme previews, drawn procedurally from original shapes: `crates/ui-egui/src/panels/settings.rs` (original work, MIT OR Apache-2.0).
+1 -1
View File
@@ -19,7 +19,7 @@ EffectCraft is a clean-room, open-source, pure-Rust motion graphics and visual e
- **Property tree:** everything animatable is a `Property` in the layer's `PropGroup` tree, addressed by paths (`transform/position`, `effects/#1/blurriness`, `@uid`).
- **Everything is a command** (`crates/engine`): id, label, menu path, shortcut, params, enabled(), run(). UI, CLI, control channel and MCP dispatch by id.
- **Everything is agent-drivable:** every interactive widget registers an automation id; UI state is serde.
- **Community links** (Help menu, About, header Discord button): https://discord.gg/artcraft, https://getartcraft.com, https://getartcraft.com/apps/effectcraft, https://github.com/storytold/effectcraft.
- **Project links** (Help menu, About): https://github.com/storytold/effectcraft.
- **Quality gates** before every commit: `cargo xtask ci` (fmt, clippy -D warnings, tests, layers, assets, wasm).
- **Commits:** one task id per commit (`M6.3: trim paths`). Only green states.
+1 -2
View File
@@ -42,5 +42,4 @@ cargo xtask ci # what every commit must pass
## Talk to us
Questions, ideas and bug reports are welcome on [Discord](https://discord.gg/artcraft) and in
GitHub issues.
Questions, ideas and bug reports are welcome on GitHub issues.
-4
View File
@@ -3,10 +3,6 @@ Copyright (c) 2026 ArtCraft Team and the EffectCraft 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
+11 -70
View 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">EffectCraft</h1>
<p align="center">
@@ -26,26 +16,12 @@
<img alt="License: MIT OR Apache-2.0" src="https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-555?style=flat-square">
</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/effectcraft"><b>EffectCraft 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">
<img src="docs/images/effectcraft-hero.png" alt="EffectCraft's main window: the animated demo composition in the Composition panel, the Project panel, a Timeline with text, shape and solid layers, and the Properties panel showing the selected text layer's transform, font and paragraph settings" width="100%">
</p>
> [!NOTE]
> **ArtCraft is a community of artists from all walks of life.** Digital, generative, music,
> games &mdash; if you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
<p align="center">
<a href="#what-effectcraft-is">What it is</a> ·
<a href="#animate">Animate</a> ·
@@ -254,7 +230,7 @@ send us right now.
## Downloads
**New to EffectCraft?** Download it from the [EffectCraft page on getartcraft.com](https://getartcraft.com/apps/effectcraft). That's the easiest way to install it.
**New to EffectCraft?** Download it from the [latest release](https://github.com/storytold/effectcraft/releases/latest). That's the easiest way to install it.
**Want a specific build or format?** On GitHub, the [latest release](https://github.com/storytold/effectcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/effectcraft/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.
@@ -317,43 +293,18 @@ File ▸ Import fallback instead.
## The Crafting Apps
EffectCraft 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
EffectCraft is one of the **Crafting Apps**: free, open-source creative tools, 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 | [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 · you are here** | [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.
<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/effectcraft">EffectCraft</a>
</p>
| | 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 | [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 · you are here** | [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) |
## License and credits
@@ -363,18 +314,8 @@ Copyright (c) 2026 ArtCraft Team and the EffectCraft contributors. Required noti
Bundled fonts, icons, images and other assets keep their own open licenses; each one is listed
with its author, source and license in [ATTRIBUTION.md](ATTRIBUTION.md).
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 EffectCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
Forks and modified versions must remove them.
<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. EffectCraft 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>
<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
[![Star History Chart](https://api.star-history.com/svg?repos=storytold/effectcraft&type=Date&legend=top-left)](https://www.star-history.com/?repos=storytold%2Feffectcraft&type=date&legend=top-left)
+1 -1
View File
@@ -113,7 +113,7 @@ Ranked; detail in [docs/roadmap.md](docs/roadmap.md) and [docs/gaps.md](docs/gap
| 5 | Performance: benchmarks at 1080p / 4K, real-time cached playback, hardware video (G5) | 50–100 |
| 6 | Localization depth: effect names, all panels, French / German / Korean (G9) | 60–110 |
Come tell us what matters most to you on [Discord](https://discord.gg/artcraft).
Tell us what matters most to you in [GitHub issues](https://github.com/storytold/effectcraft/issues).
## Progress log
@@ -1,6 +1,6 @@
asset: favicon.svg
title: EffectCraft web app icon (favicon)
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
+1 -1
View File
@@ -14,7 +14,7 @@ effectcraft-engine = { workspace = true }
effectcraft-host = { workspace = true }
effectcraft-ui-egui = { workspace = true }
egui = { workspace = true }
# `links`: links (Help menu, Discord, Settings) open in the system browser.
# `links`: links (Help menu, Settings) open in the system browser.
eframe = { workspace = true, features = ["default_fonts", "wgpu", "accesskit", "links", "wayland", "x11"] }
serde = { workspace = true }
serde_json = { workspace = true }
+1 -1
View File
@@ -2,7 +2,7 @@ EffectCraft app icon (effectcraft.svg, effectcraft-small.svg and every file deri
this directory: effectcraft-1024.png, effectcraft-macos-512.png, effectcraft.icns, effectcraft.ico,
hicolor/), and the web favicon apps/effectcraft-web/web/favicon.svg.
Original artwork made for this project by the project owner in ArtCraft, then vectorised (no
Original artwork made for this project by the project owner by hand, then vectorised (no
third-party material). Licensed like the rest of EffectCraft, under either of
* Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
+1 -1
View File
@@ -15,7 +15,7 @@ full-bleed colour field, tight head-and-shoulders crop, the body running off the
| Paper | `#efe9dc` | the figure |
| Ink | `#0b0b0c` | line work and contour |
**Provenance:** the project owner drew it in ArtCraft (a 2880 px engraving-style image, kept in
**Provenance:** the project owner drew it by hand (a 2880 px engraving-style image, kept in
craftrules at `assets/app-icons/effectcraft/source.png`). It was vectorised with craftrules
`assets/logo-options/_tools/vectorize_tile.py`, which keys out the field and traces the ink with potrace.
Licence: see [LICENSE.txt](LICENSE.txt) (MIT OR Apache-2.0, like the repo).
@@ -1,6 +1,6 @@
asset: effectcraft-1024.png
title: EffectCraft app icon, 1024 px
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: effectcraft-macos-512.png
title: EffectCraft runtime Dock icon (macOS)
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: effectcraft-small.svg
title: EffectCraft app icon, light vector
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
+1 -1
View File
@@ -1,6 +1,6 @@
asset: effectcraft.icns
title: EffectCraft macOS app icon
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
+1 -1
View File
@@ -1,6 +1,6 @@
asset: effectcraft.ico
title: EffectCraft Windows app icon
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
+2 -2
View File
@@ -1,8 +1,8 @@
asset: effectcraft.svg
title: EffectCraft app icon, master vector
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
added: 2026-10-02 by EffectCraft contributors (Claude agent, app icon)
notes: The owner's ArtCraft drawing of an engraved unicorn bust, vectorised at 2048 px with craftrules assets/logo-options/_tools/vectorize_tile.py (potrace; three colours). Canonical artwork; the other icon files derive from it.
notes: The owner's drawing of an engraved unicorn bust, vectorised at 2048 px with craftrules assets/logo-options/_tools/vectorize_tile.py (potrace; three colours). Canonical artwork; the other icon files derive from it.
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 128x128
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 16x16
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 24x24
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 256x256
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 32x32
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 48x48
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 512x512
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.png
title: EffectCraft app icon, Linux hicolor 64x64
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
@@ -1,6 +1,6 @@
asset: ai.storyteller.effectcraft.svg
title: EffectCraft app icon, Linux hicolor scalable
author: EffectCraft contributors (drawing by the project owner in ArtCraft)
author: EffectCraft contributors (drawing by the project owner)
source: original work
license: MIT OR Apache-2.0
license-file: assets/app-icon/LICENSE.txt
+2 -19
View File
@@ -1,4 +1,4 @@
//! Help menu: community and project links (the frontend opens `Event::OpenUrl`).
//! Help menu: project links (the frontend opens `Event::OpenUrl`).
use serde_json::{Value, json};
@@ -11,11 +11,6 @@ fn open(s: &mut Session, url: String) -> Result<Value> {
Ok(json!({"url": url}))
}
fn sibling(s: &mut Session, p: &Value) -> Result<Value> {
let slug = str_p(p, "app").unwrap_or("photocraft").to_ascii_lowercase();
if str_p(p, "kind") == Some("github") { open(s, links::github_of(&slug)) } else { open(s, links::page_of(&slug)) }
}
/// Help ▸ EffectCraft Help / Scripting Help / Expression Reference / Effect Reference.
fn docs(s: &mut Session, p: &Value) -> Result<Value> {
let page = match str_p(p, "page").unwrap_or("help") {
@@ -31,25 +26,13 @@ fn docs(s: &mut Session, p: &Value) -> Result<Value> {
pub fn specs() -> Vec<CommandSpec> {
vec![
cmd!("help.docs", "EffectCraft Help...", [], Some("F1"), "{page?: help|scripting|expressions|effects|agents}", always, docs),
cmd!("help.discord", "Join the ArtCraft Discord...", ["Help"], None, "{}", always, |s, _| open(s, links::DISCORD.into())),
cmd!("help.website", "ArtCraft Website", ["Help"], None, "{}", always, |s, _| open(s, links::WEBSITE.into())),
cmd!("help.appPage", "EffectCraft Home Page", ["Help"], None, "{}", always, |s, _| open(s, links::APP_PAGE.into())),
cmd!("help.github", "EffectCraft on GitHub", ["Help"], None, "{}", always, |s, _| open(s, links::GITHUB.into())),
cmd!("help.onlineTutorials", "Online Tutorials...", ["Help"], None, "{}", always, |s, _| open(s, links::APP_PAGE.into())),
cmd!("help.onlineTutorials", "Online Tutorials...", ["Help"], None, "{}", always, |s, _| open(s, links::GITHUB.into())),
cmd!("help.inAppTutorials", "In-App Tutorials...", ["Help"], None, "{} → the Home screen's Learn tab", always, |s, p| super::frontend(
s,
"help.inAppTutorials",
p
)),
cmd!("help.reportIssue", "Provide Feedback...", ["Help"], None, "{}", always, |s, _| open(s, links::ISSUES.into())),
cmd!(
"help.sibling",
"Other ArtCraft Apps",
[],
None,
"{app: photocraft|vectorcraft|filmcraft|lightcraft|pdfcraft|designcraft, kind?: page|github}",
always,
sibling
),
]
}
+1 -22
View File
@@ -1,27 +1,6 @@
//! Community and project links (shown in Help ▸, the About dialog, the start screen and the
//! header's Discord button).
//! Project links (shown in Help ▸, the About dialog and the start screen).
pub const APP_NAME: &str = "EffectCraft";
pub const APP_SLUG: &str = "effectcraft";
pub const DISCORD: &str = "https://discord.gg/artcraft";
pub const WEBSITE: &str = "https://getartcraft.com";
pub const APP_PAGE: &str = "https://getartcraft.com/apps/effectcraft";
pub const GITHUB: &str = "https://github.com/storytold/effectcraft";
pub const ISSUES: &str = "https://github.com/storytold/effectcraft/issues";
/// Sibling apps of the ArtCraft family: (name, what it is, GitHub repo, app page).
pub const SIBLINGS: &[(&str, &str)] = &[
("PhotoCraft", "photocraft"),
("VectorCraft", "vectorcraft"),
("FilmCraft", "filmcraft"),
("LightCraft", "lightcraft"),
("PdfCraft", "pdfcraft"),
("DesignCraft", "designcraft"),
];
pub fn github_of(slug: &str) -> String {
format!("https://github.com/storytold/{slug}")
}
pub fn page_of(slug: &str) -> String {
format!("https://getartcraft.com/apps/{slug}")
}
-3
View File
@@ -1230,11 +1230,8 @@ Help
Enable Logging | help.enableLogging
Reveal Logging File | help.revealLogFile
---
Join the ArtCraft Discord... | help.discord
Provide Feedback... | help.reportIssue
---
ArtCraft Website | help.website
EffectCraft Home Page | help.appPage
EffectCraft on GitHub | help.github
Open Demo Project | file.openDemoProject
[!mac] ---
+2 -3
View File
@@ -379,9 +379,8 @@ fn save_and_open_roundtrip() {
#[test]
fn help_links_emit_urls() {
let mut s = Session::default();
let r = s.execute("help.discord", json!({})).unwrap();
assert_eq!(r["url"], "https://discord.gg/artcraft");
assert!(s.drain_events().iter().any(|e| matches!(e, crate::Event::OpenUrl(u) if u.contains("discord"))));
s.execute("help.github", json!({})).unwrap();
assert!(s.drain_events().iter().any(|e| matches!(e, crate::Event::OpenUrl(u) if u.contains("github"))));
assert_eq!(s.execute("help.github", json!({})).unwrap()["url"], "https://github.com/storytold/effectcraft");
}
+1 -1
View File
@@ -74,7 +74,7 @@ fn help_tutorials() {
s.execute("help.onlineTutorials", json!({})).unwrap();
s.execute("help.inAppTutorials", json!({})).unwrap();
let ev = s.drain_events();
assert!(ev.iter().any(|e| matches!(e, Event::OpenUrl(u) if u == crate::links::APP_PAGE)));
assert!(ev.iter().any(|e| matches!(e, Event::OpenUrl(u) if u == crate::links::GITHUB)));
assert!(ev.iter().any(|e| matches!(e, Event::Frontend { command, .. } if command == "help.inAppTutorials")));
}
+2 -2
View File
@@ -13,7 +13,7 @@ fn comp_marker_dialog_fields_and_undo() {
let r = s
.execute(
"markers.set",
json!({"index": 0, "time": 1.51, "duration": 0.5, "comment": "Intro", "chapter": "One", "url": "https://getartcraft.com", "frameTarget": "_blank",
json!({"index": 0, "time": 1.51, "duration": 0.5, "comment": "Intro", "chapter": "One", "url": "https://example.com", "frameTarget": "_blank",
"cuePoint": {"name": "cue", "navigation": true, "params": [["k", "v"]]}, "protected": true, "label": "Aqua"}),
)
.unwrap();
@@ -25,7 +25,7 @@ fn comp_marker_dialog_fields_and_undo() {
assert!((m["duration"].as_f64().unwrap() - 0.5).abs() < 1e-9);
assert_eq!(m["comment"], "Intro");
assert_eq!(m["chapter"], "One");
assert_eq!(m["url"], "https://getartcraft.com");
assert_eq!(m["url"], "https://example.com");
assert_eq!(m["frameTarget"], "_blank");
assert_eq!(m["cuePoint"]["name"], "cue");
assert_eq!(m["cuePoint"]["navigation"], true);
+16 -34
View File
@@ -1,11 +1,11 @@
//! The Tools bar: home, the tool slots, tool options, snapping, workspaces and the community
//! buttons (Discord is always one click away).
//! The Tools bar: home, the tool slots, tool options, snapping, workspaces and the project
//! buttons.
use crate::i18n::{tr, tr_args};
use egui::{Align2, Color32, Rect, Sense, Stroke, StrokeKind, pos2, vec2};
use serde_json::json;
use crate::icons::{self, Icon};
use crate::icons::Icon;
use crate::state::Tool;
use crate::theme::Tokens;
use crate::widgets;
@@ -182,32 +182,15 @@ pub fn show(app: &mut EffectcraftApp, ui: &mut egui::Ui, rect: Rect) {
let label = p.text(pos2(snap.max.x + 4.0, cy), Align2::LEFT_CENTER, tr("Snapping"), Tokens::ui(12.0), t.text_dim);
snapping_options(app, ui, Rect::from_min_size(pos2(label.max.x + 2.0, cy - 9.0), vec2(18.0, 18.0)));
// Right side: community buttons, workspaces.
// Right side: project buttons, workspaces.
let mut rx = rect.max.x - 10.0;
// The pill fits its label (icon, gap, text) with even padding: it was a fixed 104 px with the
// text at its left, which left a wide gap on the right (#581).
let label = p.layout_no_wrap(tr("Discord").to_string(), Tokens::semibold(12.0), Color32::WHITE);
let discord = Rect::from_min_max(pos2(rx - (10.0 + 14.0 + 6.0 + label.size().x + 12.0), cy - 13.0), pos2(rx, cy + 13.0));
let dresp = ui.interact(discord, egui::Id::new("hdr-discord"), Sense::click());
let dc = Color32::from_rgb(0x58, 0x65, 0xf2);
p.rect_filled(discord, 13.0, if dresp.hovered() { dc.gamma_multiply(1.2) } else { dc });
icons::paint(&p, Rect::from_center_size(pos2(discord.min.x + 17.0, cy), vec2(14.0, 14.0)), Icon::Chat, Color32::WHITE);
p.galley(pos2(discord.min.x + 30.0, cy - label.size().y / 2.0), label, Color32::WHITE);
app.auto.add("header.discord", discord, "Join the ArtCraft Discord");
if dresp.on_hover_text(tr("Join the ArtCraft community on Discord")).clicked() {
let _ = app.session.execute("help.discord", json!({}));
}
rx = discord.min.x - 6.0;
for (id, icon, tip, cmd) in
[("hdr-github", Icon::Code, "EffectCraft on GitHub", "help.github"), ("hdr-web", Icon::Globe, "EffectCraft on getartcraft.com", "help.appPage")]
{
let r = Rect::from_min_max(pos2(rx - 26.0, cy - 13.0), pos2(rx, cy + 13.0));
if widgets::icon_button(ui, r, icon, false, &t, egui::Id::new(id)).on_hover_text(tip).clicked() {
let _ = app.session.execute(cmd, json!({}));
}
app.auto.add(&format!("header.{}", &id[4..]), r, tip);
rx = r.min.x - 4.0;
let tip = "EffectCraft on GitHub";
let r = Rect::from_min_max(pos2(rx - 26.0, cy - 13.0), pos2(rx, cy + 13.0));
if widgets::icon_button(ui, r, Icon::Code, false, &t, egui::Id::new("hdr-github")).on_hover_text(tip).clicked() {
let _ = app.session.execute("help.github", json!({}));
}
app.auto.add("header.github", r, tip);
rx = r.min.x - 4.0;
// Appearance: Sync with System, Light, Dark (a monitor, sun or moon), one click to the next.
let (icon, mode) = match app.session.prefs.appearance.appearance_mode.as_str() {
"auto" => (Icon::Monitor, tr("Sync with System")),
@@ -654,20 +637,19 @@ fn ws_menu(app: &mut EffectcraftApp, ui: &mut egui::Ui) {
}
}
/// The ArtCraft mark as supplied in `docs/brand` (the README's and getartcraft.com's logo; used
/// unmodified, see `docs/brand/LICENSE-brand.txt`).
static ARTCRAFT_MARK: &[u8] = include_bytes!("../../../docs/brand/artcraft-mark.png");
/// The EffectCraft app icon (`assets/app-icon`).
static APP_MARK: &[u8] = include_bytes!("../../../assets/app-icon/hicolor/128x128/apps/ai.storyteller.effectcraft.png");
/// The ArtCraft mark in `r` (decoded once into a mipmapped texture, so it stays crisp from the
/// The app mark in `r` (decoded once into a mipmapped texture, so it stays crisp from the
/// 24 px Tools bar to the About dialog). Nothing is drawn if it can't be decoded.
pub fn paint_logo(p: &egui::Painter, r: Rect) {
let ctx = p.ctx();
let id = egui::Id::new("artcraft-mark");
let id = egui::Id::new("app-mark");
let tex = ctx.data(|d| d.get_temp::<Option<egui::TextureHandle>>(id)).unwrap_or_else(|| {
let tex = image::load_from_memory_with_format(ARTCRAFT_MARK, image::ImageFormat::Png).ok().map(|img| {
let tex = image::load_from_memory_with_format(APP_MARK, image::ImageFormat::Png).ok().map(|img| {
let img = img.to_rgba8();
let ci = egui::ColorImage::from_rgba_unmultiplied([img.width() as usize, img.height() as usize], img.as_raw());
ctx.load_texture("artcraft-mark", ci, egui::TextureOptions::LINEAR.with_mipmap_mode(Some(egui::TextureFilter::Linear)))
ctx.load_texture("app-mark", ci, egui::TextureOptions::LINEAR.with_mipmap_mode(Some(egui::TextureFilter::Linear)))
});
ctx.data_mut(|d| d.insert_temp(id, tex.clone()));
tex
-18
View File
@@ -875,10 +875,7 @@ const SIMPLIFIED_CHINESE: &[(&str, &str, &str)] = &[
("help.systemReport", "System Compatibility Report...", "系统兼容性报告..."),
("help.enableLogging", "Enable Logging", "启用日志记录"),
("help.revealLogFile", "Reveal Logging File", "显示日志记录文件"),
("help.discord", "Join the ArtCraft Discord...", "加入 ArtCraft 的 Discord 社区..."),
("help.reportIssue", "Provide Feedback...", "提供反馈..."),
("help.website", "ArtCraft Website", "ArtCraft 网站"),
("help.appPage", "EffectCraft Home Page", "EffectCraft 主页"),
("help.github", "EffectCraft on GitHub", "GitHub 上的 EffectCraft"),
("file.openDemoProject", "Open Demo Project", "打开示例项目"),
];
@@ -1505,10 +1502,7 @@ const TRADITIONAL_CHINESE: &[(&str, &str, &str)] = &[
("help.systemReport", "System Compatibility Report...", "系統相容性報告..."),
("help.enableLogging", "Enable Logging", "啟用日誌記錄"),
("help.revealLogFile", "Reveal Logging File", "顯示日誌檔案"),
("help.discord", "Join the ArtCraft Discord...", "加入 ArtCraft 的 Discord 社群..."),
("help.reportIssue", "Provide Feedback...", "提供意見..."),
("help.website", "ArtCraft Website", "ArtCraft 網站"),
("help.appPage", "EffectCraft Home Page", "EffectCraft 首頁"),
("help.github", "EffectCraft on GitHub", "GitHub 上的 EffectCraft"),
("file.openDemoProject", "Open Demo Project", "開啟範例專案"),
];
@@ -2132,10 +2126,7 @@ const JAPANESE: &[(&str, &str, &str)] = &[
("help.systemReport", "System Compatibility Report...", "システム互換性レポート..."),
("help.enableLogging", "Enable Logging", "ログ記録を有効化"),
("help.revealLogFile", "Reveal Logging File", "ログファイルを表示"),
("help.discord", "Join the ArtCraft Discord...", "ArtCraft Discordに参加..."),
("help.reportIssue", "Provide Feedback...", "フィードバックを送信..."),
("help.website", "ArtCraft Website", "ArtCraftウェブサイト"),
("help.appPage", "EffectCraft Home Page", "EffectCraftホームページ"),
("help.github", "EffectCraft on GitHub", "GitHubのEffectCraft"),
("file.openDemoProject", "Open Demo Project", "デモプロジェクトを開く"),
];
@@ -2762,10 +2753,7 @@ const UKRAINIAN: &[(&str, &str, &str)] = &[
("help.systemReport", "System Compatibility Report...", "Звіт про сумісність системи..."),
("help.enableLogging", "Enable Logging", "Увімкнути журналювання"),
("help.revealLogFile", "Reveal Logging File", "Показати файл журналу"),
("help.discord", "Join the ArtCraft Discord...", "Приєднатися до Discord ArtCraft..."),
("help.reportIssue", "Provide Feedback...", "Надіслати відгук..."),
("help.website", "ArtCraft Website", "Вебсайт ArtCraft"),
("help.appPage", "EffectCraft Home Page", "Домашня сторінка EffectCraft"),
("help.github", "EffectCraft on GitHub", "EffectCraft на GitHub"),
("file.openDemoProject", "Open Demo Project", "Відкрити демонстраційний проєкт"),
];
@@ -3393,10 +3381,7 @@ const SPANISH: &[(&str, &str, &str)] = &[
("help.systemReport", "System Compatibility Report...", "Informe de compatibilidad del sistema..."),
("help.enableLogging", "Enable Logging", "Habilitar registro"),
("help.revealLogFile", "Reveal Logging File", "Mostrar archivo de registro"),
("help.discord", "Join the ArtCraft Discord...", "Unirse al Discord de ArtCraft..."),
("help.reportIssue", "Provide Feedback...", "Enviar comentarios..."),
("help.website", "ArtCraft Website", "Sitio web de ArtCraft"),
("help.appPage", "EffectCraft Home Page", "Página de inicio de EffectCraft"),
("help.github", "EffectCraft on GitHub", "EffectCraft en GitHub"),
("file.openDemoProject", "Open Demo Project", "Abrir proyecto de demostración"),
];
@@ -4022,10 +4007,7 @@ const PORTUGUESE: &[(&str, &str, &str)] = &[
("help.systemReport", "System Compatibility Report...", "Relatório de compatibilidade do sistema..."),
("help.enableLogging", "Enable Logging", "Ativar registro em log"),
("help.revealLogFile", "Reveal Logging File", "Revelar arquivo de log"),
("help.discord", "Join the ArtCraft Discord...", "Entrar no Discord do ArtCraft..."),
("help.reportIssue", "Provide Feedback...", "Enviar comentários..."),
("help.website", "ArtCraft Website", "Site do ArtCraft"),
("help.appPage", "EffectCraft Home Page", "Página inicial do EffectCraft"),
("help.github", "EffectCraft on GitHub", "EffectCraft no GitHub"),
("file.openDemoProject", "Open Demo Project", "Abrir projeto de demonstração"),
];
+8 -24
View File
@@ -95,8 +95,8 @@ const JAPANESE: &[(&str, &str)] = &[
("360 View Orientation", "360度ビューの方向"),
("3:2 Pulldown: {}", "3:2プルダウン:{}"),
(
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.",
"モーショングラフィックスとビジュアルエフェクト向けの、クリーンルーム方式で開発されたオープンソースのコンポジットソフトウェアです。macOS、Windows、Linuxでネイティブに動作し、ブラウザーでも使えます。ArtCraftクリエイティブアプリファミリーの一員です。",
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser.",
"モーショングラフィックスとビジュアルエフェクト向けの、クリーンルーム方式で開発されたオープンソースのコンポジットソフトウェアです。macOS、Windows、Linuxでネイティブに動作し、ブラウザーでも使えます。",
),
("About EffectCraft", "EffectCraftについて"),
("About...", "情報..."),
@@ -195,7 +195,6 @@ const JAPANESE: &[(&str, &str)] = &[
("Delete selected project items", "選択したプロジェクト項目を削除"),
("Delete this template", "このテンプレートを削除"),
("Depth of Field", "被写界深度"),
("Discord", "Discord"),
("Distribute Layers:", "レイヤーの分布:"),
("Don't Recover", "復元しない"),
("Don't Save", "保存しない"),
@@ -267,7 +266,6 @@ const JAPANESE: &[(&str, &str)] = &[
("Install from File…", "ファイルからインストール…"),
("Intensity", "強度"),
("Inverted", "反転"),
("Join the ArtCraft community on Discord", "DiscordでArtCraftコミュニティに参加"),
("Key: {}", "キー:{}"),
("LEARN", "学習"),
("Label", "ラベル"),
@@ -304,7 +302,6 @@ const JAPANESE: &[(&str, &str)] = &[
("Models folder: {}", "モデルフォルダー:{}"),
("Modifiers:", "修飾キー:"),
("More", "その他"),
("More ArtCraft apps", "ほかのArtCraftアプリ"),
("More tutorials", "ほかのチュートリアル"),
("Motion Blur", "モーションブラー"),
("Motion Blur: {}", "モーションブラー:{}"),
@@ -538,8 +535,8 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("360 View Orientation", "360 视图方向"),
("3:2 Pulldown: {}", "3:2 折叠:{}"),
(
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.",
"一款从零编写、开源的动态图形与视觉效果合成软件:原生支持 macOS、Windows 和 Linux,也可在浏览器中运行。属于 ArtCraft 创意应用家族。",
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser.",
"一款从零编写、开源的动态图形与视觉效果合成软件:原生支持 macOS、Windows 和 Linux,也可在浏览器中运行。",
),
("About EffectCraft", "关于 EffectCraft"),
("About...", "关于..."),
@@ -639,7 +636,6 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("Delete selected project items", "删除所选的项目项"),
("Delete this template", "删除此模板"),
("Depth of Field", "景深"),
("Discord", "Discord"),
("Distribute Layers:", "分布图层:"),
("Don't Recover", "不恢复"),
("Don't Save", "不保存"),
@@ -712,7 +708,6 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("Install from File…", "从文件安装…"),
("Intensity", "强度"),
("Inverted", "反转"),
("Join the ArtCraft community on Discord", "加入 ArtCraft 的 Discord 社区"),
("Key: {}", "按键:{}"),
("LEARN", "学习"),
("Label", "标签"),
@@ -751,7 +746,6 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("Models folder: {}", "模型文件夹:{}"),
("Modifiers:", "修饰键:"),
("More", "更多"),
("More ArtCraft apps", "更多 ArtCraft 应用"),
("More tutorials", "更多教程"),
("Motion Blur", "运动模糊"),
("Motion Blur: {}", "运动模糊:{}"),
@@ -1016,7 +1010,6 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("Import PDF / Illustrator File", "导入 PDF / Illustrator 文件"),
("Import Photoshop File", "导入 Photoshop 文件"),
("Interpret Unlabeled Alpha As", "将未标记的 Alpha 解释为"),
("Join the ArtCraft Discord", "加入 ArtCraft Discord"),
("Mercury GPU Acceleration ({})", "Mercury GPU 加速({})"),
("Mercury Software Only", "仅 Mercury 软件"),
("OCIO (built-in ACES config)", "OCIO(内置 ACES 配置)"),
@@ -1033,7 +1026,6 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[
("New Project", "新建项目"),
("Open Project…", "打开项目…"),
("Templates", "模板"),
("EffectCraft home page", "EffectCraft 主页"),
("EffectCraft on GitHub", "GitHub 上的 EffectCraft"),
("Motion graphics and visual effects · version {}", "动态图形和视觉效果 · 版本 {}"),
("New Composition", "新建合成"),
@@ -1073,8 +1065,8 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("360 View Orientation", "360 檢視方向"),
("3:2 Pulldown: {}", "3:2 摺疊:{}"),
(
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.",
"一款從零編寫、開源的動態圖形與視覺效果合成軟件:原生支援 macOS、Windows 和 Linux,也可在瀏覽器中執行。屬於 ArtCraft 創意應用家族。",
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser.",
"一款從零編寫、開源的動態圖形與視覺效果合成軟件:原生支援 macOS、Windows 和 Linux,也可在瀏覽器中執行。",
),
("About EffectCraft", "關於 EffectCraft"),
("About...", "關於..."),
@@ -1174,7 +1166,6 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("Delete selected project items", "刪除所選的專案項"),
("Delete this template", "刪除此範本"),
("Depth of Field", "景深"),
("Discord", "Discord"),
("Distribute Layers:", "分佈圖層:"),
("Don't Recover", "不恢復"),
("Don't Save", "不儲存"),
@@ -1247,7 +1238,6 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("Install from File…", "從文件安裝…"),
("Intensity", "強度"),
("Inverted", "反轉"),
("Join the ArtCraft community on Discord", "加入 ArtCraft 的 Discord 社區"),
("Key: {}", "按鍵:{}"),
("LEARN", "學習"),
("Label", "標籤"),
@@ -1286,7 +1276,6 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("Models folder: {}", "模型資料夾:{}"),
("Modifiers:", "修飾鍵:"),
("More", "更多"),
("More ArtCraft apps", "更多 ArtCraft 應用"),
("More tutorials", "更多教學"),
("Motion Blur", "運動模糊"),
("Motion Blur: {}", "動態模糊:{}"),
@@ -1546,7 +1535,6 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("Import PDF / Illustrator File", "Import PDF / Illustrator File"),
("Import Photoshop File", "Import Photoshop File"),
("Interpret Unlabeled Alpha As", "Interpret Unlabeled Alpha As"),
("Join the ArtCraft Discord", "加入 ArtCraft Discord"),
("Mercury GPU Acceleration ({})", "Mercury GPU Acceleration ({})"),
("Mercury Software Only", "Mercury Software Only"),
("OCIO (built-in ACES config)", "OCIO (built-in ACES config)"),
@@ -1563,7 +1551,6 @@ const TRADITIONAL_CHINESE: &[(&str, &str)] = &[
("New Project", "新增專案"),
("Open Project…", "開啟專案…"),
("Templates", "範本"),
("EffectCraft home page", "EffectCraft 首頁"),
("EffectCraft on GitHub", "GitHub 上的 EffectCraft"),
("Motion graphics and visual effects · version {}", "動態圖形與視覺效果 · 版本 {}"),
("New Composition", "新增合成"),
@@ -1605,8 +1592,8 @@ const UKRAINIAN: &[(&str, &str)] = &[
("360 View Orientation", "Орієнтація огляду 360°"),
("3:2 Pulldown: {}", "Перетворення кадрів 3:2: {}"),
(
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.",
"Незалежно розроблена програма з відкритим кодом для компонування анімованої графіки та візуальних ефектів: працює на macOS, Windows і Linux, а також у браузері. Належить до родини творчих програм ArtCraft.",
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser.",
"Незалежно розроблена програма з відкритим кодом для компонування анімованої графіки та візуальних ефектів: працює на macOS, Windows і Linux, а також у браузері.",
),
("About EffectCraft", "Про EffectCraft"),
("About...", "Про програму..."),
@@ -1712,7 +1699,6 @@ const UKRAINIAN: &[(&str, &str)] = &[
("Delete selected project items", "Видалити виділені елементи проєкту"),
("Delete this template", "Видалити цей шаблон"),
("Depth of Field", "Глибина різкості"),
("Discord", "Discord"),
("Distribute Layers:", "Розподілити шари:"),
("Don't Recover", "Не відновлювати"),
("Don't Save", "Не зберігати"),
@@ -1785,7 +1771,6 @@ const UKRAINIAN: &[(&str, &str)] = &[
("Install from File…", "Встановити з файлу…"),
("Intensity", "Інтенсивність"),
("Inverted", "Інвертовано"),
("Join the ArtCraft community on Discord", "Приєднайтеся до спільноти ArtCraft у Discord"),
("Key: {}", "Клавіша: {}"),
("LEARN", "НАВЧАННЯ"),
("Label", "Мітка"),
@@ -1824,7 +1809,6 @@ const UKRAINIAN: &[(&str, &str)] = &[
("Models folder: {}", "Тека моделей: {}"),
("Modifiers:", "Модифікатори:"),
("More", "Більше"),
("More ArtCraft apps", "Інші програми ArtCraft"),
("More tutorials", "Інші уроки"),
("Motion Blur", "Розмиття руху"),
("Motion Blur: {}", "Розмиття руху: {}"),
+5 -27
View File
@@ -295,39 +295,17 @@ fn about_main(app: &mut EffectcraftApp, ui: &mut egui::Ui, t: &Tokens, cmd: &mut
t.text_dim,
);
ui.add_space(12.0);
ui.label(tr("A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps."));
ui.label(tr("A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser."));
ui.add_space(14.0);
let links: [(Icon, &str, &str, &'static str); 4] = [
(Icon::Chat, "Join the ArtCraft Discord", effectcraft_engine::links::DISCORD, "help.discord"),
(Icon::Globe, "ArtCraft website", effectcraft_engine::links::WEBSITE, "help.website"),
(Icon::Sparkle, "EffectCraft home page", effectcraft_engine::links::APP_PAGE, "help.appPage"),
(Icon::Code, "Source code on GitHub", effectcraft_engine::links::GITHUB, "help.github"),
];
let links: [(Icon, &str, &str, &'static str); 1] = [(Icon::Code, "Source code on GitHub", effectcraft_engine::links::GITHUB, "help.github")];
for (icon, label, url, c) in links {
let (r, resp) = ui.allocate_exact_size(vec2(ui.available_width(), 30.0), Sense::click());
let p = ui.painter();
let discord = c == "help.discord";
p.rect_filled(
r,
6.0,
if discord {
Color32::from_rgb(0x58, 0x65, 0xf2)
} else if resp.hovered() {
t.hover
} else {
t.field_bg
},
);
let foreground = if discord { Color32::WHITE } else { t.text };
p.rect_filled(r, 6.0, if resp.hovered() { t.hover } else { t.field_bg });
let foreground = t.text;
icons::paint(p, Rect::from_center_size(pos2(r.min.x + 18.0, r.center().y), vec2(15.0, 15.0)), icon, foreground);
p.text(pos2(r.min.x + 36.0, r.center().y), Align2::LEFT_CENTER, tr(label), Tokens::medium(12.5), foreground);
p.text(
pos2(r.max.x - 12.0, r.center().y),
Align2::RIGHT_CENTER,
url,
Tokens::ui(11.0),
if discord { Color32::from_white_alpha(200) } else { t.text_dim },
);
p.text(pos2(r.max.x - 12.0, r.center().y), Align2::RIGHT_CENTER, url, Tokens::ui(11.0), t.text_dim);
app.auto.add(&format!("about.{c}"), r, label);
if resp.clicked() {
*cmd = Some(c);
+7 -32
View File
@@ -1,6 +1,6 @@
//! The Home screen, laid out like After Effects' (shown over the whole workspace at launch, from
//! the Tools bar's Home button and by the Learn workspace). A left rail holds New Project / Open
//! Project, the Home / Templates / Learn pages and, at its foot, the ArtCraft community links.
//! Project, the Home / Templates / Learn pages and, at its foot, the project links.
//! The Home page welcomes you with quick-start tiles (New Composition, the demo project, Import,
//! New from Template) over the recent projects (File ▸ Open Recent, from Settings): a filterable
//! table with thumbnails and Name / Opened / Size / Kind columns. Templates is the New from
@@ -270,16 +270,9 @@ fn rail_ui(app: &mut EffectcraftApp, ui: &mut egui::Ui, p: &egui::Painter, rail:
}
y += 38.0;
}
// Community links at the foot (below the pages when the window is short).
let links = [
(Icon::Chat, "Join the ArtCraft Discord", "help.discord"),
(Icon::Globe, "getartcraft.com", "help.website"),
(Icon::Globe, "EffectCraft home page", "help.appPage"),
(Icon::Code, "EffectCraft on GitHub", "help.github"),
];
let sib = effectcraft_engine::links::SIBLINGS;
let sib_rows = sib.len().div_ceil(2) as f32;
let foot_h = 22.0 + links.len() as f32 * 30.0 + 22.0 + sib_rows * 26.0;
// Project link at the foot (below the pages when the window is short).
let links = [(Icon::Code, "EffectCraft on GitHub", "help.github")];
let foot_h = 22.0 + links.len() as f32 * 30.0;
let mut cy = (rail.max.y - 16.0 - foot_h).max(y + 16.0);
p.line_segment([pos2(x0, cy - 10.0), pos2(x0 + w, cy - 10.0)], Stroke::new(1.0, t.separator));
p.text(pos2(x0, cy + 6.0), Align2::LEFT_CENTER, tr("Community"), Tokens::semibold(12.0), t.text_dim);
@@ -287,34 +280,17 @@ fn rail_ui(app: &mut EffectcraftApp, ui: &mut egui::Ui, p: &egui::Painter, rail:
for (icon, label, cmd) in links {
let r = Rect::from_min_size(pos2(x0, cy), vec2(w, 26.0));
let resp = ui.interact(r, egui::Id::new(("home-link", cmd)), Sense::click());
let discord = cmd == "help.discord";
if discord {
p.rect_filled(r, 13.0, Color32::from_rgb(0x58, 0x65, 0xf2));
} else if resp.hovered() {
if resp.hovered() {
p.rect_filled(r, 13.0, t.hover);
}
let col = if discord { Color32::WHITE } else { t.text };
icons::paint(p, Rect::from_center_size(pos2(r.min.x + 16.0, r.center().y), vec2(13.0, 13.0)), icon, col);
p.text(pos2(r.min.x + 30.0, r.center().y), Align2::LEFT_CENTER, tr(label), Tokens::medium(12.0), col);
icons::paint(p, Rect::from_center_size(pos2(r.min.x + 16.0, r.center().y), vec2(13.0, 13.0)), icon, t.text);
p.text(pos2(r.min.x + 30.0, r.center().y), Align2::LEFT_CENTER, tr(label), Tokens::medium(12.0), t.text);
app.auto.add(&format!("home.{cmd}"), r, label);
if resp.clicked() {
let _ = app.session.execute(cmd, json!({}));
}
cy += 30.0;
}
p.text(pos2(x0, cy + 8.0), Align2::LEFT_CENTER, tr("More ArtCraft apps"), Tokens::ui(11.0), t.text_faint);
cy += 20.0;
let sw = (w - 6.0) / 2.0;
for (i, (name, slug)) in sib.iter().enumerate() {
let r = Rect::from_min_size(pos2(x0 + (i % 2) as f32 * (sw + 6.0), cy + (i / 2) as f32 * 26.0), vec2(sw, 22.0));
let resp = ui.interact(r, egui::Id::new(("sib", *slug)), Sense::click());
p.rect_filled(r, 11.0, if resp.hovered() { t.hover } else { t.field_bg });
p.text(r.center(), Align2::CENTER_CENTER, *name, Tokens::ui(11.0), t.text);
app.auto.add(&format!("home.sibling.{slug}"), r, name);
if resp.clicked() {
let _ = app.session.execute("help.sibling", json!({"app": slug}));
}
}
}
/// The Home page: the welcome, quick-start tiles and the recent projects table.
@@ -569,7 +545,6 @@ mod tests {
"home.file.open",
"home.app.newComp",
"home.file.openDemoProject",
"home.help.discord",
"home.help.github",
"home.recent.0",
"home.filter",
+1 -1
View File
@@ -486,7 +486,7 @@ mod tests {
assert_eq!(effectcraft_engine::color::Label::ALL[d.label].name(), "Blue");
d.duration = 0.5;
d.chapter = "Ch".into();
d.url = "https://getartcraft.com".into();
d.url = "https://example.com".into();
d.frame_target = "_self".into();
d.protected = true;
d.cue = false;
+1 -1
View File
@@ -225,7 +225,7 @@ fn theme_preview(ui: &mut egui::Ui, kind: ThemeKind, width: f32) {
painter.rect_filled(rect, 3.0, p.app_bg);
let bar = Rect::from_min_size(rect.min, vec2(rect.width(), 13.0));
painter.rect_filled(bar, 0.0, p.header_bg);
// The brand mark, the tools (the Selection tool is active) and the Discord pill.
// The brand mark, the tools (the Selection tool is active).
painter.rect_filled(Rect::from_min_size(bar.min + vec2(4.0, 3.0), vec2(7.0, 7.0)), 2.0, p.accent);
for i in 0..7 {
let c = if i == 0 { p.accent } else { p.icon };
-11
View File
@@ -37,17 +37,6 @@ fn click(h: &mut Harness<'_, EffectcraftApp>, id: &str) {
h.run_steps(2);
}
/// #581: the header's Discord pill fits its label with even padding (it was a fixed 104 px with
/// the text at its left).
#[test]
fn discord_pill_fits_its_label() {
let h = harness();
let e = h.state().auto.find("header.discord").expect("the Discord pill").clone();
let text = h.ctx.fonts_mut(|f| f.layout_no_wrap("Discord".into(), effectcraft_ui_egui::theme::Tokens::semibold(12.0), egui::Color32::WHITE).size().x);
// Padding 10, the 14 px icon, a 6 px gap, the text, padding 12.
assert!((e.rect[2] - (text + 42.0)).abs() < 0.5, "{} for a {text} px label", e.rect[2]);
}
#[test]
fn window_menu_opens_the_new_panels() {
let mut h = harness();
-42
View File
@@ -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 EffectCraft'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 EffectCraft itself, its documentation and its official builds, to identify EffectCraft 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 EffectCraft, 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 EffectCraft.
Forks and modified versions
If you distribute or publish a modified version of EffectCraft, 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 EffectCraft 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.
Binary file not shown.

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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
File diff suppressed because one or more lines are too long

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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

-8
View File
@@ -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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

-8
View File
@@ -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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
Binary file not shown.

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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
-4
View File
@@ -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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

-8
View File
@@ -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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: the one exception to the open-licence rule (AGENTS.md §1.8). Forks and modified versions must remove it (docs/brand/LICENSE-brand.txt).
-4
View File
@@ -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

-8
View File
@@ -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 and not covered by EffectCraft's MIT OR Apache-2.0 license; usable only unmodified and only in the context of EffectCraft, under docs/brand/LICENSE-brand.txt.
license-file: docs/brand/LICENSE-brand.txt
added: 2026-10-01 by Claude (agent) for Brandon Thomas
notes: First-party ArtCraft brand mark owned by the ArtCraft Team, kept in docs/brand for the README and brand use: 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 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -252,7 +252,7 @@ agent-generated maintainer replies:
list of Mac issues, so people are trying it on real work.
- **Open issues (136):** ≈ 95 are core-path bugs (masks, keyframes, timeline, preview, audio,
text, render, crashes; this includes 15 community `fix(...)` proposals), ≈ 40 are feature
requests or niche (plug-in hosting, OpenFX, ffmpeg export, Discord presence, Store listing,
requests or niche (plug-in hosting, OpenFX, ffmpeg export, Store listing,
rigging tools). Mostly core-path bugs, which matches the discounts above.
## Out of scope by design
@@ -828,7 +828,7 @@ meanwhile. Footage, solids, proxies and the project settings are hashed by value
states are kept, so a long drag doesn't hold on to every intermediate state. The disk cache's
content key now also covers proxies and Use Proxy.
Since (M13.30–M13.31): the Tools bar and About dialog carry the ArtCraft mark. The
Since (M13.30–M13.31): the Tools bar and About dialog carry the app mark. The
Home screen is laid out like After Effects' and covers the whole workspace. A left rail holds New
Project / Open Project, the Home, Templates and Learn pages and, at its foot, the community
links. The Home page has a "Welcome to EffectCraft" heading, quick-start tiles (New Composition,
@@ -20,10 +20,10 @@
<launchable type="desktop-id">ai.storyteller.effectcraft.desktop</launchable>
<icon type="stock">ai.storyteller.effectcraft</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/effectcraft</url>
<url type="homepage">https://github.com/storytold/effectcraft</url>
<url type="bugtracker">https://github.com/storytold/effectcraft/issues</url>
<url type="help">https://github.com/storytold/effectcraft</url>
<url type="contact">https://discord.gg/artcraft</url>
<url type="contact">https://github.com/storytold/effectcraft/issues</url>
<categories>
<category>Graphics</category>
<category>RasterGraphics</category>
+1 -1
View File
@@ -14,7 +14,7 @@ section: graphics
priority: optional
maintainer: ${EFFECTCRAFT_MAINTAINER}
vendor: Learning Machines LLC
homepage: https://getartcraft.com/apps/effectcraft
homepage: https://github.com/storytold/effectcraft
license: MIT OR Apache-2.0
description: |-
Open-source motion graphics and visual effects compositor.
+3 -3
View File
@@ -27,9 +27,9 @@
<Icon Id="EffectcraftIcon.ico" SourceFile="$(var.IconPath)" />
<Property Id="ARPPRODUCTICON" Value="EffectcraftIcon.ico" />
<Property Id="ARPURLINFOABOUT" Value="https://getartcraft.com/apps/effectcraft" />
<Property Id="ARPURLUPDATEINFO" Value="https://getartcraft.com/apps/effectcraft" />
<Property Id="ARPHELPLINK" Value="https://discord.gg/artcraft" />
<Property Id="ARPURLINFOABOUT" Value="https://github.com/storytold/effectcraft" />
<Property Id="ARPURLUPDATEINFO" Value="https://github.com/storytold/effectcraft" />
<Property Id="ARPHELPLINK" Value="https://github.com/storytold/effectcraft/issues" />
<!-- An upgrade, repair or silent reinstall goes where the installed copy already is: the App Paths
"Path" value written below, or for releases before this installer change (no Path value; they
Submodule tools/craft-skills added at 2c1fed9237