This seems like a really bad bug. I’ll make a patch that stop the key-binds interfering when lesson editor is open on the reader page. Thanks again for the report.
Would it be possible to add a search and replace feature in the Rooster Lesson Editor?
It would be very useful to edit spelling errors in transcribed lessons.
Thanks
Alan
I just tried to see if Ctrl+H works but nope…! Its the history shortcut on my browser. I’ll see if there is a native option, otherwise will come up with something. Thanks for the suggestion
And does it work on Android?
No android support right now. More browsers/devices coming when the software is finished.
This is a still a big L though…!
Patch within the hour
Hi Rooster,
I just tried the lesson editor and while I normally don’t do much editing, it’s very useful for removing ‘paragraphs’ from imported subtitles and whisper transcripts. (No idea why those are automatically added by LingQ)
But unfortunately the process of ‘sentencing everything’ takes a long time. A typical Whisper transcript has only a couple of words per line, but lots of paragraphs (1000+). Not sure if this makes sense, but would it be possible to only make one request to the server that updates all sentences in a batch?
I’m on version 1.21 from the Chrome web store, using MS Edge.
Also, does the translation toggle use the new ChatGPT translator or Google translate?
Thanks once again Rooster. An invaluable new feature.
I have used it a few times already and it works perfectly.
Being able to edit lessons on the fly (you just need to refresh after you have saved and closed the editor) is a leap forward for LingQ.
Hi Bamboozled
Good to know.
No plans to change that to a flood request on release addon.
If you wanted to mess with it you could adjust that 500ms delay
or
The code on how it works
paragraphs.forEach((paragraph) => {
paragraph.sentences.forEach((sentence, idx) => {
const sentenceContainer = document.createElement('div');
sentenceContainer.style.display = 'flex';
const sentenceDiv = document.createElement('div');
sentenceDiv.textContent = sentence.cleanText;
sentenceDiv.dataset.index = sentence.index;
sentenceContainer.appendChild(sentenceDiv);
if (!isFirstSentence) {
const isBroken = idx === 0; // Determine if the sentence is broken
sentence.isBroken = isBroken; // Set the value on the sentence object
const brokenButton = document.createElement('button');
brokenButton.style.webkitUserSelect = 'none'; // for Chrome and Safari
brokenButton.style.MozUserSelect = 'none'; // for Firefox
brokenButton.style.msUserSelect = 'none'; // for Internet Explorer
brokenButton.style.userSelect = 'none'; // standard
brokenButton.textContent = isBroken ? 'Paragraph' : 'Sentence'; // Use the local variable
brokenButton.style.marginLeft = '20px'; // Adjust the value as desired
brokenButton.addEventListener('click', async () => {
sentence.isBroken = !sentence.isBroken;
brokenButton.textContent = sentence.isBroken ? 'Sentence' : 'Paragraph';
let index;
let action;
let url;
if (!sentence.isBroken) { // If currently not broken, merge it
index = paragraph.index - 1; // Use paragraph index for merging
url = `https://www.lingq.com/api/v3/${language}/lessons/${lessonId}/paragraphs/`;
action = "merge";
sentence.isBroken = true; // Update the state
} else { // If currently merged, break it
index = sentence.index - 1; // Adjust the index
url = `https://www.lingq.com/api/v3/${language}/lessons/${lessonId}/sentences/`;
action = "break";
sentence.isBroken = false; // Update the state
}
// Data to send in the POST request
const data = {
index,
action,
};
// Perform the POST request
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
// Check for successful response
if (response.ok) {
console.log('Success:', action, 'for index', index);
brokenButton.textContent = sentence.isBroken ? 'Sentence' : 'Paragraph';
if (headerButton.dataset.active === 'true') {
headerButton.dataset.active = 'false';
headerButton.textContent = 'Header';
}
// Initial creation of GUI box when the page loads
document.getElementById('saveButton').click();
} else {
console.error('Error:', response);
}
});
sentenceContainer.appendChild(brokenButton);
On the Video Tools addons you can import and overlay with GPT translation of whatever language you want. I’ll add that eventually to MasterLingQ
Great feedback @alanelder Am glad the tools are helping and getting some use.
Hi @roosterburton. This tool is great. I am getting [NaN, NaN] for my timestamps though. Any idea how to correct this problem? The language is Hebrew, if that is the cause. Thanks!
NaN usually means the import type was a text file/pdf/ebook rather than a subtitle file.
Aeneas (auto timestamp that LingQ uses) doesn’t support Hebrew so pressing auto stamp button will just return NaN or an error.
The Lesson Editor has been largely forgotten about. I noticed that it doesn’t even support RTL language display right now. This tool could really use some love, so I’ll take a look at it over the next few days.
Cool, hope to see a new version soon.
I did a mock up of some ideas for lesson editor UI. the -+ button should just make adjustment to time in 0.2 secs. I put timestamp on the left so they are closer to the text in this way they are easy to see which timestamp belongs to which sentence.
I think if the translation can optionally be below each text sentence (in a slightly different tone) that will be good too, because sometime they don’t line up in the current UI. It is also hard for eye to follow (too far away) which translation belong to which text when the sentence text is short.

In the Sentence View Mode, is it also possible to add a sentence editor to the sidebar? like below.

Updated screenshot to match the app a bit more. You can add anything else as needed. like the “copy previous” and etc.
Both ideas look really good and thoughtful for the end user. I’ll add them to the new design. I ended up just rewriting the whole base for this script today and it already feels 10x better. With enough coffee it should be ready by tomorrow.
Wow that would be really fast, take your time, it is not urgent, do get sleep.
For the sidebar, if possible, it can actually just follow the UI of edit sentence in the android app. like below.
Largely completed now. Time for that rest ZZZZZ.
If all goes to plan should be released later today. Still want to do the sentence mode editing and a few extra settings
Probably a good time to announce that some of the other MasterLingQ tools have been or are currently being redeveloped. A complete revision of the Playlist Import tool has been underway for a few weeks and is nearing completion and some of the other tools like course upload and the hotkeys extension are in the firing line.
This is looking good, it looks done to me… Can’t wait to test it out soon.
Not sure if it is possible. I was thinking another option could be creating some customizable keyboard shortcuts under Sentence Mode, shortcuts to make quick audio timestamp tweaks would be a timesaver.
Most of the time the auto-timestamp works well but very often there are sentence that cut off too early.
shortcut example
alt+4 to add 0.2s to end
alt+3 to minus 0.2s to the end
alt+2 to add 0.2s to start
alt+1 to minus 0.2s to start
Maybe after making the change the audio auto plays 1 sec at the edit point (rather than playing whole audio) so we can quickly confirm it is correct
Currently I use WASD (customized using your tool) when going through a lesson in sentence mode. These shortcuts have been a huge timesaver.
A - previous sentence
D - next sentence
W - play audio
S - show translation
Another thing I thought might be useful for some user is merging sentences. So currently LingQ will split sentences based on just certain punctuation.
example (Eat ! groaned Grover.)

will get split into 2 sentences
- – Manger ! (-Eat !)
- a gémi Grover. (groaned Grover.)
It is not a critical feature, it just reads/looks better if it stays as 1 sentence. A button to merge these 2 into 1 sentence will be useful I think for some users.
Because of the way LingQ splits sentence you also end up with sentence like « Manger ! » split into 2 sentences
- « manger !
- »
I notice you have Sentence merge into paragraph feature, I think some kind of sentence-sentence merge button/feature in your new lesson editor can help solve that lonely sentence with only » . But I think LingQ is looking to solve this… not sure when they will be done though.
the change here is the Merge/break buttons now only contribute to LingQs formatting standard for the reader. Paragraphs cause a line break and sentences are children of the paragraph. The new Combine option allows children sentences to be merged into the sentence or paragraph above it. Combining the Translation lines and the timestamps.


Good idea. Will do this when the Hotkeys addon gets updated.
Awesome that works, You are fast with the changes. Thanks !
MasterLingQ Patch 1.596 is available for download now.
The new editor is available via the Editor button and as a button on the editor page. The old lesson editor is still available on the editor page too in-case of any missing or broken functionality.
Thanks this looks very good.
I tried the timestamp adjustments and it updates the numbers but it doesn’t seem to update the audio in the editor instantly. The audio only updates when I press the reload translation button on the right. I tried in both Firefox and chrome.
The Toggle inline edit mode has a autohide up and down button to adjust the timestamp. I think I like that better it is more compact and it hides away, makes the whole UI look more clean and neat.
That combine feature works great! I find that I am using it more than I thought I would.
I think when mouse-over on the combine, merge and delete button the whole sentence that will be affected by the operation should be subtly highlighted in someway (underline or font color change and etc).
The buttons could also have some indication to show which direction the change will occur. Or some kind of tooltip on mouse over. It will be less scary for new users.
![]()












