View Full Version : New Sharpening Function from Didée -'SeeSaw'
Pages :
1
[
2]
3
4
5
6
7
8
9
10
11
12
13
mg262
23rd January 2006, 15:17
Why not? Is truemotion/warping really *that* bad that a [scared] smiley is indicated ?Nononono, the smiley was because there was something deep and mysterious happening which I didn't understand :). [We need more semantic resolution in smileys :D.]
Actually I'm glad to see things going this way, because it implies that even Motion might be useful for denoising... or at least that its fast warping code might be.
Pookie
23rd January 2006, 18:29
Found a nice looking combination of filters for SeeSaw and certain 1080i source material. Wondering if there's a functional equivalent to PeachSmoother which wouldn't require a YUY to YV12 conversion.
a = last
b=a.converttoyuy2().peachsmoother(NoiseReduction=35,Stability=40).converttoyv12().removegrain(mode=1)
SeeSaw(a,b, NRlimit=6, NRlimit2=7, Sstr=1.5, Slimit=5, Spower=8, Szp=16,soothet=25,soothes=35,bias=60)
ftp://tempclips%40avisynth%2Eorg:QfJY(86m@avisynth.org/see-peach.avi (3MB)
Thanks for hosting, Richard Berg. You rock !
aberforthsgoat
24th January 2006, 09:22
Say,
I just found this thread and perused a while. I'm currently using LimitedSharpenFaster and hqdn3d for DVD playback and live TV. Is SeeSaw going to be an option or does it place higher demands on my system?
Just wanted to ask before I throw myself into another orgy of filter testing!
Mike
Didée
24th January 2006, 10:05
Is SeeSaw going to be an option
Yes.
or does it place higher demands on my system?
Yes.
Just wanted to ask before I throw myself into another orgy of filter testing!
Yes. ;)
Read: I can't save you from testing whether it fits your needs, or not ...
Razorholt
24th January 2006, 22:10
Hi,
I'd love to test SeeSaw but I get that following error:
-----
there is no function named "yv12lutxy"
Xe: ,line72
-----
Here is my script:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\MaskTools20a21\mt_masktools.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\LimitedSupport_02Dec05.dll")
DirectShowSource("Z:\trailers\Hills\thehillshaveeyes_XviD-2000_lancsoz4.avi")
ConvertToYv12()
a = last
b=a.degrainmedian(mode=2)
SeeSaw(a,b, NRlimit=6, NRlimit2=7, Sstr=1.5, Slimit=5, Spower=5, Szp=16)
Thank you for your help.
- Dan
Pookie
24th January 2006, 22:14
You need to load the older >1.58 version of Masktools. Look on the first page for the link. It can co-exist with the MT_masktools.dll.
Also, you need to load RemoveGrain, found on the first page.
Also, you need to import SeeSaw.avs into your script.
Razorholt
24th January 2006, 22:32
Ok, I did it but now it crashes AVSEdit when I want to preview the video. Megui crashes too after I load the AVS file.. :(
RemoveGrain loads automatically, I have the dll under Plugins.
Thanks,
- Dan
Pookie
25th January 2006, 02:36
Create a new AVS file for your SeeSaw test. Manually load RemoveGrain and the older Masktools, plus DegrainMedian.
Are you sure you have the RemoveGrain from the front page ?
You should have 2.56 of AviSynth.
Didée
25th January 2006, 10:48
DirectShowSource("Z:\trailers\Hills\thehillshaveeyes_XviD-2000_lancsoz4.avi")
For an *.avi source file better use "AviSource()", not "DirectShowSource()" ...
Razorholt
25th January 2006, 22:02
Thank you Pookie and Didee!!!
I had to reinstall AviSynth and get rid of all the plugins I had already. Fresh start was the cure here. :)
Quick question: The clip is 1024x432, so is it better to add borders to reach the "normal" size of 1024x768?
Cheers,
- Dan
thegame
31st January 2006, 04:21
hi guys i need help,i have been trying to get this to work ALL weekend,and this is the error i get now:
"there is no function named "repair"."
this is my script,now keep in mind i am a newbie at this but really want to learn,i am trying to capture(Laserdisc w/Canopus ADVC-110 & ScenalyzerLive) and process my Star Wars Japanese Special Collection Trilogy to dvd,i want to make the video look as good as i can,i already figured out how to crop out the japanese text and recenter the video and make anamorphic WS,but i would like to clean up the video as best i can,and Dide'e's filters look very promising,so here is where i am at now:
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\MaskTools20a26\mt_masktools.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\MaskTools158\MaskTools.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\RemoveGrain\RemoveGrain.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\MVTools0991\MVTools.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\LimitedSupport_09Jan06B.dll")
Import("C:\Program Files\AviSynth 2.5\scripts\SeeSaw.avs")
avisource("F:\LaserDisc Caps\test avi's\tns.avi")
ConverttoYV12
AssumeBFF()
Telecide(guide=1,post=0)
Decimate()
crop(10,58,704,280)
a = last
b=a.converttoyv12().removegrain(mode=1)
SeeSaw()
lanczos4resize(720,382)
addborders(8,53,8,53)
thanks in advance for any help
keep up the GREAT work Dide'e and others
game
Pookie
31st January 2006, 05:26
Repair is part of the RemoveGrain package. Download this and load the .dll(s) manually
http://home.arcor.de/kassandro/RemoveGrain/RemoveGrain.rar
RemoveGrain and Repair can be loaded with optimized Dlls depending on your Processor. Download CPU-Z from http://www.cpuid.com/cpuz.php On the first page it will tell you if you have SSE, SSE2, and/or SSE3 capabilities. If you do, then load RemoveGrainSSE2.dll or RemoveGrainSSE3.dll instead of RemoveGrain.dll in your script. Same goes with Repair. Doing this should significantly increase performance.
note: Put a () after ConverttoYV12 in your script, right below your Avisource line. No need to declare it again in the b=a.converttoyv12().removegrain(mode=1) line. Also, no need for limitedsupport.
IIRC, the StarWars laserdisc material is pretty difficult to enhance - Rainbowing and other noise. You might want to run a different or additional filter to removegrain(mode=1) with SeeSaw. Check out VagueDenoiser and DegrainMedian(mode=1), that's a pretty nice combination on some stuff. :) Still, don't expect miracles, considering what your source is.
3ngel
31st January 2006, 11:20
Hi, i'm trying SeeSaw but i got error :
- YV12Lutxy : Input Clip format must be YUV12
I'm missing something? Is SeeSaw functioning only on YV12 sources?
foxyshadis
31st January 2006, 11:28
That would be the obvious conclusion. Pretty much anything using masktools requires yv12 (or i420/y8, I guess) unless special considerations are made for it.
3ngel
31st January 2006, 11:56
I see, so there are any plans on doing YUY2 support? I would like to test this on a DVD source.
mg262
31st January 2006, 11:58
DVDs are yv12.
Mug Funky
31st January 2006, 12:02
you could of course convert your yuy2 source to yv12, filter, convert back to yuy2 and merge in the un-filtered chroma - only luma will be filtered, but that's all you'll need (you ever see what a TV does to chroma? there's absolutely no need to sharpen it unless you're doing some kind of correction on a special source).
3ngel
31st January 2006, 12:28
you could of course convert your yuy2 source to yv12, filter, convert back to yuy2
But in this way i don't lose precious informations converting from YUY2 to yv12 colorspace ?
EDIT : ohh, you're saying in the conversion i lose the chroma, but there is no need to enhance chroma. Mmm i see, but how do i merge with the unfiltered chroma back?
mg262
31st January 2006, 12:44
Using MergeChroma (syntax and examples in the documentation).
What is your source?
Didée
31st January 2006, 12:45
But in this way i don't lose precious informations converting from YUY2 to yv12 colorspace ?
No.
source_yuy2 = whatever
source_yv12 = source_yuy2 .ConvertToYV12() # Chroma gets upsampled (slight softening). No changes on luma.
processed_yv12 = source_yv12 .WhateverFilter(yv12_only)
processed_yuy2 = processed_yv12 .ConvertToYUY2()
\ .MergeChroma(source_yuy2) # Luma processed (there's no conversion loss)
# chroma is the original one -> not changed at all
However in case of SeeSaw, most probably you should not merge back chroma from the original clip, but from the denoised version. (If your denoising filter(s) worked on chroma too, that is.)
But in this way i don't lose precious informations converting from YUY2 to yv12 colorspace ?
In the end, you will be loosing all those precious informations anyway. For sure if you're going to encode to something like XviD/DivX, x264, mpeg-2 for DVD authoring, or whatever ... because in these usual cases,
you're always encoding to
YV12
;)
3ngel
31st January 2006, 12:57
Thanks mg262, and thanks Didee your explanations are always precious ;)
And yes i know that i'm always encoding to yv12 but you know, the less you lose during the travel the more you can sell :D
Isochroma
31st January 2006, 20:29
You could do a lanczos4resize(4x,4y) before the functions(s) that require yv12 and lanczos4resize(1/4x,1/4y). This would prevent chroma loss but result in much slower operation and higher memory usage. In fact, I bet even a pointresize or bilinear would be just as accurate in such a case?
foxyshadis
31st January 2006, 20:55
Not really worth it, better to just do separate luma/chroma filtering and merge them later, even it takes twice as long. (Except for filters where luma/chroma is selectable... most of Didée's can be trivially modified to support other colorspaces, they'd just end up more complex.) The main problem is enlarging screws up luma thresholds and radius settings, if they're even settable. I could set something up if there's a real demand for it.
Typically it will only make any difference if you're translating to a YV24/RGB end product, for whatever reason, though.
thegame
1st February 2006, 00:42
THANK YOU very much Pookie,i will try everything you suggested and download CPUZ.
thanks again guys for ALL the great work
game
I just checked with CPUZ and in Instructions there is "MMX,SSE,SSE2,SSE3"so what exactly does this mean?
thanks again
Pookie
1st February 2006, 03:10
That means you'll want to do the following (with the RemoveGrain Package)
Load("c:\yourPlugins\RemoveGrainsse2.dll")
Load("c:\yourPlugins\Repairsse2.dll")
Load("c:\yourPlugins\Masktools.dll")
Load other Plugins, etc
I know you have SSE3 capability, but I haven't always been able to get that one to work. Just try the above for starters.
thegame
2nd February 2006, 00:44
thanks again Pookie,it works now,if i posted a link to a sample of my captured from laserdisc clip,would you be willing to look at it and give me some ideas\pointers?
thanks agian
game
Pookie
2nd February 2006, 02:23
Yeah, but it is your eyes that matter. Check out this thread on the StarWars laserdisc saga - 58 Pages (lol) http://forum.videohelp.com/viewtopic.php?t=102812
Here's an entire website devoted to the Star Wars laserdisc transfer process
http://x0project.com/articles.php?i=00012 (lots of specific details on cleaning up your source)
As I mentioned, don't expect miracles on the Star Wars material. .
Also, tweak the denoise strength of SeeSaw to a higher setting than default.
a= last
b=a.degrainmedian(mode=1,limituv=8)
SeeSaw(a,b, NRlimit=8, NRlimit2=9, Sstr=1.5, Slimit=5, Spower=6, Sdamp=6, Szp=16)
thegame
2nd February 2006, 03:23
thanks again Pookie,and i am very much aware of Zion Mebejedi and others of the X0 project,they are regulars\moderators at Originaltrilogy dot com,as am I(dark jedi,not a mod though)i just got my hands on a NICE pioneer cld 97 Elite player, and alot more software and knowledge so i am going back and redoing some of my captures,here is a link to what i have done(all NTSC SW LD's):
http://www.galactictradefederation.com/dvd/OT/dj.html
and i really am interested in all of the filters by Dide'e,the example pics look great,from LimitedSharpen to SeeSaw.
i will upload a clip,also now with your latest suggestion,i have a argument "sdamp" error.
am I suppose to rename "sdamp" to "sdamplo" or "sdamphi"?
also here is the link to the clip i am working with:
http://www.megaupload.com/?d=FHEJKV8W
thanks for your help
game
Pookie
2nd February 2006, 08:50
Looked at your clip. You need to do a lot of things to it before SeeSaw. This gets to be off topic for this thread. Check the clip posted below with your original and what it looks like after processing. Search the threads for more info, but the steps are as follows:
Inverse Telecine --> Decimate --> Crop --> Denoise --> SeeSaw
http://www.megaupload.com/?d=PHEBLN4I (8MB Xvid)
thegame
3rd February 2006, 00:37
sorry for getting off topic,WOW Pookie that looks alot better,could you possibly post the script you used and i can try to copy it,how did you IVTC,what program did you use?or is avisynth scripts all you use?
after these questions i will ask no more about this in this thread,sseing how i am way off topic now,sorry guys,just really excited to learn new things from you PRO's
thanks again,and great looking clip Pookie,alot better than the original
game
here is what i am using now is this right?
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\RemoveGrain\RemoveGrainSSE2.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\RemoveGrain\RepairSSE2.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\DeGrainMedian\degrainmedian.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\vaguedenoiser\vaguedenoiser.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\filters\MVTools0991\MVTools.dll")
Import("C:\Program Files\AviSynth 2.5\scripts\SeeSaw.avs")
avisource("F:\LaserDisc Caps\test avi's\tns.avi")
ConverttoYV12()
AssumeBFF()
Telecide(guide=1,post=0)
Decimate()
crop(10,58,704,280)
a= last
b=a.degrainmedian(mode=1,limituv=8)
SeeSaw(a,b, NRlimit=8, NRlimit2=9, Sstr=1.5, Slimit=5, Spower=6, SdampLo=6, Szp=16)
addborders(8,83,8,83)
#lanczos4resize(720,382)
#addborders(8,53,8,53)
the 2 bottom # is what i would use to make anamorphic WS.
Pookie
3rd February 2006, 08:22
Yes, that's about the same as mine. Just PM me if you need more help.
SetMemoryMax(320)
LoadPlugin("d:\YOURPLUGINDIR\degrainmedian.dll")
#http://www.avisynth.org/warpenterprises/files/degrainmedian_25_dll_20050421.zip
LoadPlugin("d:\YOURPLUGINDIR\tivtc.dll")
#http://www.missouri.edu/~kes25c/TIVTCv1RC1.zip
LoadPlugin("d:\YOURPLUGINDIR\cnr2.dll")
#http://www.missouri.edu/~kes25c/cnr2_v261.zip
LoadPlugin("d:\YOURPLUGINDIR\fft3dfilter.dll") #read the doc for additional DLL needed.
#http://www.avisynth.org/warpenterprises/files/fft3dfilter_25_dll_20050803.zip
LoadPlugin("d:\YOURPLUGINDIR\removegrainSSE2.dll") #SeeSaw
LoadPlugin("d:\YOURPLUGINDIR\RepairSSE2.dll") #SeeSaw
LoadPlugin("d:\YOURPLUGINDIR\masktools.dll") #SeeSaw
import("D:\SCRIPTS\seesaw.avs")
AviSource("D:\clip\clip.avi")
converttoyv12()
tfm()
tdecimate()
crop(16,64,-16,-144)
Spline36Resize(1440,608) # Blow up the image so denoising will look more natural.
fft3dfilter(sigma=5,plane=0)
fft3dfilter(sigma=6,plane=3)
a = last
b=a.degrainmedian(mode=1).cnr2()
SeeSaw(a,b, NRlimit=6, NRlimit2=7, Sstr=1.5, Slimit=6, Spower=8, Sdamp=5, Szp=16)
Spline36Resize(720,304) #Reduce Size back to NTSC DVD spec
addborders(0,88,0,88)
thegame
4th February 2006, 01:23
thank you so very much Pookie,i will try this and get back to you,and thanks for letting me PM you,i will let you know how this works for me,and thanks for adding the links too
thanks again
game
on this line here;
"SeeSaw(a,b, NRlimit=6, NRlimit2=7, Sstr=1.5, Slimit=6, Spower=8, Sdamp=5, Szp=16)"
how does sdamp work for you,wasnt it renamed to sdamplo or sdamphi?the only way i can get that to work is if i add a lo or hi,am i doing something wrong or different?
thanks again
game
Pookie
4th February 2006, 06:46
I'm sure I was pointing to an older version of SeeSaw.avs as I have stuff scattered all over the place at the moment. The fun part of all this stuff is creating the recipe which will make your eyes happy. Try combinations of settings and see what you like. Those "aha!" moments are great :)
thegame
4th February 2006, 23:01
thanks again Pookie,you also have PM
game
Didée
4th February 2006, 23:24
how does sdamp work for you,wasnt it renamed to sdamplo or sdamphi?
Exactly. I told the story (http://forum.doom9.org/showthread.php?p=760935#post760935).
xara
6th February 2006, 21:11
Am I blind or loosed something?
Import("D:\Program Files\AviSynth 2.5\plugins\vdub_filters.avsi")
Import("D:\Program Files\AviSynth 2.5\plugins\SeeSaw.avsi")
LoadPlugin("D:\Program Files\AviSynth 2.5\plugins\RemoveGrain.dll")
LoadPlugin("D:\Program Files\AviSynth 2.5\plugins\degrainmedian.dll")
LoadPlugin("D:\Program Files\AviSynth 2.5\plugins\VagueDenoiser.dll")
LoadPlugin("D:\PROGRA~1\GORDIA~1\DGMPGDec\DGDecode.dll")
LoadPlugin("D:\PROGRA~1\GORDIA~1\AviSynthPlugins\KernelDeInt.dll")
LoadPlugin("D:\PROGRA~1\GORDIA~1\AviSynthPlugins\UnDot.dll")
# SOURCE
mpeg2source("I:\dvd\monstros3\monstros3.d2v")
AssumeTFF()
a = last
b=a.degrainmedian(mode=2).VagueDenoiser(threshold=0.8, method=1, nsteps=6, chromaT=0.8)
SeeSaw(a,b, NRlimit=0, NRlimit2=7, Sstr=1.5, Slimit=5, Spower=5, SdampLo=6, Szp=16)
# DEINTERLACING (2)
KernelDeInt(order=1,sharp=true,threshold=5)
# CROPPING
crop(12,16,696,446)
# REDIMENSIONANDO
LanczosResize(640,448)
# DENOISING
Undot()
ConvertToRGB()
VD_logo(579, 9, 200, true, 0, 0, 255, 0, "D:\Program Files\VirtualDub\plugins\xara24.bmp", false, 770, 0, 0, 100, 1270, 100)
Every time VirtualDubMPEG2 closes without any warning when I load this code.
- I download the linked filters in the first post
- Remove the a,b variables, calling only SeeSaw()
- Update AviSynth to 2.56
- Tried SSE2 filters
- Placed SeeSaw in different positions in the filters chain
I waste all my options and nothing works.
Any help will be really appreciate.
In time: should I use SeeSaw with separatefields/wave on interlaced sources? Didnt try this.
foxyshadis
6th February 2006, 22:10
Just to be certain: Removing seesaw entirely works, correct?
And since it's not an interlacing-aware filter, you will need to separatefields or bob first, yes.
xara
6th February 2006, 22:41
Just to be certain: Removing seesaw entirely works, correct?
Yes, when entirely removing SeeSaw I can compress in XviD.
And since it's not an interlacing-aware filter, you will need to separatefields or bob first, yes
I dont know. Is it? I just tried with separatefieds and as VDMPEG2 crashes I can't tell if it's interlacing-aware.
xara
7th February 2006, 01:31
Well, I disable "crop" and "lanczosresize" and VD show me the message below.
This is going beyond my expertise :scared:
Source is 720x480
Pookie
7th February 2006, 17:10
I would put SeeSaw last in the chain, after deinterlace/IVTC/delogo,etc
Are you pointing to the .d2v file on a networked drive ? Can you copy it to your local hard drive and try it ?
Add a Converttoyv12(), right after your Mpeg2Source line
Simplify your SeeSaw denoiser filters temporarily. Replace degrainmedian and vaguedenoiser with
a=last
b=a.RemoveGrain(mode=25)
SeeSaw(a,b, NRlimit=2, NRlimit2=3, Sstr=1.5, Slimit=5, Spower=5, SdampLo=6, Szp=16)
Finally, try a different source, just for testing purposes.
xara
7th February 2006, 23:09
Thank you Pookie for the tips and time.
I think the problem is solved and was related with the RemoveGrain filter path.
I found another thread about this issue and relocated all RemoveGrain filters suite out of AviSynth/plugins directory.
Now VD is loading the code with SeeSaw. I'm happy again :D
Razorholt
8th February 2006, 23:41
Is it possible to tweak SeeSaw in order to get rid of the echo on edges (or whatever you call that effect)? Should I consider adding another filter?
http://www.nubastream.com/dan/badcontour.gif
My code is:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\MaskTools158\MaskTools.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\VagueDenoiser\VagueDenoiser.dll")
Import("C:\Program Files\AviSynth 2.5\plugins\mvbob\mvbob.avs")
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\DGDecode.dll")
MPEG2Source("Z:\DestB\VTS_01_2.d2v")
mvbob()
Import("C:\Program Files\AviSynth 2.5\plugins\SeeSaw.avs")
ConvertToYv12()
a = last
b=a.VagueDenoiser(threshold=0.8, method=1, nsteps=6, chromaT=0.8)
SeeSaw(a,b, NRlimit=6, NRlimit2=7, Sstr=1.5, Slimit=5, Spower=5, Szp=16)
Lanczos4Resize(640,372)
Thanks for your help :)
- Dan
Didée
9th February 2006, 00:02
Sure - use a halo remover beforehand. The sharpening part of SeeSaw is rather delicate in this respect: it will hardly create any halo artefacts if the source is free of them (perfectly free). However if halos are already present in the source, be it even-so-slightly, the sharpener will happily enhance them.
Oh, and I hope that your result of MVBob() is absolutely free of any residual combing... Sharpening of sources that have been deinterlaced is always problematic, same goes for SeeSaw.
Razorholt
9th February 2006, 01:26
Ok, I added the DeHalo_alpha() filter and the result was not too bad. :) Which part(s) of Seesaw you'd recommend me to play with?
Regarding MVBob() it doesn't create any noise or halo at all. It's a pretty good filter actually.
Thanks,
- Dan
Pookie
9th February 2006, 20:01
That's a textbook perfect example of haloing. :D
You might want to run your source through FFT3Dfilter with SeeSaw, although it will be slow. Still, the results might be worth it.
Razorholt
9th February 2006, 20:38
Good idea Pookie.. I'm going to try that. :) Thanks!
boombastic
23rd May 2006, 20:40
I'm calling seesaw in this way:
LoadPlugin("i:\PROGRAMMI\Avisynth 2.5\filtri\degrainmedian.dll")
LoadPlugin("i:\PROGRAMMI\Avisynth 2.5\filtri\RSharpen.dll")
LoadPlugin("i:\PROGRAMMI\Avisynth 2.5\filtri\DenoiseSharpen.dll")
LoadPlugin("i:\PROGRAMMI\Avisynth 2.5\filtri\Repair.dll")
LoadPlugin("c:\PROGRAMMI\Avisynth 2.5\filtri\mt_masktools.dll")
LoadPlugin("c:\PROGRAMMI\Avisynth 2.5\filtri\RemoveGrain.dll")
import("c:\PROGRAMMI\Avisynth 2.5\filtri\SeeSaw.avs")
a= last
b=a.DegrainMedian(mode=2)
SeeSaw(a,b, NRlimit=3, NRlimit2=4, Sstr=1.5, Slimit=5, Spower=5, Sdamplo=6, Szp=16)
but i get the error:
ther's no function named yv12lutxy
what am i missing?
Boulder
23rd May 2006, 20:55
You need the v1.x Masktools dll.
Pookie
24th May 2006, 02:49
http://manao4.free.fr/MaskTools-v1.5.8.zip
boombastic
24th May 2006, 06:18
Sorry for not reading a few post ago where someone had the same problem.Thanks for the help,now everything is fine!
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.