When Mine Eyes Grow Tired...

Here everybody can post his problems with PhotoLine
cathodeRay
Mitglied
Beiträge: 151
Registriert: So 15 Nov 2015 12:37

When Mine Eyes Grow Tired...

Beitrag von cathodeRay »

Happy New year One and All!

Overlapping to some extent with Ken and other's interests in zone effects, I have been continuing my attempts to understand similar concepts not just in relation to tone/contrast and exposure, but also on what I shall call here lumaX and pumaX. By these I mean the overall brightness and colourfulness. As usual, terminology is almost more a hindrance than a help, but if we think in terms of colour representations, lumaX is related to the L in Lab, the B or V in HSB/HSV, and the L in HSL and I in HSI (and btb - I am still not clear whether PL's HIS is - as seems perhaps more likely - HSI, or HSL labelled as HIS), and pumaX (don't ask why I chose that name) is related to the S in HSB/HSV and HSL and HSI.

The first problem is the different meanings of all the components in different representations, and the fact that some of them, while claiming to be more intuitive than RGB, are prone to absurdities (like a 'soft' pink being fully saturated). All my attempts to get my head round the actual ('real-world' as opposed to the mathematical) meanings of the lumaX variants are painful enough: throw in the pumaX interactions and it's a nightmare. Then there is the fact that all the Hxx representations are always and only mathematically derived from RGB, so to my mind they cannot work any magic, they only recast the data in another way, a sort of mathematical RGB Latin dressed as English lamb - supposedly more palatable (intuitive) but not in reality necessarily so.

So - to get to the point: PL very usefully usually embeds relevant histograms in curves dialogs using different colour representations, so we can see what is going on, but I have found it isn't always reliably there (> 1 layer?) and also it is not always clear to me whether the HG is is before or after once a change has been made. It may be a change needs to be committed and then a new curves dialog will show the altered HG. Meanwhile, I continue to peer at the actual image, peering to see the changes, peering until mine eyes grow tired...

It then occurred to me that while the final image is King, there might be a short-cut to seeing the changes, by using input/output scatter plots (x is the input value, y is the output value, a 45 degree line of dots = no change etc). The component being looked at might be the S value (pumaX) or one of the lumaX values (B (V) L or I).

This has in fact been done, in an attempt to understand what the STSNBN's vibrance thingy does - see here. The essential problem is that vibrance itself isn't a component of any colour representation, so we can't look at vibrance itself, we have to use a proxy that is accessible. The plots further down the page are to my eyes very revealing: one can see how vibrance works - and also why saturation doesn't. Just as importantly, the scatter plots suggest useful starting curves for adjustments: for example, to get a vibrance effect, one needs to boost saturation along the lines, so to speak, of the of the vibrance scatter plots. Similar plots of a lumaX component of the colour representations would be very helpful in understanding how, for example, zonal exposure adjustments actually affect an image. I would also be very interested to see how vibrance affects exposure/tone/contrast, by looking at lumaX scatter plots - and so on and so forth.

The examples linked to above used Mathematica ($$$) and Nodebox (!?!) but it seems to me that Python (plus a couple of libraries, numPy and MatPlotLib) could do much the same thing. In fact, I expected the web to be awash with examples once I had found the right search term, but it seems not to be the case. There is something called ImageJ (yes a Java based image manipulator with loads of plugins/libraries) that might be able to do it - but I am not sure - and it would mean yet another bit of software to be installed and learnt. In my book, there is still plenty of room for the parsimonious approach (which to me is one of the great appeals of PL - one very competent bit of software that can achieve a vast amount in-house).

So - to avoid re-inventing the wheel if it is already out there, does anyone know of a ready solution to do input/output scatter plots? If the answer is 'No' I'll see what I can come up with and report back in due course (but don't hold your breath, I am still in the very early stages of getting to grips with Python).

cathodeRay
cathodeRay
Mitglied
Beiträge: 151
Registriert: So 15 Nov 2015 12:37

Re: When Mine Eyes Grow Tired...

Beitrag von cathodeRay »

Well, I have sort of got this working, I think...

Using python 3.4 with numpy and matplotlib added (be warned, installing python/python modules is not for the faint-hearted):

