Skip to content

wdnote/image-downloader

Repository files navigation

Image Downloader

CSV に並んだ URL から画像を一括ダウンロードする macOS デスクトップアプリ。

Platform: macOS License: MIT Python: 3.10+

特徴

  • 2つのダウンロードモード — フラット(1フォルダに全保存、重複は連番)/ フォルダ構造保持(URL のパス階層を再現)
  • 2つの CSV 形式 — ヘッダーあり(url 列)/ ヘッダーなし(URL 直書き)
  • 結果 CSV の自動生成 — URL → 保存ファイル名の対応表を出力
  • 画像検証 — Content-Type とマジックナンバーで不正ファイル(404 HTML など)を弾く
  • サーバー負荷への配慮 — リクエスト間に 0.5 秒の間隔
  • キャンセル対応 — 途中中断してもそれまでの画像は保存される
  • エラーログ — 失敗した URL は error.csv に記録

インストール

ビルド済みアプリ(推奨)

  1. Releases から Image-Downloader-macOS.zip をダウンロードして展開

  2. Image Downloader.app/Applications にコピー

  3. 初回起動時の注意: 未署名のため macOS が以下の警告を出します

    「Appleは、"Image Downloader" にMacに損害を与えたり、プライバシーを侵害する可能性のあるマルウェアが含まれていないことを検証できませんでした。」

    以下どちらかの方法で起動してください。

    方法A: システム設定から許可(推奨・GUI のみ)

    1. まず一度 Image Downloader.app をダブルクリック(警告ダイアログで「完了」を押す)
    2. システム設定 → プライバシーとセキュリティ を開く
    3. 画面を下にスクロールすると 「"Image Downloader" は開発元を確認できないため...」 の行と 「このまま開く」 ボタンが現れる
    4. クリック → Touch ID またはパスワードで承認 → アプリが起動
    5. 次回以降は通常どおりダブルクリックで起動できます

    方法B: ターミナルから 1 行(macOS 15 / 26 でも確実)

    xattr -cr "/Applications/Image Downloader.app"
    open "/Applications/Image Downloader.app"

    この後は Finder ダブルクリックでも起動できます。

    macOS Sequoia (15) 以降では、以前の「右クリック → 開く」による回避手順は廃止されています。

ソースから実行

git clone <this-repo>
cd image-downloader
pip install -r requirements.txt
python main.py

使い方

  1. ファイル選択 — URL リストを書いた CSV をドラッグ&ドロップ
  2. 設定 — 保存先フォルダ、ダウンロードモード、CSV 形式を選択
  3. 実行中 — 進捗バー・ログを確認(キャンセル可能)
  4. 完了 — 成功/失敗件数を確認、保存先フォルダを開く

CSV 形式の例

ヘッダーあり:

url
https://example.com/image1.jpg
https://example.com/image2.png

ヘッダーなし:

https://example.com/image1.jpg
https://example.com/image2.png

開発

必要なもの

  • Python 3.10 以上
  • macOS(Windows ビルドは未対応)

開発サーバー起動

pip install -r requirements.txt
python main.py

ビルド(.app 生成)

pip install pyinstaller
python scripts/build_icon.py        # .icns を再生成(初回のみ)
pyinstaller --clean --noconfirm build.spec
# → dist/Image Downloader.app が生成される

プロジェクト構成

image-downloader/
├── main.py                 # エントリーポイント(同意ダイアログ含む)
├── main_window.py          # メインウィンドウ(4-step wizard)
├── workers.py              # QThread ワーカー(DL / 結果チェック)
├── theme.qss               # 全体スタイルシート
├── core/
│   ├── downloader.py       # ダウンロードロジック
│   └── result_checker.py   # 結果 CSV ロジック
├── ui/
│   ├── icons.py            # SVG アイコン定義
│   ├── tokens.py           # 色・サイズのデザイントークン
│   ├── assets/             # SVG ファイル(チェックボックス等)
│   └── widgets/            # 再利用可能なカスタムウィジェット
├── scripts/
│   └── build_icon.py       # .icns 生成スクリプト
├── build.spec              # PyInstaller 設定
├── DISCLAIMER.txt          # 免責事項(アプリ内表示用)
├── THIRD_PARTY_LICENSES.txt
└── LICENSE                 # MIT

法的事項

本ソフトウェアは、利用者が指定した URL からの直接ダウンロードのみを行うツールです。Web サイトの自動巡回・スクレイピングは行いません。

ただし、利用者が指定する URL の選択・ダウンロードしたコンテンツの取り扱いは、すべて利用者の責任となります。

  • ダウンロード対象の著作権・知的財産権を侵害しないこと
  • 対象 Web サイトの利用規約(robots.txt 含む)を遵守すること
  • 対象サーバーに過度な負荷をかけないこと
  • 適用される法令を遵守すること

詳細は DISCLAIMER.txt またはアプリ内メニュー ヘルプ → 免責事項・利用上の注意 を参照してください。

ライセンス

本ソフトウェア本体は MIT License の下で配布されます。

利用しているサードパーティライブラリのライセンスは THIRD_PARTY_LICENSES.txt を参照してください。

  • PySide6 — LGPL v3(動的リンクで利用)
  • requests — Apache 2.0
  • Python 標準ライブラリ — PSF License

謝辞

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages