npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@quenty/camera

v14.29.0

Published

Quenty's camera system for Roblox

Readme

Camera

CameraStackService provides a camera stack of objects that can report a camera state. This allows a composable camera system for a variety of situations that arise, and lets systems interop with each other

Installation

npm install @quenty/camera --save

Features

  • Minor VR support
  • Support for composable camera types
  • Support for interpolation between camera nodes
  • Support for touch and gamepad support and controls
  • Support for camera shake

Camera State

CameraState is an immutable camera system used for camera interpolation. Designed to make camera effects easy, it trades some efficiency and speed for making a not confusing camera system.

Camera state stores internal state of Coordinate frames as quaternions. This means that the classic lerp equation. Operations have been overridden to make this easier to work with.

Ok. It's not entirely immutable. They are kind of lazy, that is, reading data doesn't affect the state of them. There are no required update loops or anything for the most part.

Camera effect API

Current Camera Effects have the following API available. Adding new effects means that these two should follow the same API specifications

Add + operator

Returns a new Summed camera and adds the two effects together. This is used for combining effects

.CameraState

Indexing the CameraEffect should return the current camera state. This means that state is easy to index.

In previous versions, the following will also work. However, this is no longer true.

  • .State
  • .CameraState
  • .Camera

This will return a CameraState

!!! warning Note that eventually we plan to deprecate everything but .CameraState

DefaultCamera

This class tracks the current camera ROBLOX uses and lets it maintain how it operates using a BindToRenderStep trick.

  • Should call BindToRenderStep during construction
  • Only one should exist at once per client (not enforced in code, however)

SummedCamera

This class takes two arguments and returns the summation of the two

  • Arguments can be either CameraState or a CameraEffect, assuming the effect has a CameraState member

FadingCamera

This classes allows the effects of a camera to be faded / varied based upon a spring

  • Starts at 0 percent effect

Usage

Here is sample usage of using just a subcomponent. Recommendation is to use full camera stack service.

local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")

local FadeBetweenCamera3 = require(modules.FadeBetweenCamera3)
local CustomCameraEffect = require(modules.CustomCameraEffect)
local CameraState = require(modules.CameraState)

local defaultCamera = require(modules.DefaultCamera).new()
defaultCamera:BindToRenderStep() -- capture roblox camera automatically

local targetCamera = CustomCameraEffect.new(function()
  local target = CameraState.new()
  target.CFrame = CFrame.new(0, 100, 0)
  target.FieldOfView = 70

  return target
end)

local faded = FadeBetweenCamera3.new(defaultCamera, targetCamera)
faded.Speed = 5

RunService:BindToRenderStep("CameraStackUpdateInternal", Enum.RenderPriority.Camera.Value + 75, function()
  faded.CameraState:Set(Workspace.CurrentCamera)
end)

-- Input
local mouse = game.Players.LocalPlayer:GetMouse()
local visible = false
mouse.Button1Down:Connect(function()
  visible = not visible
  if visible then
    faded.Target = 1
  else
    faded.Target = 0
  end
end)