Die Geschichte: eine Kündigungsgebühr zu viel
Die Geschichte, die in diesen Wochen durch Foren und soziale Netzwerke geht: ArtCraft sei aus Wut entstanden, sein Autor sei „abgezockt worden“. Hinter dem Projekt steht Brandon Thomas, ein Softwareingenieur aus Atlanta (USA) mit fünfzehn Jahren Berufserfahrung, der auf Reddit als u/ai_art_is_art schrieb. Das Wort „Abzocke“ stammt vom Publikum; er selbst erzählt, Adobe habe ihm die Kündigungsgebühr seines Abos berechnet.
„Sie haben mir mehrmals die ‚Kündigungsgebühr‘ berechnet, und seitdem hasse ich sie“, schrieb er auf Reddit. Auf Hacker News sagte er, er sei zu oft auf dieses „Dark Pattern“ hereingefallen: die Strafgebühr, wenn man ein monatlich bezahltes Jahresabo vorzeitig beendet. Eine Einzelbeschwerde ist das nicht: Im Juni 2024 verklagte das US-Justizministerium Adobe, weil es diese Gebühren verschleiert und die Kündigung erschwert habe. Adobe betont, seine Bedingungen seien transparent.
Seine Antwort: die Programme neu bauen und verschenken. Mit Hilfe von Claude, der KI von Anthropic, und der Sprache Rust veröffentlichte er zwischen Ende September und Anfang Oktober 2026 die ersten sieben Apps auf GitHub – das Gegenstück zu Photoshop, Illustrator, Premiere, Lightroom, After Effects, InDesign und Acrobat – und ergänzte in wenigen Wochen Word, PowerPoint, Excel, AutoCAD, Pro Tools und Figma. Er versichert, es seien „Clean-Room“-Neuimplementierungen nach den öffentlichen Spezifikationen der Dateiformate, ohne fremden Code.
Sein Satz „Software ist vorbei“ ging um die Welt: Wenn ein Mensch mit KI in Wochen nachbauen kann, was Jahrzehnte dauerte, wird es kostenpflichtige Software schwer haben. Es gibt Zweifel: Professor Andrés Guadamuz von der University of Sussex erinnert daran, dass noch offen ist, ob dieser „Clean-Room“-Prozess einer Prüfung standhält und wie viel Code er und wie viel die KI geschrieben hat. Thomas beteuert, es sei „keine Eintagsfliege, die wieder stirbt“, und das fast tägliche Versionstempo gibt ihm bisher recht.
ArtCraft ist ein Open-Source-Projekt (Lizenz MIT oder Apache-2.0) des Teams storytold, das die Werkzeuge, mit denen wir täglich kreativ arbeiten, von Grund auf in Rust neu schreibt. Es sind native, schlanke Programme ohne Abo, die nachahmen, wie die bekanntesten kommerziellen Programme arbeiten, ohne deren Code zu kopieren. Sie laufen unter Windows, macOS, Linux und FreeBSD, viele auch im Browser, und fast jede Woche erscheinen neue Versionen. Die genannten Markennamen dienen nur zur Orientierung: Diese Programme haben nichts mit diesen Marken zu tun.
Die Werkzeuge im Einzelnen
ArtCraft Launcher v0.8.1
Hier anfangen. Er installiert alle anderen: zeigt den ganzen Katalog, installiert jede App mit einem Klick in der passenden Version für deinen Rechner, prüft, ob die Datei unbeschädigt ist, und meldet Updates. Ein einziges Paket mit allem gibt es nicht, aber dieser Launcher kommt dem am nächsten.
PhotoCraft v0.16.0
Der Bildeditor im Stil von Photoshop: Ebenen, Auswahlen, Pinsel, Korrekturen und Retusche. Er ist das beliebteste Werkzeug des Projekts auf GitHub.
LightCraft v0.14.0
Fotobibliothek und nichtdestruktive RAW-Entwicklung à la Lightroom: Fotos ordnen und Belichtung, Farbe und Zuschnitt anpassen, ohne je die Originaldatei anzutasten.
VectorCraft v0.17.0
Vektorillustration wie in Illustrator: Kurven, Formen, Pfade und Text, die sich ohne Qualitätsverlust vergrößern lassen. Für Logos, Icons und Plakate.
FilmCraft v0.13.0
Nichtlinearer Videoschnitt, ähnlich wie Premiere Pro: Zeitleiste mit mehreren Spuren, Schnitte, Farbkorrektur und Ton.
EffectCraft v0.17.0
Motion Graphics, Compositing und visuelle Effekte in der Art von After Effects: Titel, Keyframe-Animation und Ebenen, die sich kombinieren lassen.
SoundCraft v0.13.1
Audio-Workstation zum Aufnehmen, Schneiden und Mischen, inspiriert von Pro Tools: mehrere Spuren, Schnitte, Effekte und Endmischung.
DesignCraft v0.13.0
Layout und Publishing im Stil von InDesign: Zeitschriften, Broschüren und Bücher mit Seiten, Spalten, Textformaten und Bildern.
FigCraft v0.11.2
Interface-Design und Prototyping wie in Figma: App- und Web-Bildschirme, wiederverwendbare Komponenten und Entwürfe, die zeigen, wie etwas funktionieren wird, bevor es programmiert ist.
PdfCraft v0.14.0
Zum Lesen, Ordnen und Schützen von PDFs, in der Art von Acrobat: öffnen, kommentieren, Seiten umsortieren und geschützte Dokumente speichern.
WordCraft v0.11.0
Textverarbeitung ähnlich wie Word, für Briefe, Berichte und Dokumente mit Formatvorlagen, Tabellen und Bildern.
DeckCraft v0.11.1
Präsentationen und Folien im Stil von PowerPoint: Folien mit Text, Bildern und Formen für die Vollbildpräsentation.
GridCraft v0.12.1
Tabellenkalkulation wie Excel: Formeln, Datentabellen, Diagramme sowie Sortieren und Filtern von Daten.
CADCraft v0.13.0
Computergestütztes Konstruieren und technisches Zeichnen in der Art von AutoCAD: Pläne mit exakten Maßen, Ebenen und Bemaßungen.
ArtCraft v0.41.0
Die App, nach der das Projekt benannt ist, und die einzige, die für sich steht: ein Studio, um mit künstlicher Intelligenz Bilder und Videos zu erstellen, gedacht für Künstler, Designer und Filmemacher. Vorerst nur für Windows und Mac.
Alle aufbewahren: Quellcode und Programmdateien
Wer gern von allem eine Kopie hat (falls ein Projekt eines Tages verschwindet, oder um ohne Internet zu installieren): Dieses Linux-Skript lädt den Quellcode jedes Werkzeugs und alle Programmdateien der neuesten Version herunter, sortiert in Ordner nach Werkzeug und System (Windows, macOS, Linux, FreeBSD und Web). Entpacken und ausführen; das Argument ist der Zielordner, mit PLATFORMS und EXCLUDE wählst du aus, was geladen wird. (Die Kommentare sind auf Spanisch.)
⬇ Skript herunterladen (artcraft-mirror.zip)
chmod +x artcraft-mirror.sh
./artcraft-mirror.sh ~/artcraft
PLATFORMS="windows linux" EXCLUDE='riscv64|aarch64' ./artcraft-mirror.sh ~/artcraft
- Unterbrechen erlaubt: Bricht es ab, einfach neu starten – es macht dort weiter, wo es aufgehört hat.
- Lädt nur Neues: Erscheint eine Version, legt es deren Ordner an und lässt die älteren unberührt.
- Prüft alles anhand der SHA-256-Summen, die jede Version veröffentlicht.
- Braucht viel Platz: Alle Plattformen zusammen sind etwa 24 GB pro Version; wer nur einige braucht, filtert.
Ganzes Skript anzeigen
#!/usr/bin/env bash
# artcraft-mirror.sh — espejo local de las Craft Apps de ArtCraft (github.com/storytold)
#
# Estructura que genera:
# <DEST>/<herramienta>/code/<rama>-<herramienta>-AAAAMMDD.zip (+ .sha con el commit)
# <DEST>/<herramienta>/release-<versión>/{windows,macos,linux,freebsd,web,otros}/...
# <DEST>/<herramienta>/release-<versión>/SHA256SUMS.txt
#
# - Reanudable: las descargas van a *.part y continúan con Range (curl -C -).
# Una release se da por terminada sólo cuando todo se verificó contra SHA256SUMS
# (queda el marcador .complete). Si se corta, se vuelve a ejecutar y sigue.
# - Incremental: sólo mira la última release de cada herramienta; las carpetas
# release-* anteriores y los zip de código de días anteriores no se tocan.
# - El código fuente se baja sólo si el commit de la rama principal cambió.
#
# Uso:
# ./artcraft-mirror.sh [DEST] (DEST por defecto: carpeta del script)
# Variables opcionales:
# GITHUB_TOKEN=ghp_... sube el límite de la API de 60 a 5000 llamadas/h
# PLATFORMS="windows linux macos" sólo estas plataformas (por defecto todas)
# EXCLUDE='riscv64|aarch64|flatpak' regex de nombres de archivo a omitir
# TOOLS="photocraft cadcraft" sólo estas herramientas
# EXTRA_TOOLS="anicraft" añadir repos de storytold no incluidos en el catálogo
# SKIP_CODE=1 / SKIP_RELEASES=1
set -uo pipefail
OWNER=storytold
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
DEST=${1:-$SCRIPT_DIR}
PLATFORMS=${PLATFORMS:-"windows macos linux freebsd web otros"}
EXCLUDE=${EXCLUDE:-}
TODAY=$(date +%Y%m%d)
# Catálogo de respaldo por si no se puede leer el del launcher
FALLBACK_TOOLS="photocraft vectorcraft filmcraft lightcraft pdfcraft effectcraft designcraft
figcraft wordcraft soundcraft deckcraft cadcraft gridcraft"
# Fuera del catálogo del launcher pero con releases propias
ALWAYS_TOOLS="craft-launcher artcraft"
for bin in curl jq git sha256sum flock; do
command -v "$bin" >/dev/null || { echo "Falta '$bin'" >&2; exit 1; }
done
mkdir -p "$DEST"
exec 9>"$DEST/.artcraft-mirror.lock"
flock -n 9 || { echo "Ya hay otra ejecución en curso en $DEST" >&2; exit 1; }
log() { printf '[%s] %s\n' "$(date +%H:%M:%S)" "$*"; }
warn() { printf '[%s] AVISO: %s\n' "$(date +%H:%M:%S)" "$*" >&2; }
api() {
local auth=()
[[ -n ${GITHUB_TOKEN:-} ]] && auth=(-H "Authorization: Bearer $GITHUB_TOKEN")
curl -fsSL --retry 3 -H "Accept: application/vnd.github+json" "${auth[@]}" \
"https://api.github.com/$1"
}
# Descarga: $1 url, $2 destino final, $3 tamaño esperado.
# Con tamaño conocido continúa el .part (Range); sin él (zip de código, generado
# al vuelo y sin Range) empieza de cero.
fetch() {
local url=$1 out=$2 size=${3:-} part="$2.part" have resume=()
mkdir -p "$(dirname "$out")"
if [[ -n $size && -f $part ]]; then
have=$(stat -c %s "$part")
if (( have == size )); then mv -f "$part" "$out"; return 0; fi
if (( have > size )); then rm -f "$part"; fi
resume=(-C -)
else
rm -f "$part"
fi
curl -fL --retry 5 --retry-delay 5 --retry-all-errors "${resume[@]}" \
--progress-bar -o "$part" "$url" || return 1
mv -f "$part" "$out"
}
platform_of() {
case $1 in
SHA256SUMS*) echo . ;;
*windows*|*.msi|*.exe) echo windows ;;
*macos*|*.dmg|*.app.tar.gz|*universal*) echo macos ;;
*freebsd*) echo freebsd ;;
*linux*|*.AppImage*|*.deb|*.rpm|*.flatpak) echo linux ;;
*-web-*) echo web ;;
*) echo otros ;;
esac
}
wanted() {
local name=$1 plat=$2
[[ $plat == . ]] && return 0
[[ " $PLATFORMS " == *" $plat "* ]] || return 1
[[ -n $EXCLUDE && $name =~ $EXCLUDE ]] && return 1
return 0
}
tool_list() {
if [[ -n ${TOOLS:-} ]]; then echo $TOOLS; return; fi
local cat
cat=$(curl -fsSL "https://raw.githubusercontent.com/$OWNER/craft-launcher/main/crates/core/src/catalog.rs" 2>/dev/null \
| grep -oE "\"$OWNER/[a-z0-9-]+\"" | tr -d '"' | cut -d/ -f2 | grep -v '^craft-launcher$' | sort -u)
[[ -z $cat ]] && { warn "no pude leer el catálogo del launcher; uso la lista interna"; cat=$FALLBACK_TOOLS; }
echo $cat $ALWAYS_TOOLS ${EXTRA_TOOLS:-} | tr ' ' '\n' | awk 'NF && !seen[$0]++'
}
mirror_code() {
local tool=$1 dir="$DEST/$1/code" head branch sha last
head=$(git ls-remote --symref "https://github.com/$OWNER/$tool" HEAD 2>/dev/null) \
|| { warn "$tool: no pude consultar el repositorio"; return 1; }
branch=$(awk '/^ref:/ {sub("refs/heads/","",$2); print $2}' <<<"$head")
sha=$(awk '$2=="HEAD" && $1!="ref:" {print $1}' <<<"$head")
mkdir -p "$dir"
last=$(ls -1 "$dir"/*.zip.sha 2>/dev/null | sort | tail -1)
if [[ -n $last && $(<"$last") == "$sha" ]]; then
log "$tool: código al día ($branch@${sha:0:8})"
return 0
fi
local zip="$dir/$branch-$tool-$TODAY.zip"
log "$tool: bajando código $branch@${sha:0:8} → $(basename "$zip")"
# El zip por commit garantiza que el archivo corresponde al sha anotado
fetch "https://github.com/$OWNER/$tool/archive/$sha.zip" "$zip" || { warn "$tool: falló el zip"; return 1; }
echo "$sha" > "$zip.sha"
}
verify() { # $1 archivo, $2 SHA256SUMS → 0 ok / 1 mal / 2 sin suma publicada
local file=$1 sums=$2 expected
[[ -f $sums ]] || return 2
expected=$(awk -v n="$(basename "$file")" '{f=$2; sub(/^\*/,"",f)} f==n {print $1}' "$sums")
[[ -z $expected ]] && return 2
[[ $(sha256sum "$file" | cut -d' ' -f1) == "$expected" ]]
}
mirror_release() {
local tool=$1 json tag ver rdir
json=$(api "repos/$OWNER/$tool/releases/latest") || { warn "$tool: sin releases o límite de API alcanzado"; return 1; }
tag=$(jq -r .tag_name <<<"$json")
ver=${tag#"$tool"-}; ver=${ver#v}
rdir="$DEST/$tool/release-$ver"
if [[ -f $rdir/.complete && $(<"$rdir/.complete") == "$PLATFORMS|$EXCLUDE" ]]; then
log "$tool: release $ver ya completa"
return 0
fi
log "$tool: release $ver"
mkdir -p "$rdir"
jq -c '{tag_name, name, published_at, html_url, body}' <<<"$json" > "$rdir/release.json"
local ok=1 name url size plat out sums="$rdir/SHA256SUMS.txt"
# SHA256SUMS primero para poder verificar el resto
while IFS=$'\t' read -r name url size; do
plat=$(platform_of "$name")
wanted "$name" "$plat" || continue
if [[ $plat == . ]]; then out="$rdir/$name"; else out="$rdir/$plat/$name"; fi
if [[ -f $out ]]; then
verify "$out" "$sums"; case $? in
0) continue ;;
2) [[ $(stat -c %s "$out") == "$size" ]] && continue ;;
esac
warn "$tool: $name no coincide, se vuelve a bajar"; rm -f "$out"
fi
log " ↓ ${out#"$rdir"/} ($((size / 1048576)) MiB)"
if ! fetch "$url" "$out" "$size"; then warn " falló $name"; ok=0; continue; fi
verify "$out" "$sums"; case $? in
1) warn " checksum INCORRECTO: $name (se borra)"; rm -f "$out"; ok=0 ;;
2) [[ $name != SHA256SUMS* ]] && [[ $(stat -c %s "$out") != "$size" ]] && { warn " tamaño incorrecto: $name"; rm -f "$out"; ok=0; } ;;
esac
done < <(jq -r '.assets | sort_by(.name | startswith("SHA256SUMS") | not)[]
| [.name, .browser_download_url, .size] | @tsv' <<<"$json")
if (( ok )); then echo "$PLATFORMS|$EXCLUDE" > "$rdir/.complete"; log "$tool: release $ver completa ✔"
else warn "$tool: release $ver incompleta; vuelve a ejecutar el script para continuar"; return 1; fi
}
fail=0
for tool in $(tool_list); do
echo "──────── $tool"
[[ -z ${SKIP_CODE:-} ]] && { mirror_code "$tool" || fail=1; }
[[ -z ${SKIP_RELEASES:-} ]] && { mirror_release "$tool" || fail=1; }
done
(( fail )) && { warn "Hubo errores; ejecuta de nuevo para reintentar lo pendiente."; exit 1; }
log "Todo al día en $DEST"
Die Programme sind sehr jung, fast alle als frühe Alpha gekennzeichnet: Sie versprechen viel, ersetzen professionelle Werkzeuge für ernsthafte Arbeit aber noch nicht. Ausprobieren, Dateien sichern und Fehler auf ihrem GitHub melden.
Quellen
- GitHub · storytold (todas las Crafting Apps)
- GitHub · ArtCraft Launcher
- GitHub · ArtCraft
- getartcraft.com
- Al Jazeera (14-10-2026) · How AI apps are offering free substitutes for Big Tech software
- Amateur Photographer (08-10-2026) · This home coder got so sick of Adobe he built free, open-source versions of Photoshop, Lightroom and Premiere
- PetaPixel (07-10-2026) · Someone Rebuilt Free, Open-Source Versions of Photoshop, Premiere, and Lightroom Using AI
- Creative Bloq · Someone just rebuilt Adobe Creative Cloud with AI – then gave it away for free
- CineD · ArtCraft Releases Free Open-Source Adobe Alternatives
- Korben · I tested the 12 free clones of Adobe and Microsoft