Rewind time
Key RequiredUniversal

Rewind time

Universal ScriptOPEN_HUBOPEN_HUB 15.1K views 2.3K executesUpdated Sep 13, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•576 lines (20795 chars)
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local TextService = game:GetService("TextService")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")

-- Таблицы переводов
local translations = {
    Russian = {
        title = "Выбор языка",
        r15 = "R15",
        r6 = "R6",
        start = "Начать запись",
        stop = "Остановить",
        play = "Воспроизвести",
        play_reverse = "Воспр. назад",
        speed = "Скорость: ",
        recording = "Запись: ",
        select_avatar = "Выберите тип аватара",
        hide = "Скрыть",
        show = "Показать",
        enter_speed = "Введите скорость",
        confirm = "OK",
        show_gui = "Вернуть GUI",
        scroll = "Листайте ↓"
    },
    English = {
        title = "Language Selection",
        r15 = "R15",
        r6 = "R6",
        start = "Start Recording",
        stop = "Stop",
        play = "Play",
        play_reverse = "Play Reverse",
        speed = "Speed: ",
        recording = "Recording: ",
        select_avatar = "Select Avatar Type",
        hide = "Hide",
        show = "Show",
        enter_speed = "Enter speed",
        confirm = "OK",
        show_gui = "Show GUI",
        scroll = "Scroll ↓"
    },
    Thai = {
        title = "เลือกภาษา",
        r15 = "R15",
        r6 = "R6",
        start = "เริ่มบันทึก",
        stop = "หยุด",
        play = "เล่น",
        play_reverse = "เล่นย้อนกลับ",
        speed = "ความเร็ว: ",
        recording = "กำลังบันทึก: ",
        select_avatar = "เลือกประเภทอวาตาร์",
        hide = "ซ่อน",
        show = "แสดง",
        enter_speed = "ใส่ความเร็ว",
        confirm = "ตกลง",
        show_gui = "แสดง GUI",
        scroll = "เลื่อน ↓"
    },
    Arabic = {
        title = "اختيار اللغة",
        r15 = "R15",
        r6 = "R6",
        start = "بدء التسجيل",
        stop = "إيقاف",
        play = "تشغيل",
        play_reverse = "تشغيل عكسي",
        speed = "السرعة: ",
        recording = "التسجيل: ",
        select_avatar = "اختر نوع الصورة الرمزية",
        hide = "إخفاء",
        show = "إظهار",
        enter_speed = "أدخل السرعة",
        confirm = "موافق",
        show_gui = "إظهار GUI",
        scroll = "انتقل لأسفل ↓"
    },
    French = {
        title = "Sélection de la langue",
        r15 = "R15",
        r6 = "R6",
        start = "Commencer l'enregistrement",
        stop = "Arrêter",
        play = "Lire",
        play_reverse = "Lire à l'envers",
        speed = "Vitesse: ",
        recording = "Enregistrement: ",
        select_avatar = "Sélectionner le type d'avatar",
        hide = "Masquer",
        show = "Afficher",
        enter_speed = "Entrez la vitesse",
        confirm = "OK",
        show_gui = "Afficher GUI",
        scroll = "Défiler ↓"
    },
    Spanish = {
        title = "Selección de idioma",
        r15 = "R15",
        r6 = "R6",
        start = "Comenzar grabación",
        stop = "Detener",
        play = "Reproducir",
        play_reverse = "Reproducir reverso",
        speed = "Velocidad: ",
        recording = "Grabando: ",
        select_avatar = "Seleccionar tipo de avatar",
        hide = "Ocultar",
        show = "Mostrar",
        enter_speed = "Ingrese velocidad",
        confirm = "OK",
        show_gui = "Mostrar GUI",
        scroll = "Desplazar ↓"
    },
    German = {
        title = "Sprachauswahl",
        r15 = "R15",
        r6 = "R6",
        start = "Aufnahme starten",
        stop = "Stopp",
        play = "Abspielen",
        play_reverse = "Rückwärts abspielen",
        speed = "Geschwindigkeit: ",
        recording = "Aufnahme: ",
        select_avatar = "Avatar-Typ auswählen",
        hide = "Ausblenden",
        show = "Einblenden",
        enter_speed = "Geschwindigkeit eingeben",
        confirm = "OK",
        show_gui = "GUI anzeigen",
        scroll = "Scrollen ↓"
    }
}

