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

fck-premium-teleprompters

v0.2.0

Published

Teleprompter en red local: editor en el Mac, visor en el iPad, mando en el móvil. Sin cuota, sin cuenta, sin nube.

Readme

fuck_premium_teleprompters

Teleprompter en red local. El Mac hace de servidor, el iPad muestra el guion en espejo y el móvil lo controla en tiempo real.

Sin cuota, sin cuenta, sin marca de agua y sin nube: el guion no sale de tu Wi-Fi.

Arrancar

Sin instalar nada:

npx fck-premium-teleprompters

O instalado como comando, para tenerlo siempre a mano:

npm install -g fck-premium-teleprompters
fck-premium-teleprompters

Sí, falta una letra. El registro de npm tiene un filtro de palabrotas y devuelve «That word is not allowed» al publicar, así que ahí el paquete va censurado. En todo lo demás el nombre se queda como estaba.

Necesita Node 20.19 o superior. El paquete viene ya construido, así que arranca en unos segundos.

Al arrancar imprime las direcciones de la red local. Abre la de localhost en el Mac: la página de inicio trae los códigos QR del visor y del mando para abrirlos en el iPad y el móvil sin teclear nada.

El guion se guarda en un state.json en la carpeta desde la que lanzas el comando, así que cada proyecto puede tener el suyo.

El puerto se busca solo: empieza por el 3000 y, si está ocupado, prueba el siguiente hasta dar con uno libre —así puedes tener dos tomas abiertas a la vez—. Para empezar a buscar por otro, PORT=4000 npx fck-premium-teleprompters.

Desde el código

git clone https://github.com/eljommys/fuck_premium_teleprompters.git
cd fuck_premium_teleprompters
npm install
npm start

Para desarrollar, npm run dev (recarga en caliente, algo más lento).

Las tres vistas

| Ruta | Dispositivo | Qué hace | | ----------- | ----------- | ------------------------------------------------------------------ | | /editor | Mac | Pegar el guion y ajustar velocidad, cuerpo de letra y espejo. | | /prompter | iPad | Guion a pantalla completa, espejo y barra de progreso a la derecha. | | /remote | Móvil | El guion en vivo: tocarlo reproduce o pausa, arrastrarlo lo mueve. |

Todos los dispositivos comparten un mismo estado por WebSocket: lo que se cambia en uno aparece al instante en los demás.

En el mando ves el mismo guion que el iPad, sincronizado, con su línea de lectura al 40 % de la pantalla. Un toque en cualquier parte del texto reproduce o pausa. Arrastrarlo verticalmente lo desplaza uno a uno con el dedo, y agarrarlo detiene la marcha, como sujetar el papel con la mano. Abajo, ⚙ abre los ajustes: velocidad, cuerpo de letra del visor y del propio móvil, interlineado, márgenes, espejos y volver al inicio.

Detalles de montaje

  • Espejo H para el cristal del teleprompter (invierte izquierda-derecha). Añade Espejo V si el iPad va boca abajo bajo el cristal.
  • El visor mantiene la pantalla del iPad encendida mientras esté abierto (Wake Lock). En iPadOS conviene abrirlo desde Safari y dejarlo en primer plano.
  • El guion y los ajustes se guardan en state.json, así que sobreviven a un reinicio del servidor. Ese fichero no se versiona.

Cómo está montado

  • server.ts — servidor único: sirve Next.js y atiende los WebSockets en /ws. Guarda el estado escribiendo a un temporal y renombrando, así que un corte no deja el guion a medias. Los ajustes se guardan a los 0,5 s y la posición a los 5 s, y lo pendiente se vuelca al cerrar.
  • lib/state.ts — forma del estado compartido, límites de cada ajuste y saneado de los mensajes que llegan de los clientes.
  • lib/useTeleprompter.ts — hook de cliente: conexión, reconexión automática y aplicación de cambios.
  • lib/useScriptScroll.ts — la mecánica de desplazamiento que comparten el visor y el mando: mide el recorrido, anima fuera de React y pinta con transform.

Cada pantalla anima el desplazamiento por su cuenta y trata lo que llega por la red como una posición a la que acercarse, no a la que saltar. Por eso el arrastre desde el móvil se ve continuo en el iPad aunque las posiciones lleguen a golpes de 33 ms. Mientras se reproduce, esa posición objetivo avanza al mismo ritmo que la lectura; si no, el desfase se estancaría y el visor se quedaría congelado a mitad de toma.