Just a fair heads-up: this was a
massively autistic project that I've undertaken with roots that go back to ~September 2024 when I jumped from W11 to Mint 22.2
.
A persistent problem I've had with daily driving Linux in the Proton age is that Proton logs are gargantuan textfiles where like... ~500ish lines at most have the information you're really looking for, and it's spread out across 25,000+ lines of repetitive noise. I've made a dent in mitigating the troubleshooting headache over the last couple of years, but it's always something I struggled with.
LLMs like Claude and ChatGPT definitely
help, but chucking raw Proton logs and wasting free tokens is hideously inefficient. Now that I have a machine with local AI capabilities, I've tried and basically failed for months on end to make models like Llama3.1:8b, qwen2.5-coder:14b, deepseek-r1:14b "work" but it never quite did. The reason why was patently obvious: a combination of "skill issue" and "hard technical limits."
Today, I have excellent news. I've made substantial progress in having a local AI agent properly assist with troubleshooting! A few caveats:
a) The game being tested
Hollow Knight (Steam ID: 367520) against Proton Experimental v. 11.0-20260910b and GE-Proton11-7. Hollow Knight is being directly invoked via
umu-launcher. Launcher script below.
b) Proton Experimental has a known, persistent failure mode: not playing any of the FMVs. GE-Proton11-7 has a substantially different media stack which
does succeed in rendering the FMVs.
c) The game was played for, at most, 10 minutes. Skip no FMVs if they play, make a mad dash for the Forgotten Crossroads Stag Station, ride back to Dirtmouth, save, and quit out.
d) I am 100% using the same WINEPREFIX for both GE-Proton and Proton Experimental. I know it's better to start with a vanilla prefix each time, but I
don't have the patience to wipe the prefix every single time.
e) The local AI agent in question for this exercise is
Gemma4:12b (
--think=false). To make a painfully long story short: Llama3.1:8b
unfortunately wasn't good enough no matter how much I tried. Qwen3.5:9b kept ignoring the
--think=false flag I kept passing and it kept happening at irregular intervals. Qwen3:14b
did come close, but it persistently missed stuff that Gemma picked up on.
f) I'm deliberately disabling
think because I don't wanna waste tokens on circular reasoning loops because one data point contradicts its internal knowledge base (cough Qwen3.5:9b cough).
Code:
#!/usr/bin/env bash
set -euo pipefail
PREFIX="/games/umu-cli/HK/Prefix"
GAME="/games/umu-cli/HK/Prefix/drive_c/GOG Games/Hollow Knight/Hollow Knight.exe"
#PROTON="/games/SteamLibrary/steamapps/common/Proton - Experimental"
PROTON="/home/dfirst/.local/share/Steam/compatibilitytools.d/GE-Proton11-7"
export WINEPREFIX="$PREFIX"
export GAMEID=umu-367520
export STORE=gog
export PROTONPATH="$PROTON"
export DXVK_FRAME_RATE=60
export MANGOHUD=1
export PROTON_LOG=1
export PROTON_NO_ESYNC=1
export PROTON_NO_FSYNC=1
exec umu-run "$GAME" "$@"
The method is... not really "simple" but "good enough for a turbosped like me to smush it together and get it 'working.'" Anyone else who's curious and with similar hardware to me (re:
@wew lad) can give this a try if they so choose, and hopefully come up with a more elegant solution than what I got.
FIRST: You need to trim the raw steam log. This is
unavoidable. You don't wanna eyeball it either. The below script is something that I
started with GPT-o4, it worked reasonably well, and then Perplexity had a go at tweaking it, until most recently, Sonnet 5 Medium had its go. Claude made the most substantial revisions. I've always kept the below script in
$HOME/.local/bin and invoked it thusly:
proton-summarise steam-367520.log > 367520-proton-version-goes-here-summary.txt. Screw around with it if you want to.
Code:
#!/usr/bin/env bash
# ============================================================
# proton-summarise.sh
#
# Extracts the most useful sections from a Proton log
# for analysis by an LLM or a human troubleshooter.
#
# Usage:
# proton-summarise <log_file>
# Combined output on stdout (original behavior).
#
# proton-summarise --split <log_file> <steam_id>
# Writes each slice to its own file:
# <steam_id>-summary-slicea.txt
# <steam_id>-summary-sliceb.txt
# ... through sliceg.txt
# for feeding one slice at a time to a small model.
# ============================================================
SPLIT_MODE=0
if [[ "$1" == "--split" ]]; then
SPLIT_MODE=1
shift
fi
if [[ "$SPLIT_MODE" -eq 1 ]]; then
if [[ $# -ne 2 || ! -f "$1" ]]; then
echo "Usage: $0 --split <path_to_proton_log> <steam_id>"
exit 1
fi
RAW_LOG_FILE="$1"
STEAM_ID="$2"
else
if [[ $# -ne 1 || ! -f "$1" ]]; then
echo "Usage: $0 <path_to_proton_log>"
echo " $0 --split <path_to_proton_log> <steam_id>"
exit 1
fi
RAW_LOG_FILE="$1"
fi
TEMP_OUT=$(mktemp)
TEMP_LOG=$(mktemp)
cleanup() {
rm -f "$TEMP_OUT" "$TEMP_LOG"
}
trap cleanup EXIT
# ============================================================
# GLOBAL PRE-FILTER
#
# Wine/Proton logs contain several independent families of
# mechanical register/address-dump noise, emitted by different
# subsystems (trace:unwind:, trace:seh:, etc.) during exception
# unwinding. On a typical log trace:unwind: alone is 95%+ of
# total line volume. These lines carry no narrative content -
# they're raw CPU register values, not descriptions of what
# happened - so they're stripped once here by SHAPE (not by
# naming every subsystem) so every slice below is filtered
# consistently:
# 1. The entire trace:unwind: subsystem (always dump-shaped)
# 2. Any line that is itself a register dump, regardless of
# subsystem - e.g. "rax=... rbx=..." or "r8=... r9=..." -
# identified by two or more NN=hexvalue pairs on one line.
# This deliberately does NOT strip narrative exception lines
# like "sigsys_handler SIGSYS" or "dispatch_exception code=6ba
# (RPC_S_SERVER_UNAVAILABLE)" - only their register-dump
# continuation lines.
# ============================================================
grep -v 'trace:unwind:' "$RAW_LOG_FILE" \
| grep -vE '([a-z0-9]{2,3}=[0-9a-fA-Fx]+[[:space:]]+){2,}' \
> "$TEMP_LOG"
LOG_FILE="$TEMP_LOG"
# ============================================================
# Helper: slice_target <slice_letter>
#
# In split mode, returns a dedicated per-slice file path.
# In combined mode, returns the shared TEMP_OUT accumulator.
# The grep pipelines below are unchanged either way - only
# where they write differs.
# ============================================================
slice_target() {
local letter="$1"
if [[ "$SPLIT_MODE" -eq 1 ]]; then
echo "${STEAM_ID}-summary-slice${letter}.txt"
else
echo "$TEMP_OUT"
fi
}
if [[ "$SPLIT_MODE" -eq 0 ]]; then
echo "=== SECTIONS FOR AI AGENT ===" > "$TEMP_OUT"
echo "" >> "$TEMP_OUT"
fi
# ============================================================
# A. GRAPHICS INITIALIZATION
# ============================================================
TARGET=$(slice_target a)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE A: GRAPHICS & DXVK INITIALIZATION ---" >> "$TARGET"
grep -Ei \
'vulkan|dxvk|d3d11|adapter|device|vkCreate|swapchain|gpu' \
"$LOG_FILE" \
| grep -viE \
'radv is not a conformant|\[MANGOHUD\]|loaddll:(build_module|free_modref).*winevulkan' \
| head -60 \
>> "$TARGET" 2>/dev/null
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# B. HARD CRASHES / EXCEPTIONS
# ============================================================
TARGET=$(slice_target b)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE B: CRITICAL CRASH & UNHANDLED EXCEPTIONS ---" >> "$TARGET"
grep -C 4 -Ei \
'unhandled exception|page fault|access violation|err:seh|stack overflow|crash|assert|fatal' \
"$LOG_FILE" \
| grep -v 'info:GameThread' \
>> "$TARGET" 2>/dev/null
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# C. EARLY WARNING TIMELINE
# First suspicious events are often more useful than the crash.
# ============================================================
TARGET=$(slice_target c)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE C: EARLY WARNING TIMELINE ---" >> "$TARGET"
grep -nEi \
'err:|warn:|failed|exception|fault|assert|dxvk|vulkan|d3d11|mfplat|winegstreamer|dxva2' \
"$LOG_FILE" \
| grep -viE \
'threadname|OutputDebugString|fixme:heap|fixme:ntdll|openxr:get_vulkan_extensions|radv is not a conformant|winebth|scmdatabase_autostart_services.*winebth' \
| head -120 \
>> "$TARGET" 2>/dev/null
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# D. LATE WARNING TIMELINE
# What was happening immediately before exit?
# ============================================================
TARGET=$(slice_target d)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE D: LATE WARNING TIMELINE ---" >> "$TARGET"
grep -nEi \
'err:|warn:|failed|exception|fault|assert|dxvk|vulkan|d3d11|mfplat|winegstreamer|dxva2' \
"$LOG_FILE" \
| grep -viE \
'threadname|OutputDebugString|fixme:heap|fixme:ntdll|openxr:get_vulkan_extensions|radv is not a conformant|winebth|scmdatabase_autostart_services.*winebth' \
| tail -200 \
>> "$TARGET" 2>/dev/null
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# E. MEDIA FOUNDATION / VIDEO PLAYBACK
# Catherine Classic and many JP games love to die here.
# ============================================================
TARGET=$(slice_target e)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE E: MEDIA FOUNDATION & VIDEO PIPELINE ---" >> "$TARGET"
grep -Ei \
'mfplat|winegstreamer|gstreamer|wmv|decoder|dxva2|quartz|mf\.dll|evr:' \
"$LOG_FILE" \
| grep -viE \
'^[0-9.]+:[0-9a-f]+:[0-9a-f]+:trace:loaddll:' \
>> "$TARGET" 2>/dev/null
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# F. REPEATED ERROR COUNTS
# Helps identify recurring offenders.
# ============================================================
TARGET=$(slice_target f)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE F: REPEATED ERROR COUNTS ---" >> "$TARGET"
grep -Ei \
'err:|failed|exception|fault|assert' \
"$LOG_FILE" \
| sed 's/^[0-9:.]*://' \
| sort \
| uniq -c \
| sort -nr \
| head -30 \
>> "$TARGET" 2>/dev/null
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# G. PRE-MORTEM EXECUTION TRAIL
# Last meaningful lines before shutdown.
# ============================================================
TARGET=$(slice_target g)
[[ "$SPLIT_MODE" -eq 1 ]] && : > "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "--- SLICE G: PRE-MORTEM EXECUTION TRAIL ---" >> "$TARGET"
grep -vEi \
'pid|process|tid|ExitCode|terminate|shutdown|info:GameThread|trace:mscoree:(DllMain|_CorDllMain)' \
"$LOG_FILE" \
| tail -60 \
>> "$TARGET"
[[ "$SPLIT_MODE" -eq 0 ]] && echo "" >> "$TARGET"
# ============================================================
# OUTPUT
# ============================================================
if [[ "$SPLIT_MODE" -eq 1 ]]; then
echo "Wrote 7 slice files:"
for letter in a b c d e f g; do
echo " ${STEAM_ID}-summary-slice${letter}.txt"
done
else
cat "$TEMP_OUT"
fi
SECOND: It's not enough to have that log summary. You need to split it out into chunks. The script itself has a
--split function, I prefer to do it by hand. Either way, you should have seven distinct chunks of information. Those chunks are what you'll feed to the model in question.
THIRD: Make sure you have a good prompt waiting for Gemma4:12b. This is a small model. Don't treat it like ChatGPT or Claude where you just say "YOU ARE SUCH AND SUCH ASSISTING WITH BLAH BLAH BLAH." Role playing like that don't work at a scale this small. Treat it like you're training a new hire you're deliberately trying to avoid overwhelming. You explicitly tell the new hire "don't think too hard about it. I'm gonna review what you tell me anyway. Just do your best." When you approach the prompting like
that, and seriously scale back the amount of information you feed it at a time, Gemma does wonderful things!
Code:
PROTON LOG SLICE TRIAGE
You are given one section of a pre-filtered Proton/Wine compatibility log. Mechanical noise has already been removed by a script.
Check this section for any of the following:
- Codec / media / decoder failures (missing plugins, missing decoders, failed media pipeline calls)
- Wow64 / architecture / ELF class mismatches (32-bit vs 64-bit library conflicts, wrong ELF class)
- A named crash or exception: a specific exception code, fault type, or "unhandled"/"access violation"/"page fault" event only
- Anything else that looks like a genuine, rare error rather than routine startup or shutdown activity
Do NOT report any of the following, even though they contain words like "error", "warn", or "fail":
- SEH/exception-unwind mechanics: virtual_unwind, RtlUnwindEx, call_seh_handlers, call_vectored_handlers, RtlRestoreContext, or any line that is only reporting a backtrace address or "returned N"
- Known-boilerplate warnings: "radv is not a conformant Vulkan implementation", any OpenXR/OpenVR "Unable to get required extensions" message
- Routine DLL load/unload trace lines
If a single line could fit more than one category above (for example, an ELF class error is both a media-plugin failure and an architecture mismatch), report it ONCE, under Wow64 / architecture / ELF class mismatches only — that category takes priority.
For each finding, write one line: category, then the exact error text.
If this section contains none of the above, write exactly: "Nothing relevant in this section."
Do not add commentary, explanation, or a summary. Do not describe the section. Just the findings or the one-line negative.
SECTION:
FOURTH: Now you need to feed each slice into Gemma, and see what happens next. I handle it via command substitution with Ollama, you can theoretically do this with a GUI, but self-hosted AI GUIs are a productivity treadmill I've wasted way too much time on in the past. These are the series of commands I'm running in more or less rapid succession. The first seven handle the Proton Experimental log summary, the latter seven handle GE-Proton.
Code:
cat 367520-experimental-summary-a.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-experimental-summary-b.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-experimental-summary-c.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-experimental-summary-d.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-experimental-summary-e.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-experimental-summary-f.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-experimental-summary-g.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-a.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-b.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-c.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-d.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-e.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-f.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
cat 367520-geproton-summary-g.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
FIFTH: Then you do it, and see what happens! Let's start with Proton Experimental.
Code:
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-a.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-b.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-c.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Codec / media / decoder failures: decodebin7: ../src-gst_base/gst/playback/gstdecodebin2.c(4704): gst_decode_bin_expose (): /GstBin:bin4/GstDecodeBin:decodebin7:
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:455:video_conv_change_state: Failed to create video conv state, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-d.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Codec / media / decoder failures: decodebin7: ../src-gst_base/gst/playback/gstdecodebin2.c(4704): gst_decode_bin_expose (): /GstBin:bin4/GstDecodeBin:decodebin7:
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:455:video_conv_change_state: Failed to create video conv state, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-e.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Wow64 / architecture / ELF class mismatches: (wine:158146) GStreamer-WARNING **: 06:43:00.919: Failed to load plugin '/games/SteamLibrary/steamapps/common/Proton - Experimental/files/lib/i386-linux-gnu/gstreamer-1.0/libgstlibav.so':
/games/SteamLibrary/steamapps/common/Proton - Experimental/files/lib/i386-linux-gnu/gstreamer-1.0/libgstlibav.so: wrong ELF class: ELFCLASS32
Codec / media / decoder failures: winegstreamer error: decodebin1: Your GStreamer installation is missing a plug-in.
Codec / media / decoder failures: winegstreamer error: decodebin1: ... Missing decoder: MPEG-4 AAC (audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc,
profile=(string)lc, codec_data=(buffer)119056e500, rate=(int)48000, channels=(int)2)
Codec / media / decoder failures: winegstreamer error: decodebin4: Your GStreamer installation is missing a plug-in.
Codec / media / decoder failures: winegstreamer error: decodebin4: ... Missing decoder: MPEG-4 AAC (audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc,
profile=(string)lc, codec_data=(buffer)119056e500, rate=(int)48000, channels=(int)2)
Codec / media / decoder failures: winegstreamer error: decodebin7: Your GStreamer installation is missing a plug-in.
Codec / media / decoder failures: winegstreamer error: decodebin7: ... Missing decoder: MPEG-4 AAC (audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc,
profile=(string)lc, codec_data=(buffer)1190, rate=(int)48000, channels=(int)2)
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-f.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Wow64 / architecture / ELF class mismatches: 1 (wine:158146) GStreamer-WARNING **: 06:43:00.919: Failed to load plugin '/games/SteamLibrary/steamapps/common/Proton -
Experimental/files/lib/i386-linux-gnu/gstreamer-1.0/libgstlibav.so': /games/SteamLibrary/steamapps/common/Proton - Experimental/files/lib/i386-linux-gnu/gstreamer-1.0/libgstlibav.so: wrong ELF class: ELFCLASS32
Codec / media / decoder failures: 1 (wine:158146) GStreamer-WARNING **: 06:43:00.918: Failed to load plugin '/games/SteamLibrary/steamapps/common/Proton - Experimental/files/lib/x86_64-linux-gnu/gstreamer-1.0/libgstlibav.so':
libavfilter.so.7: cannot open shared object file: No such file or directory
Codec / media / decoder failures: 1 48.831800663 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 48.831789213 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: 1 44.817432682 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 44.817421212 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: 1 44.816062121 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 44.816050071 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: 1 44.813758626 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:455:video_conv_change_state: Failed to create video conv state, ret -11.
Codec / media / decoder failures: 1 09.4251800663 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 09.425137593 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: 1 04.607988699 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 04.607988699 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: 1 04.604012976 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 04.604001336 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
Codec / media / decoder failures: 1 04.596838432 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:455:video_conv_change_state: Failed to create video conv state, ret -11.
Codec / media / decoder failures: 1 04.118168274 158146 0x7f812c00f450 ERROR protonmediaconverter videoconv.c:663:video_conv_init_transcode: Failed to dump upstream data, ret -11.
Codec / media / decoder failures: 1 04.118148194 158146 0x7f8134001450 ERROR protonmediaconverter videoconv.c:603:video_conv_dump_upstream_data: Failed to open video dump fozdb, ret -11.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-experimental-summary-g.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$
Holy fucking shit! It actually followed all the instructions, and correctly returned the media pipeline errors! Now let's do the same for GE-Proton. Spoiler alert: the logs are much cleaner because of the FFmpeg media stack rewrite that GloriousEggRoll did for the multimedia stack as of GE-Proton11-1. I tested on 11-7, and lo: the only things that it warns about are media stubs. Note, however, that there aren't any ELFCLASS mismatch errors. You don't even need me telling you all of that nonsense because I can attest that GE-Proton played without a hitch. All the cutscenes loaded here, whereas they didn't with Proton Experimental.
Code:
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-a.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-b.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-c.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Codec / media / decoder failures: 3350:43808.071:01d4:0404:err:dmo:create_placeholder_file Env STEAM_COMPAT_TRANSCODED_MEDIA_PATH not set.
Codec / media / decoder failures: 3654:44140.769:01d4:0404:err:dmo:create_placeholder_file Env STEAM_COMPAT_TRANSCODED_MEDIA_PATH not set.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-d.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-e.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Codec / media / decoder failures: 43777.195:01d4:0270:fixme:mfplat:media_source_IMFGetService_GetService Unsupported service {dd0ac3d8-40e3-4128-ac48-c0add067b714} / riid {26afea53-d9ed-42b5-ab80-e64f9ee34779}
Codec / media / decoder failures: 43808.072:01d4:0270:fixme:mfplat:media_source_IMFGetService_GetService Unsupported service {dd0ac3d8-40e3-4128-ac48-c0add067b714} / riid {26afea53-d9ed-42b5-ab80-e64f9ee34779}
Codec / media / decoder failures: 44140.769:01d4:0270:fixme:mfplat:media_source_IMFGetService_GetService Unsupported service {dd0ac3d8-40e3-4128-ac48-c0add067b714} / riid {26afea53-d9ed-42b5-ab80-e64f9ee34779}
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-f.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Codec / media / decoder failures: 01d4:0404:err:dmo:create_placeholder_file Env STEAM_COMPAT_TRANSCODED_MEDIA_PATH not set.
Codec / media / decoder failures: 01d4:0404:err:dmo:create_placeholder_file Creating tag file h264-used.
Codec / media / decoder failures: 01d4:03f8:err:dmo:create_placeholder_file Env STEAM_COMPAT_TRANSCODED_MEDIA_PATH not set.
Codec / media / decoder failures: 01d4:03f8:err:dmo:create_placeholder_file Creating tag file h264-used.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$ cat 367520-geproton-summary-g.txt | ollama run gemma4:12b --think=false "$(cat /data/projects/prompts/proton-log-triage.txt)"
Nothing relevant in this section.
dfirst@devil-summoner:/games/umu-cli/HK/Logs$
Honestly? I'm
psyched that I even managed to get this far... and actually have an LLM at a purported size function for the intended purpose! We've come a long way from shoving raw Proton logs directly into Alpaca, Chatbox, and Open WebUI. I just wanted to share because... holy fucking shit, this is like... a genuine fucking breakthrough for me.