-- Переменные
local currentLanguage = "English"
local selectedAvatar = "R15"
local isRecording = false
local isPlaying = false
local isReversePlaying = false
local recordingStartTime = 0
local recordedActions = {}
local recordingConnection = nil
local playConnection = nil
local currentSpeed = 1.0

-- Создание интерфейса
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "RecorderGUI"
screenGui.Parent = player.PlayerGui

-- Функция для форматирования времени
local function formatTime(seconds)
    local minutes = math.floor(seconds / 60)
    local secs = math.floor(seconds % 60)
    return string.format("%02d:%02d", minutes, secs)
end

-- Функция создания кнопки
local function createButton(name, text, position, size)
    local button = Instance.new("TextButton")
    button.Name = name
    button.Text = text
    button.Size = UDim2.new(0, size.X, 0, size.Y)
    button.Position = UDim2.new(0, position.X, 0, position.Y)
    button.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    button.TextColor3 = Color3.fromRGB(255, 255, 255)
    button.Font = Enum.Font.SourceSans
    button.TextSize = 14
    button.BorderSizePixel = 0
    button.ZIndex = 10
    button.AutoButtonColor = true
    return button
end

-- Функция создания текстовой метки
local function createLabel(name, text, position)
    local label = Instance.new("TextLabel")
    label.Name = name
    label.Text = text
    label.Size = UDim2.new(0, 200, 0, 30)
    label.Position = UDim2.new(0, position.X, 0, position.Y)
    label.BackgroundTransparency = 1
    label.TextColor3 = Color3.fromRGB(255, 255, 255)
    label.Font = Enum.Font.SourceSans
    label.TextSize = 16
    label.ZIndex = 10
    return label
end

-- Функция создания текстового поля
local function createTextBox(name, text, position, size)
    local textBox = Instance.new("TextBox")
    textBox.Name = name
    textBox.Text = text
    textBox.Size = UDim2.new(0, size.X, 0, size.Y)
    textBox.Position = UDim2.new(0, position.X, 0, position.Y)
    textBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    textBox.TextColor3 = Color3.fromRGB(255, 255, 255)
    textBox.Font = Enum.Font.SourceSans
    textBox.TextSize = 14
    textBox.BorderSizePixel = 0
    textBox.ZIndex = 10
    return textBox
end

-- Кнопка возврата GUI (изначально скрыта)
local showGUIButton = createButton("ShowGUIButton", translations[currentLanguage].show_gui, Vector2.new(10, 10), Vector2.new(120, 40))
showGUIButton.BackgroundColor3 = Color3.fromRGB(30, 144, 255)
showGUIButton.Visible = false
showGUIButton.ZIndex = 100
showGUIButton.Parent = screenGui

-- Создание языкового меню с прокруткой
local languageFrame = Instance.new("Frame")
languageFrame.Size = UDim2.new(0, 350, 0, 400)
languageFrame.Position = UDim2.new(0.5, -175, 0.5, -200)
languageFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
languageFrame.BorderSizePixel = 0
languageFrame.ZIndex = 5
languageFrame.Parent = screenGui

-- Контейнер для прокрутки
local scrollingFrame = Instance.new("ScrollingFrame")
scrollingFrame.Size = UDim2.new(1, -20, 1, -80)
scrollingFrame.Position = UDim2.new(0, 10, 0, 60)
scrollingFrame.BackgroundTransparency = 1
scrollingFrame.BorderSizePixel = 0
scrollingFrame.ScrollBarThickness = 8
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollingFrame.ZIndex = 6
scrollingFrame.Parent = languageFrame

