TF2 Demo Salvage — open beta: play the demos TF2 can't open anymore
TF2 Demo Salvage is a standalone demo viewer and parser for Team Fortress 2. It reads .dem files from any point in TF2's history, 2007 to today, including the ones the current client refuses to load.
It works because every demo carries a description of its own entity data, and Salvage decodes each demo against that, rather than against whatever today's game expects.
Where it's at
- Decoding is solid. Tested on 441 real demos — ETF2L, ESEA, CEVO, LAN SourceTV, POVs and pugs, from TF2's launch build to this year. Every one decodes, including demos cut off mid-write, old Speex and Steam Voice audio, and the 2007 SourceTV demos whose schema was truncated at record time.
- The viewer plays them back in 3D:
- Uses your own TF2 install for maps and models.
- Reads your config, so your binds work.
- Scrub, free camera, or POV — where the recorder's movement is predicted the way the game does it.
- Export to text and back: File > Export assembly turns a demo into readable text; Compile assembly turns that text back into a byte-identical demo.
It's a beta. The viewer still looks different from the game in places — the release notes list where. I'm pushing fixes constantly; there have already been several releases since launch. If you want something polished, wait. If you want to help shape it, try it now.
Download
Latest release on GitHub
- Windows x64. Unzip and run
viewer\tf2demoview.exe
— nothing else to install.
- Needs TF2 installed (for maps and models).
- 8 GB RAM minimum, 16 GB recommended.
What helps most
Repo
github.com/PinKushin/Tf2DemoSalvage
If you want to contribute, test, or just watch the chaos, go for it.
[h][b]TF2 Demo Salvage — open beta: play the demos TF2 can't open anymore[/b][/h]
TF2 Demo Salvage is a standalone demo viewer and parser for Team Fortress 2. It reads [b].dem[/b] files from any point in TF2's history, [b]2007 to today[/b], including the ones the current client refuses to load.
It works because every demo carries a description of its own entity data, and Salvage decodes each demo against that, rather than against whatever today's game expects.
[h]Where it's at[/h]
[list]
[*][b]Decoding is solid.[/b] Tested on [b]441 real demos[/b] — ETF2L, ESEA, CEVO, LAN SourceTV, POVs and pugs, from TF2's launch build to this year. Every one decodes, including demos cut off mid-write, old Speex and Steam Voice audio, and the 2007 SourceTV demos whose schema was truncated at record time.
[*][b]The viewer plays them back in 3D:[/b]
[list]
[*]Uses your own TF2 install for maps and models.
[*]Reads your config, so your binds work.
[*]Scrub, free camera, or POV — where the recorder's movement is predicted the way the game does it.
[/list]
[*][b]Export to text and back:[/b] [i]File > Export assembly[/i] turns a demo into readable text; [i]Compile assembly[/i] turns that text back into a byte-identical demo.
[/list]
[b]It's a beta.[/b] The viewer still looks different from the game in places — the release notes list where. I'm pushing fixes constantly; there have already been several releases since launch. If you want something polished, wait. If you want to help shape it, try it now.
[h]Download[/h]
[url=https://github.com/PinKushin/Tf2DemoSalvage/releases/latest]Latest release on GitHub[/url]
[list]
[*]Windows x64. Unzip and run [code]viewer\tf2demoview.exe[/code] — nothing else to install.
[*]Needs TF2 installed (for maps and models).
[*]8 GB RAM minimum, 16 GB recommended.
[/list]
[h]What helps most[/h]
[list]
[*][b]Old demos.[/b] Early CEVO, CAL, ETF2L and ESEA demos, LAN POVs, frag-movie source demos — especially anything from [b]2008–2012[/b]. Rare eras are where the edge cases hide.
[*][b]Bug reports with the log.[/b] Logs are in [code]%LOCALAPPDATA%\Tf2DemoSalvage[/code] — tell me the demo and the tick.
[/list]
[h]Repo[/h]
[url=https://github.com/PinKushin/Tf2DemoSalvage]github.com/PinKushin/Tf2DemoSalvage[/url]
If you want to contribute, test, or just watch the chaos, go for it.
you dont post for 8 years and come back with this ai generated shit. fuck you
you dont post for 8 years and come back with this ai generated shit. fuck you
hpqoeuyou dont post for 8 years and come back with this ai generated shit. fuck you
I didn’t really post when I was playing, so I’m not sure why you’d expect me to post after stopping. If you have an issue with a specific part of the code, point to it. If not, your complaint is noted and ignored.
[quote=hpqoeu]you dont post for 8 years and come back with this ai generated shit. fuck you[/quote]
I didn’t really post when I was playing, so I’m not sure why you’d expect me to post after stopping. If you have an issue with a specific part of the code, point to it. If not, your complaint is noted and ignored.
Well, I think it's neat. Playing such old demos is a rather niche thing and without someone willing to point their Claude subscription at the problem, it would probably never exist.
Take it or leave it.
Also, it's hilarious how Claude will insist calling projects like this a "clean-room" implementation after ingesting all human knowledge including the HL2 and TF2 source code leaks.
Well, I think it's neat. Playing such old demos is a rather niche thing and without someone willing to point their Claude subscription at the problem, it would probably never exist.
Take it or leave it.
Also, it's hilarious how Claude will insist calling projects like this a "clean-room" implementation after ingesting all human knowledge including the HL2 and TF2 source code leaks.
ArieWell, I think it's neat. Playing such old demos is a rather niche thing and without someone willing to point their Claude subscription at the problem, it would probably never exist.
Take it or leave it.
Also, it's hilarious how Claude will insist calling projects like this a "clean-room" implementation after ingesting all human knowledge including the HL2 and TF2 source code leaks.
Thanks, "clean-room" was the wrong word. It was my own early phrasing and it stuck around in the READ-ME. It's fixed now. What I've actually set up is built for 100% parity with how TF2 itself reads and draws a demo, so nothing is guessed. Behavior comes from Valve's published Source SDK 2013, the game's own data, and disassembly of the shipped engine and client binaries in Ghidra for the parts the SDK doesn't cover. Every ported rule is cited in the code, an SDK file and line or a binary address. No leaked source is used, at least knowingly. It's all out of date anyway, and it's easier to just grab a real archived client from archive.org. Surprisingly, in my prompting and corrections to the agents, getting it to decomp and read Ghidra has been much easier than getting it to look up engine leaks and use that information.
Also on the sub topic, yea I'm pointing literally all of it to this project, and this project is the only reason I'm even keeping it, because the money could be spent elsewhere, in arguably better places, but I really wanted TF2 players and ex-players, like me, to be able to still watch old demos like the ESEA season 8 Finals between Check 6 and EMG, that season was crazy, and those finals were peak tf2 before scout super dominance. I still haven't found those demos yet, but I'm still hopeful. If anyone has old ESEA/ETF2L/CEVO demos lying around, I'd love them for testing
[quote=Arie]Well, I think it's neat. Playing such old demos is a rather niche thing and without someone willing to point their Claude subscription at the problem, it would probably never exist.
Take it or leave it.
Also, it's hilarious how Claude will insist calling projects like this a "clean-room" implementation after ingesting all human knowledge including the HL2 and TF2 source code leaks.[/quote]
Thanks, "clean-room" was the wrong word. It was my own early phrasing and it stuck around in the READ-ME. It's fixed now. What I've actually set up is built for 100% parity with how TF2 itself reads and draws a demo, so nothing is guessed. Behavior comes from Valve's published Source SDK 2013, the game's own data, and disassembly of the shipped engine and client binaries in Ghidra for the parts the SDK doesn't cover. Every ported rule is cited in the code, an SDK file and line or a binary address. No leaked source is used, at least knowingly. It's all out of date anyway, and it's easier to just grab a real archived client from archive.org. Surprisingly, in my prompting and corrections to the agents, getting it to decomp and read Ghidra has been much easier than getting it to look up engine leaks and use that information.
Also on the sub topic, yea I'm pointing literally all of it to this project, and this project is the only reason I'm even keeping it, because the money could be spent elsewhere, in arguably better places, but I really wanted TF2 players and ex-players, like me, to be able to still watch old demos like the ESEA season 8 Finals between Check 6 and EMG, that season was crazy, and those finals were peak tf2 before scout super dominance. I still haven't found those demos yet, but I'm still hopeful. If anyone has old ESEA/ETF2L/CEVO demos lying around, I'd love them for testing
capnnofapnhow ya doin!
Doing decent enough, alive, good to see you're still around. Hope you've been doing well, I miss playing with all you guys. Probably a few apologizes I should make though, because I was such an asshole back then. I mean I'm still one now, but not in the same ways lol. Still if anyone from back then reads this who I was shitty too, because I had a bad attitude when losing a silly video game, I do sincerely apologize, I took this game far to seriously.
[quote=capnnofapn]how ya doin![/quote]
Doing decent enough, alive, good to see you're still around. Hope you've been doing well, I miss playing with all you guys. Probably a few apologizes I should make though, because I was such an asshole back then. I mean I'm still one now, but not in the same ways lol. Still if anyone from back then reads this who I was shitty too, because I had a bad attitude when losing a silly video game, I do sincerely apologize, I took this game far to seriously.