gallery-dl-studio
The npx commands (vite, electron-builder) are used to build the project from its own source code, which is downloaded from the project's official GitHub repository; this is normal for building Electron apps and does not execute arbitrary remote code.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The npx commands (vite, electron-builder) are used to build the project from its own source code, which is downloaded from the project's official GitHub repository; this is normal for building Electron apps and does not execute arbitrary remote code.
1 higher static finding superseded - not the current verdict (shown for transparency)
remote_code_tool
`npx`/`bunx`/`pnpm dlx`/`deno run <url>` downloads AND runs a remote package at build time — the moral equivalent of piping a download into a shell. Severity downgraded: Node.js consumer context.
-
PKGBUILD:34
npx vite build -
PKGBUILD:39
npx electron-builder --linux dir --x64
PKGBUILD
2 offending line(s) highlighted# Maintainer: AndrewImm-OP <bessmertnyja89@gmail.com>
pkgname=gallery-dl-studio
pkgver=9.93.0
pkgrel=1
pkgdesc="Beautiful GUI for gallery-dl - download images and media from 180+ sites"
arch=('x86_64')
url="https://github.com/AndrewImm-OP/gallery-dl-studio"
license=('MIT')
depends=('gtk3' 'nss' 'libxss' 'libnotify' 'alsa-lib' 'libsecret')
optdepends=(
'gallery-dl: image gallery downloader backend'
'yt-dlp: video downloader backend'
)
makedepends=('nodejs>=18' 'npm')
options=(!strip !debug)
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz"
"$pkgname.desktop"
"$pkgname.sh")
sha256sums=('1de794131c1347158d97c3f81bdb17db6df59e7353164f303ca980b2aa9a7393'
'SKIP'
'SKIP')
prepare() {
cd "$pkgname-$pkgver"
# Use a project-local npm cache and disable network during pacman
# post-install (electron postinstall sometimes wants to download
# binaries; we keep it offline-friendly by using cached deps).
npm install --no-audit --no-fund
}
build() {
cd "$pkgname-$pkgver"
# Build the renderer bundle and the electron main/preload.
npx vite build
# Package the unpacked Linux app via electron-builder. We only need
# `dir` target — actual install layout is provided by this PKGBUILD,
# not by a .deb/.AppImage.
npx electron-builder --linux dir --x64
}
package() {
cd "$pkgname-$pkgver"
# 1. Application files -> /opt/gallery-dl-studio
install -dm755 "$pkgdir/opt/$pkgname"
cp -r release/linux-unpacked/. "$pkgdir/opt/$pkgname/"
# The chrome-sandbox helper must be SUID root for non-Chrome users
# who don't have user namespaces enabled.
if [ -f "$pkgdir/opt/$pkgname/chrome-sandbox" ]; then
chmod 4755 "$pkgdir/opt/$pkgname/chrome-sandbox"
fi
# 2. Launcher in /usr/bin
install -Dm755 "$srcdir/$pkgname.sh" "$pkgdir/usr/bin/$pkgname"
# 3. Desktop entry
install -Dm644 "$srcdir/$pkgname.desktop" \
"$pkgdir/usr/share/applications/$pkgname.desktop"
# 4. Icons (multiple sizes for hicolor theme)
for size in 16 32 48 64 128 256 512; do
install -dm755 "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps"
done
# The single-source 512px PNG is enough; gtk-update-icon-cache will use it.
install -Dm644 "resources/icon.png" \
"$pkgdir/usr/share/icons/hicolor/512x512/apps/$pkgname.png"
# 5. License (best-effort)
if [ -f LICENSE ]; then
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
fi
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |
| 2026-08-29 00:29:17 | Low | 2 |