local titleLabel = createLabel("Title", "Select Language", Vector2.new(75, 15))
titleLabel.Size = UDim2.new(0, 200, 0, 40)
titleLabel.TextSize = 20
titleLabel.Parent = languageFrame

local scrollHint = createLabel("ScrollHint", translations[currentLanguage].scroll, Vector2.new(75, 365))
scrollHint.Size = UDim2.new(0, 200, 0, 30)
scrollHint.TextSize = 14
scrollHint.TextColor3 = Color3.fromRGB(200, 200, 200)
scrollHint.Parent = languageFrame

local languages = {"Russian", "English", "Thai", "Arabic", "French", "Spanish", "German", "Chinese", "Japanese", "Korean", "Portuguese", "Italian", "Dutch", "Turkish", "Hindi"}
local yOffset = 10

for _, lang in pairs(languages) do
    local button = createButton(lang, lang, Vector2.new(25, yOffset), Vector2.new(280, 50))
    button.TextSize = 16
    button.Parent = scrollingFrame
    yOffset += 60
end

-- Обновляем размер canvas для прокрутки
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, #languages * 60)

-- Обработчики для кнопок языка
for _, button in ipairs(scrollingFrame:GetChildren()) do
    if button:IsA("TextButton") then
        button.MouseButton1Click:Connect(function()
            currentLanguage = button.Name
            titleLabel.Text = translations[currentLanguage].title
            scrollHint.Text = translations[currentLanguage].scroll
            languageFrame.Visible = false
            showAvatarSelection()
        end)
    end
end

-- Функция показа выбора аватара
function showAvatarSelection()
    local avatarFrame = Instance.new("Frame")
    avatarFrame.Size = UDim2.new(0, 350, 0, 250)
    avatarFrame.Position = UDim2.new(0.5, -175, 0.5, -125)
    avatarFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    avatarFrame.BorderSizePixel = 0
    avatarFrame.ZIndex = 5
    avatarFrame.Parent = screenGui
    
    local title = createLabel("AvatarTitle", translations[currentLanguage].select_avatar, Vector2.new(75, 20))
    title.Size = UDim2.new(0, 200, 0, 40)
    title.TextSize = 18
    title.Parent = avatarFrame
    
    local r15Button = createButton("R15Button", translations[currentLanguage].r15, Vector2.new(75, 70), Vector2.new(200, 60))
    r15Button.TextSize = 16
    r15Button.Parent = avatarFrame
    
    local r6Button = createButton("R6Button", translations[currentLanguage].r6, Vector2.new(75, 150), Vector2.new(200, 60))
    r6Button.TextSize = 16
    r6Button.Parent = avatarFrame
    
    r15Button.MouseButton1Click:Connect(function()
        selectedAvatar = "R15"
        avatarFrame:Destroy()
        createMainUI()
    end)
    
    r6Button.MouseButton1Click:Connect(function()
        selectedAvatar = "R6"
        avatarFrame:Destroy()
        createMainUI()
    end)
end

-- Функция остановки записи
local function stopRecording()
    isRecording = false
    if recordingConnection then
        recordingConnection:Disconnect()
        recordingConnection = nil
    end
end

-- Функция остановки воспроизведения
local function stopPlayback()
    isPlaying = false
    isReversePlaying = false
    if playConnection then
        playConnection:Disconnect()
        playConnection = nil
    end
end

