I can't bring you the full Thorniewood by-election result yet, because it doesn't seem to have been published online, and probably won't filter through to social media until the morning. But what we do know is that the SNP were narrowly ahead on first preferences. Labour nudged ahead at one point on transfers, and then the SNP fought back to reach the quota on the sixth count. It sounds to me like the swing from Labour to SNP must have been in the region of 23%, because that's the minimum that would have would have been required to place the SNP in front on first preferences.
Just in case 23% sounds like a rather pedestrian swing compared to what we got used to a couple of months ago, fear not. This time we're measuring from a completely different baseline. The Thorniewood ward was last contested at the local elections in 2012, when the SNP were already 1% ahead of Labour nationally (a result that was memorably described by unwitting comedy legend Mike Smithson as a "disaster for the SNP"). So a 23% swing tonight is roughly equivalent to a 34% or 35% swing at the general election. That's not quite as high as the record-breaking 39% achieved by Anne McLaughlin in Glasgow North-East, but it's very much at the upper end of the spectrum. If it was replicated across the country, it would place the SNP very nearly 50 points clear of Labour, although of course that's grossly misleading, because the swings are bound to be biggest where Labour were previously strongest.
This being the crazy world of by-elections under the Single Transferable Vote system, it's technically an SNP "hold" - even though the SNP were a mind-boggling 46% behind Labour the last time the ward was fought.
* * *
UPDATE : The full result is now available. At 25%, the swing was a bit higher than I assumed, and it turns out that Labour were never ahead at any stage in the count.