1. Load (imread) a pair of images rgb data into two arrays and while we're at it convert from 0-255 to 0-1
2. Convert the arrays to HSV (=HSB) and extract the S Value ('array slicing' - the [:,:,1] bit, array is zero based so S is at position 1)
3. Make a scatter plot of the first image S values against the second image S values on a per pixel basis
4. Set the plot marker alpha (transparency) to a low figure so density builds where there are more pixels with the same values
5. Do a bit of formatting (seems a bit unreliable - eg axis scaling to 0 - 1 doesn't reliably happen) and then plot the freakin' thing!

The actual script:

import numpy
import matplotlib.colors as clrs
import matplotlib.pyplot as plt

ipath1=r"path\test1.jpg"
ipath2=r"path\test2.jpg"

image1 = plt.imread(ipath1)/255
image2 = plt.imread(ipath2)/255

x = clrs.rgb_to_hsv(image1)
y = clrs.rgb_to_hsv(image2)

x = x[:,:,1]
y = y[:,:,1]

plt.scatter(x, y, c='b', marker='o', alpha=0.01)
plt.axis([0, 1, 0, 1])
plt.axis('square')
plt.show()

The first plot is the original image plotted against itself, to confirm the technique behaves as expected ie a straight 45 degree line as the pixel S values haven't changed. The range of values (approx from 0 to around 0.6) is credible, having run the eyedropper in HSV mode over the original image and had a look at the saturation histogram. The second plot is the original vs the same image with saturation pushed painfully high (two sat runs in PL). The whole thing is rather basic, and could do with a lot of tweaking and improving, but the basic idea appears to work. We can see in the second plot how the S values have moved upwards, as well as the bunched horizontal line at the top, where the S value has been clipped (I did say it was saturation to the point of pain). It provides a basic technique to allow us to wee what changes are happening, and could easily be extended to look at other components eg L after a Lab conversion (but may need extra modules to handle the conversion), or, for example, to see how PS vibrance adjustments change saturation (as was done in the link in my original post - essentially I've replicated (so credit where credit is due) the technique using a local python setup) and/or lightness values, whether a hue shift has occurred, or whatever, as our fancy may or may not take us.

ovoi.jpg
ovmi.jpg
cR

PS maybe I need to get out more often....
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Herbert123
Mitglied
Beiträge: 2172
Registriert: Sa 12 Mai 2012 21:38

Re: When Mine Eyes Grow Tired...

Beitrag von Herbert123 »

I found your post quite interesting. I always wondered about Photoshop's Vibrance adjustment layer, and thought that an equivalent in PhotoLine would be very useful to have.

When reading your post, I got a hunch, and I am able to replicate the Vibrance filter somewhat - although the final effect in Photoshop is still different, it actually comes quite close.

I've used the PhotoDisc test image (download: http://www.gballard.net/photoshop/pdi_download/)

1) open the image, and use the Change Channels option to create a mask of the saturation channel (also set to "copy").
2) Create a layer mask from this selection/lasso. Copy this layer mask.
3) the bottom layer mask must be inverted (Alt-i). The top layer mask must be set to subtract layer blend mode. Select both, and group these two layer masks.
4) select the image layer, and add a Hue/Saturation adjustment layer. Then drag the layer mask group on this Hue/Saturation layer.
5) increase the saturation of the Hue/Saturation layer.

The end result is quite similar to Photoshop's Vibrance adjustment layer - not quite the same, though: the colours seems deeper overall in Photoshop's version. Still, quite usable. I noticed jpg artefacting is much more pronounced in Photoshop's Vibrance function, which leads me to believe PS adds more contrast somehow. And pure greens are left alone by Photoshop's Vibrance - perhaps that is the main difference?

If you or anyone else knows how to achieve the identical effect: please improve on my approach.
/*---------------------------------------------*/
System: Win10 64bit - i7 920@3.6Ghz, p6t Deluxe v1, 48gb (6x8gb RipjawsX), Nvidia GTX1080 8GB, Revodrive X2 240gb, e-mu 1820, 2XSamsung SA850 (2560*1440) and 1XHP2408H 1920*1200 portrait
maxwell
Mitglied
Beiträge: 222
Registriert: Mo 01 Jul 2013 20:53

Re: When Mine Eyes Grow Tired...

Beitrag von maxwell »

