AI creator products
for builders
Prompt Architect, Studio skill & schema packs, Citadel labs, and Workshop assets — peers under Meraby Labs. Open a product to fill local templates, export packs you run yourself, or explore the in-browser lab.
Roblox Luau templates are one product among peers — not the whole studio.
Fills a preset or a local template. Does not call Gemini, Luau, or any model API.
| 1 | --!strict |
| 2 | -- Services |
| 3 | local Players = game:GetService("Players") |
| 4 | local RunService = game:GetService("RunService") |
| 5 | local UserInputService = game:GetService("UserInputService") |
| 6 | |
| 7 | local LocalPlayer = Players.LocalPlayer |
| 8 | local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() |
| 9 | local Humanoid = Character:WaitForChild("Humanoid") :: Humanoid |
| 10 | local RootPart = Character:WaitForChild("HumanoidRootPart") :: BasePart |
| 11 | |
| 12 | -- Configuration Parameters |
| 13 | local CLIMB_SPEED: number = 14.0 |
| 14 | local RAYCAST_DISTANCE: number = 3.5 |
| 15 | local STAMINA_DRAIN_PER_SEC: number = 18.0 |
| 16 | local MAX_STAMINA: number = 100.0 |
| 17 | |
| 18 | -- State |
| 19 | local currentStamina: number = MAX_STAMINA |
| 20 | local isClimbing: boolean = false |
| 21 | local climbVelocity: LinearVelocity? = nil |
| 22 | |
| 23 | local raycastParams = RaycastParams.new() |
| 24 | raycastParams.FilterDescendantsInstances = {Character} |
| 25 | raycastParams.FilterType = RaycastFilterType.Exclude |
| 26 | |
| 27 | local function createClimbAttachment(): (Attachment, LinearVelocity) |
| 28 | local attachment = Instance.new("Attachment") |
| 29 | attachment.Name = "ClimbAttachment" |
| 30 | attachment.Parent = RootPart |
| 31 | |
| 32 | local velocity = Instance.new("LinearVelocity") |
| 33 | velocity.Name = "ClimbLinearVelocity" |
| 34 | velocity.MaxForce = math.huge |
| 35 | velocity.VectorVelocity = Vector3.zero |
| 36 | velocity.Attachment0 = attachment |
| 37 | velocity.Parent = RootPart |
| 38 | |
| 39 | return attachment, velocity |
| 40 | end |
| 41 | |
| 42 | local function checkWallRaycast(): RaycastResult? |
| 43 | local lookVector = RootPart.CFrame.LookVector |
| 44 | local origin = RootPart.Position |
| 45 | local direction = lookVector * RAYCAST_DISTANCE |
| 46 | return workspace:Raycast(origin, direction, raycastParams) |
| 47 | end |
| 48 | |
| 49 | local function startClimb() |
| 50 | if isClimbing or currentStamina <= 5 then return end |
| 51 | isClimbing = true |
| 52 | Humanoid.AutoRotate = false |
| 53 | |
| 54 | local _, velocity = createClimbAttachment() |
| 55 | climbVelocity = velocity |
| 56 | end |
| 57 | |
| 58 | local function stopClimb() |
| 59 | if not isClimbing then return end |
| 60 | isClimbing = false |
| 61 | Humanoid.AutoRotate = true |
| 62 | |
| 63 | if climbVelocity then |
| 64 | climbVelocity.Parent:Destroy() |
| 65 | climbVelocity = nil |
| 66 | end |
| 67 | end |
| 68 | |
| 69 | RunService.RenderStepped:Connect(function(deltaTime: number) |
| 70 | local wallHit = checkWallRaycast() |
| 71 | local isHoldingW = UserInputService:IsKeyDown(Enum.KeyCode.W) |
| 72 | |
| 73 | if wallHit and isHoldingW and currentStamina > 0 then |
| 74 | if not isClimbing then |
| 75 | startClimb() |
| 76 | end |
| 77 | |
| 78 | currentStamina = math.clamp(currentStamina - (STAMINA_DRAIN_PER_SEC * deltaTime), 0, MAX_STAMINA) |
| 79 | |
| 80 | if climbVelocity then |
| 81 | local climbDirection = Vector3.new(0, CLIMB_SPEED, 0) |
| 82 | climbVelocity.VectorVelocity = climbDirection |
| 83 | end |
| 84 | else |
| 85 | stopClimb() |
| 86 | if not isClimbing then |
| 87 | currentStamina = math.clamp(currentStamina + (25.0 * deltaTime), 0, MAX_STAMINA) |
| 88 | end |
| 89 | end |
| 90 | end) |
ENGINEERED FOR MODERN BUILDERS
Prompt Architect, Studio packs, Citadel labs, Workshop assets, and Luau templates — peers under one studio.
Local prompt workbench
Draft Gemini-style system instructions and JSON schemas, diff the text locally, and estimate token cost from published rates. Export SDK snippets you run yourself. This page does not call Gemini.
- ✓ Visual system instruction & persona builder
- ✓ Strict JSON Schema response enforcement
- ✓ 1-click export to @google/genai & Python
3D Assets & Audio Bank
Curated 3D model library and procedural Web Audio synthesizers. Download rigged and skinned character models (glTF/GLB) or generate and export custom cyberpunk sound effects.
- ✓ 24+ Meshy-7 Ultra and Meshy-T2 .glb models
- ✓ Procedural Web Audio SFX with WAV export
- ✓ Starter bot architectures & heuristic baselines
Luau template studio
Fill strict-mode mechanic templates: wall climb, DataStore sketches, grappling hooks, and hitbox checks. Sliders rewrite numbers in the template. The checklist is static notes, not a security certification.
- ✓ Wall climb & spring grappling hook controllers
- ✓ UpdateAsync DataStores with session locks
- ✓ Server hitbox & line-of-sight validation
CITADEL PROTOCOL:
LOCAL 3D BOT LAB
Scripted infiltrators and sentries move through the citadel model in this browser. The lab uses those GLBs when they load, and names a file if it is missing. It is a local sim, not a hosted match and not public matchmaking.