-- Создание основного интерфейса
function createMainUI()
    local mainFrame = Instance.new("Frame")
    mainFrame.Name = "MainFrame"
    mainFrame.Size = UDim2.new(1, 0, 0, 70)
    mainFrame.Position = UDim2.new(0, 0, 1, -70)
    mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    mainFrame.BorderSizePixel = 0
    mainFrame.ZIndex = 5
    mainFrame.Parent = screenGui
    
    -- Кнопка записи
    local recordButton = createButton("RecordButton", translations[currentLanguage].start, Vector2.new(20, 15), Vector2.new(100, 40))
    recordButton.TextSize = 16
    recordButton.Parent = mainFrame
    
    -- Кнопка воспроизведения вперед
    local playButton = createButton("PlayButton", translations[currentLanguage].play, Vector2.new(130, 15), Vector2.new(100, 40))
    playButton.TextSize = 16
    playButton.Parent = mainFrame
    
    -- Кнопка воспроизведения назад
    local reversePlayButton = createButton("ReversePlayButton", translations[currentLanguage].play_reverse, Vector2.new(240, 15), Vector2.new(100, 40))
    reversePlayButton.TextSize = 14
    reversePlayButton.Parent = mainFrame
    
    -- Кнопка скрытия GUI
    local hideButton = createButton("HideButton", translations[currentLanguage].hide, Vector2.new(350, 15), Vector2.new(100, 40))
    hideButton.TextSize = 16
    hideButton.Parent = mainFrame
    
    -- Кнопка изменения скорости
    local speedButton = createButton("SpeedButton", "⚙️ Speed", Vector2.new(460, 15), Vector2.new(100, 40))
    speedButton.TextSize = 16
    speedButton.Parent = mainFrame
    
    -- Таймер записи
    local timerLabel = createLabel("TimerLabel", translations[currentLanguage].recording .. "00:00/06:00", Vector2.new(20, 60))
    timerLabel.Size = UDim2.new(0, 200, 0, 20)
    timerLabel.TextSize = 14
    timerLabel.Parent = mainFrame
    
    -- Метка скорости
    local speedLabel = createLabel("SpeedLabel", translations[currentLanguage].speed .. "1.0x", Vector2.new(230, 60))
    speedLabel.Size = UDim2.new(0, 120, 0, 20)
    speedLabel.TextSize = 14
    speedLabel.Parent = mainFrame
    
    -- Окно ввода скорости
    local speedInputFrame = Instance.new("Frame")
    speedInputFrame.Size = UDim2.new(0, 250, 0, 120)
    speedInputFrame.Position = UDim2.new(0.5, -125, 0.5, -60)
    speedInputFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    speedInputFrame.BorderSizePixel = 0
    speedInputFrame.ZIndex = 20
    speedInputFrame.Visible = false
    speedInputFrame.Parent = screenGui
    
    local speedInputLabel = createLabel("SpeedInputLabel", translations[currentLanguage].enter_speed, Vector2.new(25, 10))
    speedInputLabel.Size = UDim2.new(0, 200, 0, 30)
    speedInputLabel.TextSize = 16
    speedInputLabel.Parent = speedInputFrame
    
    local speedTextBox = createTextBox("SpeedTextBox", "1.0", Vector2.new(25, 50), Vector2.new(200, 30))
    speedTextBox.Parent = speedInputFrame
    
    local confirmButton = createButton("ConfirmButton", translations[currentLanguage].confirm, Vector2.new(25, 90), Vector2.new(200, 40))
    confirmButton.TextSize = 16
    confirmButton.Parent = speedInputFrame
    
    -- Функция обновления скорости
    local function updateSpeed(speed)
        currentSpeed = math.clamp(tonumber(speed) or 1.0, 0.1, 10.0)
        speedLabel.Text = translations[currentLanguage].speed .. string.format("%.1fx", currentSpeed)
        speedInputFrame.Visible = false
    end
    
    -- Обработчики событий для окна скорости
    speedButton.MouseButton1Click:Connect(function()
        speedInputFrame.Visible = not speedInputFrame.Visible
        if speedInputFrame.Visible then
            speedTextBox.Text = tostring(currentSpeed)
        end
    end)
    
    confirmButton.MouseButton1Click:Connect(function()
        updateSpeed(speedTextBox.Text)
    end)
    
    speedTextBox.FocusLost:Connect(function(enterPressed)
        if enterPressed then
            updateSpeed(speedTextBox.Text)
        end
    end)
    
    -- Обработчик скрытия GUI
    local isGUIVisible = true
    hideButton.MouseButton1Click:Connect(function()
        isGUIVisible = not isGUIVisible
        mainFrame.Visible = isGUIVisible
        hideButton.Text = isGUIVisible and translations[currentLanguage].hide or translations[currentLanguage].show
        showGUIButton.Visible = not isGUIVisible
        showGUIButton.Text = translations[currentLanguage].show_gui
    end)
    
    -- Обработчик кнопки возврата GUI
    showGUIButton.MouseButton1Click:Connect(function()
        mainFrame.Visible = true
        showGUIButton.Visible = false
        hideButton.Text = translations[currentLanguage].hide
        isGUIVisible = true
    end)
    
    -- Функции записи
    recordButton.MouseButton1Click:Connect(function()
        if not isRecording then
            -- Начать запись
            isRecording = true
            recordedActions = {}
            recordingStartTime = tick()
            recordButton.Text = translations[currentLanguage].stop
            playButton.Visible = false
            reversePlayButton.Visible = false
            
            -- Запись движений
            recordingConnection = RunService.Heartbeat:Connect(function()
                if isRecording then
                    local currentTime = tick() - recordingStartTime
                    if currentTime >= 360 then -- 6 минут
                        stopRecording()
                        recordButton.Text = translations[currentLanguage].start
                        playButton.Visible = true
                        reversePlayButton.Visible = true
                        return
                    end
                    
                    -- Запись позиции и вращения
                    local action = {
                        time = currentTime,
                        position = character:GetPivot().Position,
                        rotation = character:GetPivot().Rotation
                    }
                    
                    table.insert(recordedActions, action)
                    timerLabel.Text = translations[currentLanguage].recording .. formatTime(currentTime) .. "/06:00"
                end
            end)
        else
            -- Остановить запись
            stopRecording()
            recordButton.Text = translations[currentLanguage].start
            playButton.Visible = true
            reversePlayButton.Visible = true
        end
    end)
    
    -- Функция воспроизведения вперед
    playButton.MouseButton1Click:Connect(function()
        if isPlaying or isReversePlaying then
            -- Остановить воспроизведение
            stopPlayback()
            playButton.Text = translations[currentLanguage].play
            reversePlayButton.Text = translations[currentLanguage].play_reverse
            recordButton.Visible = true
        elseif not isPlaying and #recordedActions > 0 then
            -- Начать воспроизведение вперед
            isPlaying = true
            recordButton.Visible = false
            playButton.Text = "⏹️"
            
            local startTime = tick()
            local currentIndex = 1
            
            playConnection = RunService.Heartbeat:Connect(function()
                if isPlaying then
                    local elapsed = (tick() - startTime) * currentSpeed
                    
                    while currentIndex <= #recordedActions and recordedActions[currentIndex].time <= elapsed do
                        local action = recordedActions[currentIndex]
                        character:PivotTo(CFrame.new(action.position) * action.rotation)
                        currentIndex += 1
                    end
                    
                    if currentIndex > #recordedActions then
                        stopPlayback()
                        playButton.Text = translations[currentLanguage].play
                        recordButton.Visible = true
                    end
                else
                    stopPlayback()
                end
            end)
        end
    end)
    
    -- Функция воспроизведения назад (обратная перемотка)
    reversePlayButton.MouseButton1Click:Connect(function()
        if isPlaying or isReversePlaying then
            -- Остановить воспроизведение
            stopPlayback()
            playButton.Text = translations[currentLanguage].play
            reversePlayButton.Text = translations[currentLanguage].play_reverse
            recordButton.Visible = true
        elseif not isReversePlaying and #recordedActions > 0 then
            -- Начать воспроизведение назад
            isReversePlaying = true
            recordButton.Visible = false
            reversePlayButton.Text = "⏹️"
            
            local startTime = tick()
            local currentIndex = #recordedActions
            local totalDuration = recordedActions[#recordedActions].time
            
            playConnection = RunService.Heartbeat:Connect(function()
                if isReversePlaying then
                    local elapsed = (tick() - startTime) * currentSpeed
                    local reverseTime = math.max(0, totalDuration - elapsed)
                    
                    -- Находим соответствующий кадр для обратного воспроизведения
                    local targetIndex = 1
                    for i = #recordedActions, 1, -1 do
                        if recordedActions[i].time <= reverseTime then
                            targetIndex = i
                            break
                        end
                    end
                    
                    -- Применяем позицию и вращение
                    if targetIndex >= 1 and targetIndex <= #recordedActions then
                        local action = recordedActions[targetIndex]
                        character:PivotTo(CFrame.new(action.position) * action.rotation)
                    end
                    
                    if elapsed >= totalDuration then
                        stopPlayback()
                        reversePlayButton.Text = translations[currentLanguage].play_reverse
                        recordButton.Visible = true
                    end
                else
                    stopPlayback()
                end
            end)
        end
    end)
end

Features & Information

-- 🌟 ULTRA-REAL MOVEMENT RECORDING -- Record every move of your character with cinematic precision! local movement recording function() -- Record position and rotation in real time -- Smooth recording without frame drops -- Practical guidance for completing -- ⏯️ SMART PLAYBACK -- Play the recording in both directions - just like in a movie! local recording playback function (direction) -- Forward: Natural playback of movements -- Backward: Time rewind effect -- Only for creating cool memories. -- 🎮 AUTOMATIC OPTIMIZATION -- Automatically adjusts to any avatar! automatic optimization of the local function (avatarType) -- R15: Large hanging stand -- R6: Individual capacity with classics -- Full avatar type detection. -- ⚡ ADJUSTABLE SPEED -- From slow motion to fast playback! local speed adjustment function(speedValue) -- From 0.1x: Graphic files -- Up to 10x: Higher rates -- Total speed change due to jerks ends -- 🌍 MULTILINGUAL INTERFACE -- Full support for 15 languages for a global audience! local function multiLanguageSupport() -- Russian, English, 中文, Spanish, French, العربية -- and 9 more popular languages -- Automatic language detection at the end -- 📱 INTUITIVE DESIGN -- Easy control even for beginners! local function userFriendlyUI() -- Large buttons for mobile devices -- Visual hints and indicators -- Comparative analysis of results -- ⏰ LONG-LASTING RECORDING -- Record up to 6 minutes of continuous action! local advanced recording function() -- Enough for the most complex scenes -- Optimized memory usage -- No lags or freezes end -- 🎬 CINEMATIC EFFECTS -- Create online videos right in Roblox! local cinematicEffects function() -- Reverse time effect -- Smooth transitions between movements -- End
#Roblox script#Roblox script no key#Script no key#no key#ScriptBlox

Community Comments (5)

OPEN_HUBOPEN_HUBSep 13, 2025

Localized script, international, maximum recording time of 6 minutes, 4 GB of RAM recommended

ScriptTrolScriptTrolSep 13, 2025

maybe, you can ResetOnS* is false?

Replying to @ScriptTrol
OPEN_HUBOPEN_HUBSep 13, 2025

@ScriptTrol There is no delete script button

Replying to @OPEN_HUB
ScriptTrolScriptTrolSep 13, 2025

@TTMYSCRIPTS You may have misunderstood. When you die, the gui will disappear.

Replying to @ScriptTrol
OPEN_HUBOPEN_HUBSep 13, 2025

@ScriptTrolI did this because there is no delete script button.

More Scripts for Universal Scripts