Herbert123 hat geschrieben: Mo 23 Jan 2017 08:27 I found your post quite interesting. I always wondered about Photoshop's Vibrance adjustment layer, and thought that an equivalent in PhotoLine would be very useful to have.

When reading your post, I got a hunch, and I am able to replicate the Vibrance filter somewhat - although the final effect in Photoshop is still different, it actually comes quite close.

I've used the PhotoDisc test image (download: http://www.gballard.net/photoshop/pdi_download/)

1) open the image, and use the Change Channels option to create a mask of the saturation channel (also set to "copy").
2) Create a layer mask from this selection/lasso. Copy this layer mask.
3) the bottom layer mask must be inverted (Alt-i). The top layer mask must be set to subtract layer blend mode. Select both, and group these two layer masks.
4) select the image layer, and add a Hue/Saturation adjustment layer. Then drag the layer mask group on this Hue/Saturation layer.
5) increase the saturation of the Hue/Saturation layer.

The end result is quite similar to Photoshop's Vibrance adjustment layer - not quite the same, though: the colours seems deeper overall in Photoshop's version. Still, quite usable. I noticed jpg artefacting is much more pronounced in Photoshop's Vibrance function, which leads me to believe PS adds more contrast somehow. And pure greens are left alone by Photoshop's Vibrance - perhaps that is the main difference?

If you or anyone else knows how to achieve the identical effect: please improve on my approach.
Normally I use the gradation tool in the HSV color space and fit then the saturation curve. Setting a point corresponding to the adjusted saturation e.g. 50% as x value I drag the curve up to a certain level. This method also corresponds to the conversion of a psd file with vibrance layer in Photoline. The obtained results are similar to the results which I obtain by Photoshop.
Benutzeravatar
photoken
Mitglied
Beiträge: 2162
Registriert: Sa 28 Sep 2013 01:25

Re: When Mine Eyes Grow Tired...

Beitrag von photoken »

Herbert123 hat geschrieben: Mo 23 Jan 2017 08:27 If you or anyone else knows how to achieve the identical effect: please improve on my approach.
I simply use a Curves adjustment layer in HIS mode to adjust curve of the "S" channel.

Many times I want to increase the Saturation (Vibrancy) only for specific colours, and "protect" other colours. In that case, I use the Hue Editor.
Ken
Yes, I think it can be eeeeeasily done....
Just take everything out on Highway 61.
cathodeRay
Mitglied
Beiträge: 151
Registriert: So 15 Nov 2015 12:37

Re: When Mine Eyes Grow Tired...

Beitrag von cathodeRay »

Thank you all for your informative replies. I note that unlike certain others on another forum we are all very happy to describe and discuss openly and frankly the techniques we use, a great credit to the milieu of this forum. Apologies in advance for what is rather a long post, but I want to cover some basics, at least as I see them.

