Downloading Images - OutputBusyException
- Dominant language
- Java
- Stars
- 2.4k
- Forks
- 940
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 160
Description
Download of all images from scryfall.com - normal quality, all cards, 10 threads, no re-download, not connected to any XMage game server.
Downloader successfully updates images for a few thousand cards in around 2 minutes. After that progress bar immediately jumps to the near end (around 1 MB remaining) and freezes. This sudden jump also stops any further downloads. All the cards downloaded before the jump work as intended in GUI, and remaining are left unupdated.
With every restart of the download process i was able to download some more images, but also with every restart it seems like it takes less time for the error to appear. As in first download 20k cards to error, next download 10k cards to error, next restart 2.5k cards to error and so on. This constant resetting of the download process resulted in me being able to download all cards, but the last 5000 cards had to be downloaded on a single download thread as its more stable. I didnt encounter any errors while downloading on a single thread. Tho it takes ages.
Forcing xmage reupdate doesnt solve the issue, running:
Java version installed: 1.8.0_201
Java version available: 1.8.0_201
XMage version installed: 1.4.61-dev (2026-08-12 12-34)
XMage version available: 1.4.61-dev (2026-08-12 12-34)
Reading config from https://xmage.today//config.json
XMage version installed: 1.4.61-dev (2026-08-12 12-34)
XMage version available: 1.4.61-dev (2026-08-12 12-34)
Downloading to drive with over 60GB space remaining. Windows 11 machine.
Stack trace shows horehounds of two types of errors for different card images:
Caused by: net.java.truecommons.cio.OutputBusyException: VOW/Forest.276.full.jpg
at net.java.truevfs.comp.zipdriver.ZipOutputService$1Output.stream(ZipOutputService.java:152)
at net.java.truevfs.kernel.spec.cio.MultiplexingOutputService$1Output.stream(MultiplexingOutputService.java:137)
at net.java.truevfs.kernel.impl.DisconnectingOutputService$5$2.call(DisconnectingOutputService.java:112)
at net.java.truevfs.kernel.impl.DisconnectingOutputService$5$2.call(DisconnectingOutputService.java:108)
at net.java.truevfs.kernel.impl.CheckedCloseable.checked(CheckedCloseable.java:54)
at net.java.truevfs.kernel.impl.DisconnectingOutputService$5.stream(DisconnectingOutputService.java:108)
at net.java.truecommons.cio.IoSockets$OutputAdapter.stream(IoSockets.java:84)
at net.java.truecommons.io.Streams.copy(Streams.java:82)
at net.java.truecommons.cio.IoSockets.copy(IoSockets.java:43)
at net.java.truevfs.kernel.impl.TargetArchiveController.copy(TargetArchiveController.java:379)
... 22 more
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing the image downloader's multi-threaded output path and the TrueVFS archive-writing calls shown in the stack trace. Reproduce a full Scryfall image download with multiple threads, compare it with a single-thread run, and identify why concurrent output reaches OutputBusyException. Done means all images download without freezing or requiring repeated restarts.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100