Closed Desmis closed 8 years ago
Bonjour Jacques, I saw the new branch yesterday and my first tests look very promising, très promettant! Am I right in thinking that edge sharpness in wavelets is not the same thing as the two sharpening tools in RT (usm and RL deconvolution)? Until now I preferred using one of those two over the wavelet sharpening tools. But that might very well change with your new tool, it seems to give superior results, at first sight at least.
I just push a change :
\ you can used TIFF, JPG...
\ probably (sure) difference between preview and TIF, but I have tried to minimize...to tested on several images
:)
This is starting to become very complicated! I noticed that when I use the unsharp tool in wavelets, the normal usm en R/Lucy Deconvolution do not work anymore. This is not the first time I notice this. There seems to be something in the code that makes RT unresponsive, it has to do with the new unsharp thing. I'll make a debug build later on.
I just add "Retinex chroma" to Wavelet Residual... It is a slider 'chroma' - when "0" only Luma, for example if slider = 30, chroma retinex is 30% of strength retinex 'luma'
Paul I don't understand, for me on my computer all works fine. You can enabled "Sharp wavelet" and also "Unsharp mask" or "RL deconvolution", at the same time. The code(s) are separated and not at the same place in the process :)
I have modified "Wavelet levels" and also code of "Noise Reduction" to allow levels<4. Now you can use "level 3" and "level 2" with "Wavelet level"...I think it's usefull for "Retinex"...and others... Obviously some functions are disabled for levels 3 or 4 (Denoise and refine).
I go to Paris with my children for four days from tomorrow. Then I will be traveling until December 14.
:)
Have fun Jacques! I am trying your new wavelet settings and again they look promising. I'll see to write a new article about this;
Regards, Paul.
Op 25-11-15 om 11:14 schreef Desmis:
I have modified "Wavelet levels" and also code of "Noise Reduction" to allow levels<4. Now you can use "level 3" and "level 2" with "Wavelet level"...I think it's usefull for "Retinex"...and others... Obviously some functions are disabled for levels 3 or 4 (Denoise and refine).
I go to Paris with my children for four days from tomorrow. Then I will be traveling until December 14.
:)
— Reply to this email directly or view it on GitHub https://github.com/Beep6581/RawTherapee/issues/2982#issuecomment-159561595.
I add a combobox in "Residual image". You can choose either the Retinex process is located in "Residual", either at the end of Wavelet in Final Touchup....I used the sames sliders in Residual. You can see in "Final touchup" a label : "Procees Reinex 'Final Touchup' actived" if you select "Final touchup" in the combobox.
:) Tuesday , i will be away until December 14.
I have updated Rawpedia (in french) : Retinex and Wavelet (Ondelettes)
:)
HDR merge and others...
I'm working on mixture of images (merge). For example you can dial a new image from an underexposed and one overexposed, ... or whatever. I tried it a few months ago, but I had given up view complexity to implement in RT pipelines.
I approach the problem completely differently: 1) from a first image - whose full treatment is done with RT - I develop a file saved to disk. This file contains the "Lab data" of the entire image.
2) Then a second image is opened. Here we integrate the data previously saved. The problem is in the process of recovering (dcrop.cc) of similar data (Lab) and taking into account the image size and crop (coordonates and skip value).
I had great difficulty - crashes, GUI, etc. But at this stage, 1) and 2) seem to work ... including the GUI.
Of course there is still much to do the real merge ...:
Then we can build a new image, with all RT tools, from the first and second images.
There is still much work to be done several days or weeks, but I am reasonably optimistic.
The first version that I hope soon spread will probably not ergonomic. Additionally the user will require a lot of reflections before reaching a result.
And if I can not !! :)
Hi Jacques! May be internal RT mechanisms similar to darkframe/ flatfield could be used to read under/over exposed images and do the merge? My 2c from GUI standpoint -
"And if I can not !! :)" - we haven't seen anything of that sort yet;)!
Hello Michael I don't use multiple thumbnails...or demosaincing or else... I think you have to forget what you've used ...no "special" demosaicing, no "special" treatment...
The user had 2 images, and I suppose they are enough good...to be merge !! 1) he treat the first..as he want==> save L_a_b* datas 2) he open the second and "load" L_a_b* of the first These 2 points work correctly on my computer.
Now - and it seems to me to be "easy" - we can "merge" the 2 simultaneously....with wavelets...
The process of "merging" is at the end of RT treatment...You simply "add" 2 images...and you will see directly (I hope) the result....:)
Thank you for your remarks....
I hope a result about January 15th...
Is anyone can put a link with images to merge...one under-exposed and the other overexposed !
Thank you :)
Hey Jacques!
You can find some bracketed sets here: http://filebin.net/upload/szh19yrhru
Also: http://rawtherapee.com/shared/test_images/amsterdam_moving_boat_1.pef http://rawtherapee.com/shared/test_images/amsterdam_moving_boat_2.pef http://rawtherapee.com/shared/test_images/amsterdam_moving_boat_3.pef http://rawtherapee.com/shared/test_images/london_bridge_moving_1.pef http://rawtherapee.com/shared/test_images/london_bridge_moving_2.pef http://rawtherapee.com/shared/test_images/london_bridge_moving_3.pef
It's not common to have just two images in a bracketing set, because cameras are designed to support bracketing sets consisting of 3, 5 or 9 images, not 2, and shooting two images of varying exposure manually requires touching the camera, which leads to misalignment.
I for one would totally prevent any new big feature in master, unless you're looking for trouble with Gtk3 or drop the Gtk3 branch.
HRD feature is the kind of BIG feature (because it deeply touch the pipeline) to add to the upcoming new master. Even if the Gtk3 branch is not totally stable yet, I think it's in an ok state for new features.
Generally speaking, we should must find a successful Git branching method, e.g. this one: http://nvie.com/posts/a-successful-git-branching-model/
For the HDR merging feature (if we want to discuss it there), I think the most flexible and feature/future proof thing to do is to handle more than one History for the same processing + a "Combining" tab that will list tools that need more than one pp3 to operate.
This is a nice and very interesting feature, but I would really not want to see something modified in the pipeline that will lock doors for other overdue tools, or having to revert this one to make it differently.
@Hombre57 The linked branching strategy sounds clean and orderly and I have used something similar at work. But we should also consider that managing many branches has a certain overhead (even if it is just decided what to do on which branch ;-)) and a small team might be better off just using a single master branch and feature branches doing frequent releases to ensure stability instead of having two levels of maintenance branches.
My opinion on the matter is that:
Assuming the majority of people using modern versions of RT also use a modern system, backporting things from Gtk3/GCC5 to Gtk2/GCC4 and to the win32 branch will enable us to simply stop doing that when we find ourselves not having enough time for that and not many people will feel the consequence, while if we keep using Gtk2/GCC4 as the primary standard then we will always need to "forward-port" things and that will get more difficult with time.
As for this tool it sounds very interesting, it should have its own branch and its own issue number here in GitHub (let's not hijack this "Wavelet Unsharp-Mask and Clarity" issue), and it will only get merged after we release the long-overdue RT5.
@adamreichold Our main problem is that we doesn't manage to involve developers on fixing bugs upon feature freeze. They (and sometime "I") keep developing new feature in separate branch that evolves way faster than master. Since each devs can handle e.g. 1-2 branch with important new feature, the merge after the release of the stable version may be painful.
Wouldn't it be better at least to create a "V4.x.xx feature freeze" branch when needed for bug-fixing (backported from master) before release and let master collect all new feature as usual ?
Excuse my very bad english...I don't realy understand all it's writen above... 1) how I address the mix of images do not disturbs the pipeline (or a little)....I don't use : thumbnail, improccoordinator,...I only save and retrieve L_a_b datas in "one place" in dcrop.cc (retrieve) 2) I use this branch, because I'll use the same tools...probably at the same place 3) I say 2 images, but if there are more, no problem...the "blend" in my solution is always 2 by 2...but we can do another after... 4) this way is totally different from "HDR merge", and unprecedented in RT 5) there is still much work to do, but it seems pretty easy. For me the hardest part is done... 6) in some days after the holidays, I'll update this branch :)
@Hombre57 If the features are rather unstable, using a separate release branch is certainly better. What I was thinking of is keeping all development in feature branches and only merge stable and tested changes into the main branch so that we can release from that at any time, i.e. no more feature freeze at all. This implies that people will need to regularly rebase their feature branches, but it also means all work can move at its own pace and no single unstable feature can stop a development branch from becoming a release branch, which seems to mesh well with spare time work. In the end, it is probably at matter of preferences to a certain degree...
@Beep6581 Were would the proper place to write a guide on setting up a Windows development box using MSYS2 be? README.md
, COMPILE.txt
(seems outdated) or RawPedia or someplace else? (My guess is that we should migrate the still relevant content of COMPILE.txt
to RawPedia and add the Windows build instructions there?)
Keeping the main branch stable is generally the way we work now and its working out well so far. Remember, we tried other branching approaches in the past and they failed, and we do things the way we do them now as a result of that.
@adamreichold the most important place is RawPedia: http://rawpedia.rawtherapee.com/Windows I wrote this one, you can use it as a reference: http://rawpedia.rawtherapee.com/Linux I can help putting it up there, I just need clear and unambiguous instructions to work from and the instructions currently in COMPILE.txt are unclear and ambiguous and outdated. To avoid duplication, I would gladly replace the Windows and Linux sections in COMPILE.txt with a link to those two RawPedia articles.
I also think rawpedia is a better place for compilation instructions. With MSYS2, will it still be possible to compile for 32 bits Windows? Each time I tried to use GCC > 4.6 it was impossible to start win32 the executable. Le 19 déc. 2015 08:32, "Beep6581" notifications@github.com a écrit :
@adamreichold https://github.com/adamreichold the most important place is RawPedia: http://rawpedia.rawtherapee.com/Windows I wrote this one, you can use it as a reference: http://rawpedia.rawtherapee.com/Linux I can help putting it up there, I just need clear and unambiguous instructions to work from and the instructions currently in COMPILE.txt are unclear and ambiguous. To avoid duplication, I would gladly replace the Windows and Linux sections in COMPILE.txt with a link to those two RawPedia articles.
— Reply to this email directly or view it on GitHub https://github.com/Beep6581/RawTherapee/issues/2982#issuecomment-165981643 .
@Beep6581 As posted on the compilation issue, I started writing down the steps for Windows builds using MSYS2. Is it possible to get edit access to the RawPedia Wiki as that would make it easier to collaboratively edit those pages IMHO?
@sguyader I did just build master
and gtk3
on win32
using MSYS2 (GCC 5.2) and it seemed to work fine. (Only tried debug builds and raw development using neutral profile so far.)
Personally, I'd suggest removing COMPILE.txt
completely after moving the useful contents to the RawPedia and placing links to it in README.md
as this will also be visible on the GitHub page.
@sguyader I just tried an optimized build using MSYS2 (GCC 5.2) on win32
and it seems to work fine as well.
Only problem I still have is that the clearlooks
theme engine is not available in MSYS2 and might need to be built from source...
Thanks, this is good news, I'll try that. Le 19 déc. 2015 10:00, "adamreichold" notifications@github.com a écrit :
@sguyader https://github.com/sguyader I just tried an optimized build using MSYS2 (GCC 5.2) on win32 and it seems to work fine as well.
Only problem I still have is that the clearlooks theme engine is not available in MSYS2 and might need to be built from source...
— Reply to this email directly or view it on GitHub https://github.com/Beep6581/RawTherapee/issues/2982#issuecomment-165986062 .
@Desmis This approach is a workaround of how things should be in RT, and is acceptable by the time multiple History handling will be introduced (don't ask me when ;) ). So the workaround nature of this patch should be clearly stated. Other than that, and since your modification in the pipeline will be minimal, I have no objections.
I just push a change, in a new branch "newwavelet" The old branch "waveletsharp" can be delete
This new branch :
You can read Rawpedia (in french) "Niveaux d’ondelettes" where I described how to ! "Masque d'ondelettes pour générer des tatouages d'images (watermark)" I hope not too bugs :)
I speak in french to avoid misunderstandings :)
Je vais sommairement faire le point sur cette branche, elle a les fonctionnalités suivantes:
1) création d'un masque (qui n'est pas un Unsharp mask, mais un masque de netteté...c'est l'inverse) qui permet d'accroître l'accentuation (sharpening). Cette fonctionnalité, très différente dans son principe de "Unsharp mask" ou "RL deconvolution" ou encore - même si cette différence est moins grande - de Wavelet edge sharpness, donne de bons résultats (voire très bon selon l'avis de Paul)
2) création d'un masque flou d'ondelette pour accroître le contraste et la saturation locale (clarté).
3) intégration dans l'outil "wavelet" du processus "Retinex" : cette intégration que j'ai volontairement limitée en fonctionnalité par rapport à l'outil Retinex de base, réduit notablement certains artefacts et permet le traitement des fichiers TIF et JPG
4) ajout de la fonction "tatouage d'images" (watermark) par modification du process de traitement de RawTherappee: possibilité de traiter 2 images en "simultané" par exportation / importation de données Lab
5) possibilité, même si cette fonctionnalité n'est pas exempte de critiques (absence de traitement et retouches locales à la souris), de traitement HDR (High Dynamic Range) en combinant avec un processus semblable à "watermark" 2 images dont une sous-exposée et l'autre sur-exposée.
Pour des explications plus approfondies, voir Rawpedia "Niveaux d'ondelettes" (en français) :)
Salut Jacques, 1) the retinex tool in wavelets produces artefacts when the process is located in Final touchup.
Settings: (No problems when Merge Luma is 0).
Artefacts:
2) For the watermark your tool asks for a *.mer file to merge. How do I create such a file?
Paul, thank you
Have you read Rawpedia, to create this file.
If no :
then:
After:
I don't say, there is no artifacts, but less or differents from original Retinex
Thank you
:)
Okay Jacques, thanks. I had been reading RawPedia but apparently another section. So here's my first watermarked photo in RT.
Some remarks. -- When applying the watermark, the Threshold blend luma slider defaults to 0, which stands for "watermark invisible" according to me. A default value of 50 will be better imo. -- The vertical shift slider only has a limited effect. A watermark of 50 px high can be moved only around 10-15% down over an image of 640x480. -- The horizontal slider does not move the watermark. -- RawPedia states that the watermark may be of any size. But it must have a size that is readable on the photo to be watermarked. Very practical would be a resize slider. -- Very practical would be to group together some functions under a button called "Create watermark" (the Save *.mer part and background=black/Process current level and below) and another button called "Apply watermark" with the apply part.
Regards, Paul.
Hello Paul
OK for default slider = 50
A) For horizontal and vertical shift its depends of the size : a) watermark b) current image... B) For watermark the size in not the one of the text, but the size of the file...in which watermark is !If you change the size of the current file (ex: D800) you can move the "watermark" very much :)
C) Resize slider is very difficult...you are not with a real image, but file with Lab datas
D) I'll look for "create watermark", but in all case you must choose the number of levels...So make an intervention in Wavelet... that can not be done automatically...as this determines the desired rendering
Thank you for your testing :) and excuse my very bad english !
Salut Jacques,
b) I'll have another look c) okay, then drop that idea d) perhaps not necessary, as one starts to understand what to do in what particular order...
Apart from the watermarking, I like very much that (un)sharp mask in the wavelet section. I don't say it's the perfect tool, but it intrigues me!
I quickly tried to blend two bracketed photos (-1EV and 0EV) with the watermarking tool and that seems to work as well.
Another but related subject. I stopped writing about the wavelet tool at the time that you moved the retinex tool into wavelets, some months ago. I thought let's see how this evolves. The current version is better, because the last one was really, really complex! I still want to write some more articles about it. Nota bene. I have a wordpress site about wavelets in RT (among other subjects) and I am amazed that people keep coming to read those pages, even without active marketing. Apparently people are curious about it.
I keep thinking that the wavelet tool is an excellent thing, in the sense of imaging, in a photographic sense. It can add something to an image, hard to tell what exactly. Only problem is that is stays a complicated tool.
Bon soirée, regards. Paul.
Op 16-01-16 om 17:22 schreef Desmis:
Hello Paul
OK for default slider = 50
A) For horizontal and vertical shift its depends of the size : a) watermark b) current image... B) For watermark the size in not the one of the text, but the size of the file...in which watermark is !If you change the size of the current file (ex: D800) you can move the "watermark" very much :)
C) Resize slider is very difficult...you are not with a real image, but file with Lab datas
D) I'll look for "create watermark", but in all case you must choose the number of levels...So make an intervention in Wavelet... that can not be done automatically...as this determines the desired rendering
Thank you for your testing :) and excuse my very bad english !
— Reply to this email directly or view it on GitHub https://github.com/Beep6581/RawTherapee/issues/2982#issuecomment-172220652.
https://allesgimpofbijna.wordpress.com (nl) https://rawtherapeewavelets.wordpress.com (en)
Salut Paul Je m'exprime en français... Oui le "wavelet tools" est complexe...et je ne vois pas comment il ne pourrait pas l'être ! Je n'ai pas fait migrer "retinex" vers wavelet, c'est un plus...Il y a donc 2 outils "retinex", comme il y a plusieurs manières de retoucher la luminance. Celui dans Wavelet est volontairement plus simple, avec moins de fonctionnalités..Dans Rawpedia j'ai écrit une comparaison des avantages inconvénients de Retinex en dehors et dans Wavelet.
I tested newwavelet for half an hour:
My impression is that the "Residual image > Retinex method" options hold a lot of potential and are usable. They can lead to useful results and I would like to keep this addition.
As for Unsharp in Wavelet Settings, I think it doesn't belong there and it's not a usable tool because it hijacks the user interface with disregard to keeping functionality segregated and user-friendliness, and it breaks the rest of the wavelet tool, e.g. the Final touchup's 'After' contrast curve. I don't think it's good design to do that.
I haven't tested watermarking yet, but based on what I read my opinion will probably be the same as the one above for the Unsharp tool: it's not usable or clear to the user, it's not as simple as watermarking should be, it's not well integrated into RawTherapee, it's more like a hijack of a ship.
A general comment, the new additions need the same treatment as usual:
I understand (I do not totally understand!) is that you do not like "Wavelet" GUI.
You speak of "Final touchup's 'After' contrast curve", which is how long (at least 1 year). What's wrong ?
I am open to criticism, but it takes a minimum proposal. Say it is misplaced ... okay, but where and how to put it?
What I have tried to bring here is to combine 2 images - which is impossible in the current process! Your comment does not address this point, you have not tried, but the interface ... It's a little discouraging :)
When you say "Please RT follow Good style from --other tools." ... where are those good practices? Because inside of RT, everything you mentioned is present, and sometimes complex. For example, to restore the bug "Partialpaste" for Retinex, I had to take me 5 times to find how it works...
Of course I can change the interface to develop the "Lab" file to "watermark", it is easy. But : 1) I do not know how to update the GUI, and I'm not sure that really brings something 2) this development (Lab) can also be used to mix (merge / blend) files (eg HDR) and this will not be the same settings ... Should complicate the interface, While manual adjustments that depend on desired effects are needed?
The wavelet tool is complex, its almost a software, I am open to any constructive proposal
I just push a change for wavelet, specialy GUI:
*I open a new expander for "Retinex in wavelet" (allows TIF and JPG)
I think there is probably (??) a bug with "editorpanel;cc" (I don't use..but ?? I think it must have perhaps in some cases...)
Tomorrow I w'll update Rawpedia :)
W32 newwavelet branch build (relwithdebinfo with gdb.exe included) uploaded here https://drive.google.com/open?id=0B2q9OrgyDEfPOEZmVlBzLWlnSWc
@Desmis Until now I made basic use of wavelet. To take full advantage of it , one need to carefully read the documentation. But it is not intuitive because you explain what the app does in term of algorithm with use of very technical terms that I don't entirely understand (it is rather a reference manual) and not what is the effect on the image (i.e.what we are interested in) in the form of an user manual. Don't take that as a criticism as you made an awesome work.
What we would need now are some usecases with preset parameters providing acceptable starting point ( partial pp3) and related doc in rawpedia. I know that this is also difficult to do. But I think that this could really help beginners. A starting point could be the tutorials that can be found again in old forum. Once some people become proficient with use of fonction, a consensus about GUI (and perhaps simplification by discarding what is of no valuable use) can be found. Unfortunatly, I don't feel proficient enough in photo processing to initiate such a documentation effort.
Bonjour @gaaned92
Je comprends parfaitement tes remarques et je les prends positivement.
En effet "Wavelet" est un outil (très) complexe...Si on regarde les "ténors" du marché (Lightroom, etc.) on n'en voit pas trace. Il y a probablement plusieurs raisons:
*j’admets que j'aie peut être poussé le bouchon un peu loin, mais ce développement est source de réflexion...un point d'avancée importante serait la retouche locale, où on pourrait mettre en œuvre des algos plus performants (en limitant la zone à traiter...car c'est très consommateur en ressources et en temps de traitement)
Mais, il faut quand même être un peu positif, on a effectivement sur l'ancien forum, 2 groupes de tutoriels, par "scribble" et "Paul"..il serait bien que ces expériences migrent vers le nouveau forum :)
En attendant, je vais essayer de tenir compte de tes remarques pour la (ré)écriture (en français) de Rawpedia pour les ondelettes (wavelet) Merci pour ton évaluation :)
I have update "Rawpedia" (in french)...
@gaaned92 , j'ai essayé de tenir compte de tes remarques, pour rendre le texte moins "algorithme" et plus "utilisateur", mais pas simple. On devrait (??) pouvoir faire des liens vers les tutoriels de Paul et Scribble, à condition que ces tutoriels puissent être mis à jour et accessible en dehors de l'ancien forum!
Il y a eu un débat il y a quelques temps, pour savoir comment construire et traduire pour l'utilisateur les algorithmes de Rawtherapee. L'idée de certains (dont moi même) était de proposer un menu (que je pense faisable), où l’utilisateur choisirait son niveau de difficulté : élémentaire, avancé, expert...
Cette idée a été battue en brèche par d'autres, affirmant (et c'est totalement vrai), que quelque chose est complexe (difficile), uniquement si on ne l'a pas compris... Si on retenait cette idée, il faudrait un débat, pour savoir ; 1) qu'est-ce qui est dans quoi ? (l'architecture actuelle de RT présente certaines singularités liées à l'histoire, mais qu'on pourrait remettre en cause) 2) qu'est-ce qui est essentiel - secondaire - complexe ?
Jacques
Salut @Desmis,
Some remarks about the newwavelets branch.
I forgot.
I juste push a change; 1) improve GUI : more expander, etc. 2) fixed some bugs (I hope all ??) 3) improve Retinex in wavelet : I add "gaussian mask" to threat artifacts, etc. 4) improve Merge files : HDR2...I think it is better a) first threat overexposed image (neutral) ==> saveL_a_b data", b) open current image underexposed (neutral), c) merge :)
I fixed a bug, in Save L_a_b* datas for hdr
Hello Jacques, Two problems for the moment: -- when I activate Sharp mask and clarity, the corresponding settings in Wavelet settings (on top of the filter) change accordingly. When I turn off the Edge Sharpness and Clarity section, the wavelet settings are not set back to their original value, resulting in the residual image or level 3 and below (=near black) instead of the photo itself. -- Activate Sharp mask on Origin or Residual, then activate Retinix in Wavelet with default values and I get a scrambled blue air:
Hello Paul Thank you for testing :) I push a change for the first point (reset to riginal value)
For the second, I think this is part of incompatibilities, when adding effects...and I think (to verify) no real solution. If you choose for Retinex : process in Residual, I think probably it's good... You can reduce artifacts (Retinex in Final touchup), wiih some settings :
Thank you again :)
Hello Jacques,
Yes, one has to choose in Retinex in Wavelet 'Process in Residual' to avoid those image distorsions. Is there a good reason to choose Process in Final Touchup? Perhaps include a warning message for possible image deterioration?
What I do not understabnd is: why is there an option in the wavelet panel to sharpen on the file before wavelet? If I choose this, all my wavelet edits (like chroma, etc.) are not visible anymore, giving me the impression that the wavelets got irresponsive. Is there a logical or practical reason to offer this option? If not, it can better be taken away I think.
I push a change, it's take into account your comment (true) on "origin / wavelet" I suppress many bugs...probably there is still some left :)
I update Rawpedia in french
Now;
:)
@Desmis could you show a screenshot of the HDR feature in action, before and after?
What do you want ? I know how (badly) with Photoshop with much work! but what do you want as arguments? What should I show ?
If you read doc (in french) it is easy...as watermark.
I know it is different, from Gimp (watermark) or HDRmerge (hdr), but it is a different logic imposed by RT pipelines and my twisted mind. When you understand the reasoning, it is very simple. (for me simpler than HDRmerge :)
I'm curious to see what it can do, and you know how it works better than anyone.
I just push a new branch "waveletsharp"
In wavelet panel, I add in:
I have update "Rawpedia wavelet" in french http://rawpedia.rawtherapee.com/Wavelet_levels/fr