I started this thread and the earlier related ones because I am often faced with a slide scan in which the colours are flat, or dull, or faded. It's not contrast that is missing, but colour. The grass is dull, the bark is grey, the sky is washed out, the colours of the clothing look like they've been through the washing machine too many times. There may or may not be a colour cast: if there is, that is usually easily enough removed using a standard technique (white point, per channel HG equalisation, inverted average colour layers etc). What I wanted was a quick way of boosting the dull colours in the image without causing saturation clipping in the already saturated colours, something more subtle that the various blend modes could achieve. PS's vibrance adjustment seems (and looks, from examples online) just the ticket. Even Adobe's description of what it does (but never how it does it - that's the holy grail) seems spot on: preferentially boost low sat colours while protecting high sat colours and skin tones, to latter to avoid the orange/red face look.

The first problem I came up against was: what saturation am I trying to target? As noted earlier, saturation and brightness/intensity/whatever it is called are slippery beasts, prone to interact, and don't always make intuitive sense. For what it is worth, the CIE definition of saturation, if I've got it right, is 'saturation is the colourfulness of an area judged in proportion to its brightness' - in other words, even worse, saturation is not a pure concept, but a relative one. All very complicating.

Starting with what is probably a physics red-herring, saturated colour is, as I understand it, colour (light) where a plot of the wavelength by intensity is narrow and spiky rather than broad and flat. This makes sense: as the plot becomes broader and flatter, as we add more light at other wavelengths, we are in effect making the light greyer (less saturated) until, if we make all the wavelengths pretty much the same we have grey/white - zero saturation.

So we want a colour representation that works as expected. This matters because under the hood the adjustments are always maths done on the pixel values, usually, but not by any means always, just the sat value. If the sat scale in the colour representation is wonky, we're doomed from the start. The wonkiness will disturb what we want to happen.

The readily available colour representations are RGB, HSV/B, HSL/HLS, HSI and Lab. We can forget RGB because the numbers obfuscate the saturation (odd that - from the above it might seem that spikeyness/flatness in the RGB values might somehow be correlated with sat, but if it is, we can't seem to get at it). Lab implies all the sat info might be in the ab values, but then again sat is supposed relative to brightness (L), and anyway tweaking the ab values is a bit like playing with electric eels: always slippery, and often shocking. All the Hxx representations have something called a sat channel - but they are not all the same. So which one is best of the ones we have available?

PL routinely has HSI/HIS (Change Channels, Histogram Equalisation, Curves, Hue Editor) and HSV/B (Curves, Hue Editor, Hue/Saturation - at least that's how the sliders are named). HSV also sometimes turns up in the Blend modes, meaning we can switch to blending/paining in just saturation (ie deselect hue and value). The eyedropper panels can have either HSV or HIS. The colour editor has HSV in the dropdown, but labels the slider Intensity - so I am not sure whether it is HSV/B or HIS/HSI. It might even be HSL/HLS! Oh dear! However, while we have the colour editor open, we can usefully see what the sliders do: set the hue to red, and slide the sat and intensity sliders, and what we see makes sense: the sat slider moves the selection square left/right, and the intensity slider moves it up and down. And we can also see some of the oddities of 'saturation' - eg the top right hand side/wall, where the colours are visually dull, but fully saturated. Uh, oh... However, if we dial in cyan (#80FFFF) and look at the sat/intensity numbers we see S=127 and I=255 so I think - based on what other colour chart/pickers show - using 0-1 numbers, cyan S = 0.5 in HSB/V, S = 1 in HSL and S = 0.4 in HSI - that, at least in the colour editor, despite the labels, PL is working with HSB/V. So - making a wild assumption - I stand to be fully corrected - I think PL's native Hxx colour representation is probably HSV/B.

And this, I think, is where we start to become unstuck. Any saturation mask, and so any 'vibrance target mask' made by inverting a sat mask, isn't going to select all the colours we perceptually see as dull/flat, because HSB/V considers some of then to be already near fully saturated. Likewise any sat curve based technique is hampered by the fact the native (unaltered) curve doesn't fit well with what we percieve: so parts of the curve indicate near full sat where we see flatness/dullness. That said, maybe we should be grateful for small mercies: at least HSB/V does a better job than HSL, which famously has pale pink as around 75% saturated (hullo?) (in HSB/V it's more realistically nearer 20%). Try putting #f7c4ee into http://colorizer.org/ (or any other multi-colour representation picker) to see what I mean.

All of which is why I went off to try and get the python plots working. We can see from the above plots that PL's sat slider appears to some sort of multiplication thing (bigger initial values increase more than smaller original values) and this definitely not what we want for vibrance. In fact, we want the opposite: a plot that is a long half pear shape at 45 degrees - bearing in mind the sat numbers don't always correspond well with what we see. I have also assumed (but have yet to verify) that what matplotlib calls rgb to hsv really is rgb to hsv (need to look at the actual sums done).

So the next stage, at least for me, is to do some plots of original vs vibrance enhanced images. Since I (naturally) don't have PS, I will have to use web samples, and hope that what is reported as the given treatment was the given treatment, and also that any re-jigging for the web applied didn't introduce artefacts. This idea is that once I can see which way I want to move the sat (and quite possibly luma) plots, I can then start to put together something in PL that achieves that aim.

Alternatively - we could all put in a plea to the Huber brothers for a Vibrance adjustment/layer! But then again, that would be an instant fix, if we got it (Bruce beware, or do I mean beware Bruce?), and, any road, we might not learn much or have some fun along the way.

I'll be back, once I've done some more plots...

cR
bruce1951
Mitglied
Beiträge: 414
Registriert: Sa 23 Apr 2016 17:03

Re: When Mine Eyes Grow Tired...

Beitrag von bruce1951 »

Oh no cathodeRay. You cut me deeply. :?
What I like and what the majority like are two different things. But I see no reason why automatic can't always be provided alongside a nice shiny set of sliders!!! The truth be know I once used all auto. I did!! But after a while I got tired of results that looked like what other thought were right. I want to make my own mistakes.

I only wish I had the time to try all these adjustments.

regards
Benutzeravatar
photoken
Mitglied
Beiträge: 2162
Registriert: Sa 28 Sep 2013 01:25

Re: When Mine Eyes Grow Tired...

Beitrag von photoken »

cathodeRay hat geschrieben: Mo 23 Jan 2017 14:29 And this, I think, is where we start to become unstuck. Any saturation mask, and so any 'vibrance target mask' made by inverting a sat mask, isn't going to select all the colours we perceptually see as dull/flat, because HSB/V considers some of then to be already near fully saturated. Likewise any sat curve based technique is hampered by the fact the native (unaltered) curve doesn't fit well with what we percieve: so parts of the curve indicate near full sat where we see flatness/dullness. That said, maybe we should be grateful for small mercies: at least HSB/V does a better job than HSL, which famously has pale pink as around 75% saturated (hullo?) (in HSB/V it's more realistically nearer 20%). Try putting #f7c4ee into http://colorizer.org/ (or any other multi-colour representation picker) to see what I mean.
Yep. That's why I use the two techniques I mentioned rather than trying to find a general "Vibrancy" solution (whether or not that general solution uses "saturation masks").

For me, the important thing is the end result for a specific image. For example, PS's "protection" of Caucasian skin colours is often a good thing, but there will invariably be times when I do want to add a bit of warmth to the skin tones. I will always need to see the effect on the image itself and will always want to adjust the hues and saturations of specific areas independently from each other.

That's why I'm more than satisfied to use a Curves or Hue Editor adjustment layer rather than a general "Vibrancy" adjustment -- those adjustment layers give me the flexibility, precision, ease of use and speed that I need.

Having said all that, I want to make it absolutely clear that I encourage you to continue your exploration of these concepts. We all benefit from that knowledge. :)
Ken
Yes, I think it can be eeeeeasily done....
Just take everything out on Highway 61.
bkh
Betatester
Beiträge: 3674
Registriert: Do 26 Nov 2009 22:59

Re: When Mine Eyes Grow Tired...

Beitrag von bkh »

cathodeRay hat geschrieben: Mo 23 Jan 2017 14:29The first problem I came up against was: what saturation am I trying to target? As noted earlier, saturation and brightness/intensity/whatever it is called are slippery beasts, prone to interact, and don't always make intuitive sense. For what it is worth, the CIE definition of saturation, if I've got it right, is 'saturation is the colourfulness of an area judged in proportion to its brightness' - in other words, even worse, saturation is not a pure concept, but a relative one.
As I wrote earlier, I think that your main problem is that saturation is the wrong concept for you – you probably want chroma. Pure RGB red is always fully saturated, even if the R value is close to zero, but has different chroma. Common language is different from the mathematical definition of saturation in the various colour models. (And all the HSI, HSL, HSV, … are aimed at quick conversion from/to RGB, rather than at precisely modelling human vision). The concept of saturation makes sense if you change the luminance (or its variants) of an image.

Things are complicated by the fact that PL sometimes uses the term "saturation" (or an S channel) where the channel is actually a chroma channel (like in the HIS colour model, or the saturation channel in "Change channels …"). That's why the HIS curves adjustment works pretty well to increase "vibrance", and also why Herbert's mask approach works (instead of the masks, one could also use a colour filter, as far as I can see). Lab will also work, and might be best if one mainly wants to boost reds and blues and leave greens largely unchanged. Unfortunately, PL does not have LCh.
cathodeRay hat geschrieben: Mo 23 Jan 2017 14:29 All of which is why I went off to try and get the python plots working. We can see from the above plots that PL's sat slider appears to some sort of multiplication thing (bigger initial values increase more than smaller original values) and this definitely not what we want for vibrance. In fact, we want the opposite: a plot that is a long half pear shape at 45 degrees - bearing in mind the sat numbers don't always correspond well with what we see. I have also assumed (but have yet to verify) that what matplotlib calls rgb to hsv really is rgb to hsv (need to look at the actual sums done).
Again, have a look at chroma rather than saturation. I guess that you'll get more conclusive results. If Herbert is right that green isn't affected as much, then it might also be worth looking at different hues separately.

Btw., no need to rely on matplotlib for any rgb to hsv coordiante transformations. You don't need hue, PL's HSV follows the standard (https://en.wikipedia.org/wiki/HSL_and_HSV), and "S" in HIS seems to be I-min(R,G,B).

Cheers

Burkhard.
cathodeRay
Mitglied
Beiträge: 151
Registriert: So 15 Nov 2015 12:37

Re: When Mine Eyes Grow Tired...

Beitrag von cathodeRay »

Thanks again everyone for your replies. FWIW (see below), I have in the meantime done some more plots using downloaded copies of the Meyer PhotoDisc images and clearly something is astray:

original vs original_350.png
original vs S50_350.png
original vs S100_350.png
Grrrr... seems I can't put them all in one post (nor can I get them side by side...see next post for the vibrance plots...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
cathodeRay
Mitglied
Beiträge: 151
Registriert: So 15 Nov 2015 12:37

Re: When Mine Eyes Grow Tired...

Beitrag von cathodeRay »

Plots continued...

original vs V50_350.png
original vs V100_350.png

Although the general shapes may make some sort of sense, the points below the 45 degree no change line don't, nor do the ones crowded on the Right hand border, and some on the top border may (or may not) also be suspect.

Burkhard - I did for my own interest look at the matplotlib RGB to HSV function and here is the meat of it, with some #comments added (they were set off to the right, but posting the post has collapsed the white space, so less easy to read, grrrr....) :

out = np.zeros_like(arr)
arr_max = arr.max(-1)
ipos = arr_max > 0
delta = arr.ptp(-1) # delta is the min to max range, ie max minus min; this is also Chroma
s = np.zeros_like(delta) # create an empty (full of zeros) array - why not?
s[ipos] = delta[ipos] / arr_max[ipos] # the meat: for every pixel, divide Chroma by Value
ipos = delta > 0
# red is max
idx = (arr[..., 0] == arr_max) & ipos
out[idx, 0] = (arr[idx, 1] - arr[idx, 2]) / delta[idx]
# green is max
idx = (arr[..., 1] == arr_max) & ipos
out[idx, 0] = 2. + (arr[idx, 2] - arr[idx, 0]) / delta[idx]
# blue is max
idx = (arr[..., 2] == arr_max) & ipos
out[idx, 0] = 4. + (arr[idx, 0] - arr[idx, 1]) / delta[idx]

out[..., 0] = (out[..., 0] / 6.0) % 1.0 # if you say so
out[..., 1] = s # see above
out[..., 2] = arr_max # seems correct, ie MAX(r,g,b)

So I think the sums are generally right (also tentatively confirmed by printing out part of the arrays and checking that the calculated S value was correct for the given rgb values, though only done for a very small sample). However, the plots aren't, so either there are some exception situations where the sums blow up, though I am not sure I can see them given the above, or there is something astray with the downloaded images - registration not perfect, uploading/downloading jiggery pokery, or whatever.

At some point even I will accept there is a law of diminishing returns to be applied here, though the other bit of me wants to make the plotting work because it's a challenge. That said, Burkhard, I think we may have said elsewhere it is chroma, not sat, that is really of interest, and that confused terminology doesn't help.

I wonder if in a way Ken's curves with lockdown points and Herbert's masks are in effect two different ways of doing the same thing, with slightly different emphases: say Ken's curves are more precise about what is applied, Herbert's masks are more precise about where it is applied. I have to admit that my natural inclination is towards masks (as long as they are quick to set up), because I like the fact you can see in 2D where the effects are and by how much, plus the fact the mask can be visually edited in various ways, even to the extent of changing its overall opacity. But then again there is also a place for the precision of curves...

Bruce, I'm right with you on No Autos. I don't go as far as doing linear scans, but the only thing I let the scanner do is stretch the histogram on a per channel basis (which seems pretty harmless, and saves a step in PL). Once in PL I may semi-automatically correct the white point if it is off, but from that point on its manual all the way. Once in a long while I run the Auto Corrections, just to confirm I am happier doing things manually.

cR
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.