דילוג לתוכן

עולם

נושאים מחוץ לפורום הזה. הדעות המיוצגות כאן עשויות שלא לשקף את אלה של הפורום והחברים בו.

עולם של תוכן בקצות אצבעותיך...

תחשובו על זה כעל הזנת התגליות הגלובלית שלכם. הוא מפגיש דיונים מעניינים מרחבי האינטרנט ומקהילות אחרות, והכל במקום אחד.

אמנם תוכלו לעיין במה שפופולרי עכשיו, אבל הדרך הטובה ביותר להשתמש בפיד הזה היא להפוך אותו לשלכם. על ידי יצירת חשבון, תוכלו לעקוב אחר יוצרים ונושאים ספציפיים כדי לסנן את הרעש ולראות רק את מה שחשוב לכם.

מוכנים לצלול פנימה? צרו חשבון כדי להתחיל לעקוב אחר אחרים, לקבל התראה כשאנשים עונים לכם ולשמור את הממצאים המועדפים עלכם.

הרשמה התחברות
  • אברהם גלסרא

    יש לי מחשב שיש בו כרגע 8 RAM. מישהו יכול להסביר איך לשדרג?


  • מטען ניידמ

    בנקאית!העברה ע"י מוניטין 1כולה לתרגום אפליקציה כל אז חינם!עובד לא שאני כמובן יתרגם!ואני אותה לי תעלו תרגום?שצריכה אפליקציהה אפליקציה לכם יש


    @מחנה-ידידים כתב: @מטען-נייד כת"ר כותב משמאל לימין אין יד איזה בעיה כל נושא שאני מעלה נכתב הפוך
  • kernelK

    שלום לכולם! אני רוצה לשתף אתכם באפליקציה חדשה שפיתחתי ל-Windows: ChordsEngine.

    מדובר בתוכנה מקומית (ללא צורך באינטרנט) המאפשרת להציג מילים ואקורדים לשירים, עם יכולות תמלול אודיו וזיהוי אקורדים מתקדם באמצעות טכנולוגיית whisper.cpp.

    התוכנה נועדה לעזור לנגני גיטרה ללמוד ולנגן שירים בקלות. אשמח לשמוע את דעתכם!

    ניתן למצוא את הפרויקט כאן: https://github.com/unisocsu/chords-engine-windows
    אתר
    https://unisocsu.github.io/chords-engine-windows/
    קישור זמני למשתמשי נטפרי
    https://raw.githack.com/unisocsu/chords-engine-windows/main/docs/index.html
    הפוסט נכתב באמצעות AI סליחה 😉
    אשמח לתגובות פה ובissues

    תודה רבה ל @צול-גאה על בניית הבסיס

    עם קלוד קוד

    חג שמח


  • מטען ניידמ

    פיש אפליקציה שקיימת שאתם יודעים שהיא באנגלית ואתם רוצים בעברית.
    **כלל
    יש לכתוב את שם האפליקציה, לעלות אותה ובלי נדר אני יביא אות.מ


  • CSSC

    מכירים את זה שזה מעצבן שכדי לכתוב משהו אתם צריכים לעבור בין חלוניות? הנה הפתרון!
    התוכנה בגודל ממש קטן
    היא פועלת מעל כל האפליקציות,
    ניתנת לשינוי הגודל,
    ושינוי המיקום שלה ע"י גרירה!
    יש בה את כל מה שיש בפנקס הרשימות!

    notepad.py
    יש לשמור אותו וללחוץ עליו פעמיים!
    וזהו!
    7967ed89-01b4-47f0-bb03-d65bc3f96619-image.png


    @CSS תביא הדגמה מטכנוקליק..
  • ח

    יצרתי‌​‌‌​‌​​​​​‌ אפליקציה לאתר עוגן פליי
    עובדת מאנדרואיד 4.1 ומותאמת לניוט מקשים עובדת מעולה גם במגע!

    להורדה

    98780efc-73c6-44f2-a329-3ab16be4d62b-OgenPlay-debug.apk

    למנוטפרים המוערצים! (קרדיט @מטען-נייד

    https://ogen-plei-qype.vercel.app/apps/81d7a85a-e440-4891-b426-f956c41fa76d

    תהנו!


  • מטען ניידמ

    לאחרונה שמתי לב שזה מסובך להתקין תעודת אבטחה לאנדרואיד (13) באתרוג.

    אז הנה מדריך קצר ופשוט.

    שלב ראשון: מורידים את התעודה הפשוטה הזאתי
    myca.crt
    שלב שני: נכנסים להגדרות ומחפשים את המילה ca ואז יש קטגוריה אישור ca תכנסו. ושמה יש התקנת ca תתקינו את התעודה וסיימתם.
    בהצלחה!


  • CSSC

    יש לי תוכנה של ממיר שמע לפלייבק קריורי עם הרבה אפשרויות
    התוכנה גמורה, רק שאין לי כח לקמפל זה יקח הרבה זמן אם מישהו יקח לידים בשמחה..
    התוכנה היא בפייתון
    נוצרה עם AI היא משתמשת במודלים הכי מתקדמים בעולם
    יש לשים לב היא מעט איטית בגלל המודלים..


    יכולות:

    • הפרדה ללא שום רעשי רקע הפרדה מוחלטת.
    • אפשרות להפריד רק את התופים.
    • אפשרות להסיר רק את הבס.
    • או להסיר כמה דברים ולשאיר משהו אחר.
    • אפשרות לשמוע לפני שמורידים.

    חסרונות:

    • החסרון העיקרי זה שזה בקבצי קוד.
    • יש עוד חסרון האיטיות של זה.
    • שוקל 1.2GB.

    דרישות:

    פייתון

    והספרית הבאות:

    pip install PyQt6 audio-separator[cpu]
    

    מומלץ לעדכן לפני את כלי ההתקנה:

    python -m pip install --upgrade pip
    

    להורדה:

    להורדה: מסיר זמר

    לא להעתיק ללא כוכביות!!!


  • X

    אתר:
    דרך הארץ - דף הבית
    אפליקציה:
    דרך הארץ - אפליקציה
    האפליקציה בזיפ:
    webview-metailim.pythonanywhere.com.zi
    שימו לב, לאחר הורדה להוסיף p בסוף השם של הקובץ.
    המלצה: להורדת תמונות מהירה כנסו לחיפוש תמונות ורשמו את שם המקום שאתם מפרסמים> הקלקה ימנית> שמור תמונה בשם, כך תוכלו להעלות בקלות.
    אשמח אם תוסיפו המלצות למיקומים, ואם תכתבו לי פה בשרשור הצעות שיפור.
    image.jpeg


  • CSSC

    בניתי (עם AI) תוכנה שרצה על המחשב ויכולה ל:

    • לבצע פעולות מה שתרצו...
    • לכתוב קוד בממשק מיוחד שיכול גם להריץ את הקוד וכ"ו.
    • לכתוב מאמרים.
    • צ'אט.
    • לכתוב תוכן.
    • עם - gemini 3.1 pro
    • עובד למנוטרפים.
    • דורש API.

    כיצד להפעיל:

    התוכנה בהפעלה הראשונה תיצור מסביבה תיקיות וקבצים הכל תקין!
    יש להכנס לקטגורית API" ושם להזין את ה- API מג'ימיני!
    התוכנה משתמש במודל המהיר לצ'אט ו בפרו לביצוע פעולות קוד וכ"ו

    להורדה:

    AI פועל V.1

    לא להעתיק ללא כוכביות!!!


    תמונות בספוילר


    420adf2f-3212-4417-b75b-822f8a43fd86-image.png
    f8f398f1-c0e9-4a60-b71a-83583440fa0c-image.png
    cc268e95-284e-42fa-b5c6-c0607bb1c90d-image.png
    85c6f359-10ff-432e-bb87-ed2c0352c0c5-image.png
    59011699-0049-446f-b457-aa3116933381-image.png
    1b768941-cd89-4af1-94a0-e187a4449b16-image.png
    e4a17931-42ce-4cc4-a968-88d43782e4d5-image.png


    קוד מקור:

    app.py

    import os
    import io
    import sys
    import time
    import json
    import subprocess
    import threading
    import requests
    import urllib3
    from flask import Flask, request, jsonify
    import google.generativeai as genai
    from dotenv import load_dotenv
    from werkzeug.utils import secure_filename
    from PyQt5.QtWidgets import QApplication, QMainWindow
    from PyQt5.QtWebEngineWidgets import QWebEngineView
    from PyQt5.QtGui import QIcon
    from PyQt5.QtCore import QUrl
    
    if getattr(sys, 'frozen', False):
        sys.stdout = open(os.devnull, 'w')
        sys.stderr = open(os.devnull, 'w')
        BASE_DIR = os.path.dirname(sys.executable)
        ASSETS_DIR = sys._MEIPASS
    else:
        BASE_DIR = os.path.dirname(os.path.abspath(__file__))
        ASSETS_DIR = BASE_DIR
    
    CERT_FILE = os.path.join(BASE_DIR, "certificate.crt")
    if os.path.exists(CERT_FILE):
        os.environ["REQUESTS_CA_BUNDLE"] = CERT_FILE
        os.environ["SSL_CERT_FILE"] = CERT_FILE
    else:
        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        old_merge_environment_settings = requests.Session.merge_environment_settings
        def merge_environment_settings(self, url, proxies, stream, verify, cert):
            settings = old_merge_environment_settings(self, url, proxies, stream, verify, cert)
            settings['verify'] = False 
            return settings
        requests.Session.merge_environment_settings = merge_environment_settings
    
    app = Flask(__name__)
    
    ENV_FILE = os.path.join(BASE_DIR, ".env")
    if not os.path.exists(ENV_FILE):
        with open(ENV_FILE, "w", encoding="utf-8") as f:
            f.write("GOOGLE_API_KEY=\n")
    
    load_dotenv(ENV_FILE)
    
    PROJECTS_DIR = os.path.join(BASE_DIR, "projects")
    UPLOADS_DIR = os.path.join(BASE_DIR, "uploads")
    KNOWLEDGE_DIR = os.path.join(BASE_DIR, "knowledge_bases")
    
    for d in [PROJECTS_DIR, UPLOADS_DIR, KNOWLEDGE_DIR]:
        if not os.path.exists(d): os.makedirs(d)
    
    MODEL_MAIN_NAME = 'gemini-3.1-pro-preview' 
    MODEL_FAST_NAME = 'gemini-3.1-flash-lite-preview'
    
    model_main = None
    model_fast = None
    chat_session = None
    
    def init_gemini():
        global model_main, model_fast, chat_session
        api_key = os.getenv("GOOGLE_API_KEY")
        if api_key:
            try:
                genai.configure(api_key=api_key, transport='rest')
                model_main = genai.GenerativeModel(MODEL_MAIN_NAME)
                model_fast = genai.GenerativeModel(MODEL_FAST_NAME)
                chat_session = model_fast.start_chat(history=[])
            except Exception as e:
                pass
    
    init_gemini()
    
    stop_generation_flag = False
    
    HTML_CONTENT = """<!DOCTYPE html>
    <html lang="he" dir="rtl">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>JARVIS V5 ULTIMATE</title>
        <script src="https://cdn.tailwindcss.com"></script>
        <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
        <style>
            body { background: #000; color: #e2e8f0; height: 100vh; overflow: hidden; font-family: 'Segoe UI', sans-serif; }
            .glass { background: rgba(15, 15, 20, 0.95); border: 1px solid #333; }
            .active-tab { border-right: 4px solid #3b82f6; background: rgba(59, 130, 246, 0.15) !important; color: #60a5fa; }
            
            button, input, textarea, select { color: #ffffff !important; }
            button { background-color: #1e293b; border: none; cursor: pointer; }
            nav button { background-color: transparent; }
            input, textarea, select { background-color: #0f172a; border: 1px solid #334155; }
            
            .thinking-bar {
                height: 4px; width: 100%; background: linear-gradient(90deg, transparent, #3b82f6, transparent);
                animation: loading 1.5s infinite; position: absolute; top: 0; left: 0;
            }
            @keyframes loading { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }
    
            .voice-active { animation: pulse 1s infinite; color: #f87171; }
            @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.2); opacity: 0.8; } 100% { transform: scale(1); opacity: 1; } }
    
            .prose h1, h2, h3 { color: #60a5fa; font-weight: bold; margin-top: 0.5rem; }
            .prose pre { background: #111; padding: 10px; direction: ltr; border-radius: 5px; border: 1px solid #333; }
        </style>
    </head>
    <body class="flex h-screen">
    
        <aside class="w-64 glass flex flex-col p-4 border-l border-gray-800">
            <div class="text-center mb-6">
                <h1 class="text-4xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-blue-500 to-cyan-500">JARVIS</h1>
                <div class="text-xs text-gray-500 mt-1">SYSTEM V5 | NETFREE PATCHED</div>
            </div>
    
            <nav class="space-y-3 flex-1 overflow-y-auto">
                <button onclick="switchTab('chat')" id="btn-chat" class="active-tab w-full p-3 rounded flex items-center gap-3 transition"><i class="fas fa-comment-dots"></i> צ'אט (מהיר)</button>
                <button onclick="switchTab('content')" id="btn-content" class="w-full p-3 rounded flex items-center gap-3 transition"><i class="fas fa-pen-nib"></i> כתיבת תוכן</button>
                <button onclick="switchTab('code')" id="btn-code" class="w-full p-3 rounded flex items-center gap-3 transition"><i class="fas fa-code"></i> קוד ופרויקטים</button>
                <button onclick="switchTab('agent')" id="btn-agent" class="w-full p-3 rounded flex items-center gap-3 transition"><i class="fas fa-robot text-red-400"></i> סוכן אוטונומי</button>
                <button onclick="switchTab('knowledge')" id="btn-knowledge" class="w-full p-3 rounded flex items-center gap-3 transition"><i class="fas fa-server text-yellow-400"></i> מפעל המידע</button>
                <button onclick="switchTab('settings')" id="btn-settings" class="w-full p-3 rounded flex items-center gap-3 transition"><i class="fas fa-key text-gray-400"></i> הגדרות API</button>
            </nav>
            
            <div class="text-[10px] text-gray-600 text-center">
                Main: Gemini 3.0 Pro<br>Chat: Gemini 2.5 Flash
            </div>
        </aside>
    
        <main class="flex-1 p-4 relative flex flex-col">
            
            <div id="tab-chat" class="flex-1 flex flex-col glass rounded-xl h-full relative overflow-hidden">
                <div id="chat-loader" class="hidden"><div class="thinking-bar"></div></div>
                <div id="chat-box" class="flex-1 overflow-y-auto space-y-4 p-4 pb-20"></div>
                
                <div class="absolute bottom-4 left-4 right-4 flex gap-2">
                    <label class="bg-slate-800 p-4 rounded-xl cursor-pointer hover:bg-slate-700 text-gray-400">
                        <i class="fas fa-paperclip"></i>
                        <input type="file" id="file-upload" class="hidden" onchange="fileSelected()">
                    </label>
                    <input id="chat-input" class="flex-1 bg-slate-900 border border-slate-700 rounded-xl p-4 text-white outline-none" placeholder="הקלד או דבר...">
                    <button id="mic-btn" onclick="toggleVoice()" class="bg-slate-800 p-4 rounded-xl text-white hover:bg-slate-700"><i class="fas fa-microphone"></i></button>
                    <button onclick="sendChat()" class="bg-blue-600 p-4 rounded-xl text-white hover:bg-blue-500"><i class="fas fa-paper-plane"></i></button>
                </div>
                <div id="file-notify" class="absolute bottom-20 right-6 text-xs text-blue-400"></div>
            </div>
    
            <div id="tab-content" class="hidden flex-1 flex flex-col glass rounded-xl h-full p-6 space-y-4 relative overflow-hidden">
                <div id="content-loader" class="hidden"><div class="thinking-bar"></div></div>
                <h2 class="text-2xl font-bold text-purple-400">יצירת תוכן (3.0 Pro)</h2>
                <div class="flex gap-2">
                    <input id="content-topic" class="flex-1 bg-slate-900 border border-slate-700 p-3 rounded outline-none" placeholder="נושא...">
                    <select id="content-type" class="bg-slate-900 border border-slate-700 p-3 rounded"><option>מאמר</option><option>פוסט</option><option>מייל</option></select>
                    <button onclick="genContent()" class="bg-purple-600 text-white px-6 rounded hover:bg-purple-500">צור</button>
                </div>
                <div id="content-res" class="prose flex-1 bg-black/50 p-6 rounded overflow-y-auto border border-gray-800"></div>
            </div>
    
            <div id="tab-code" class="hidden flex-1 flex flex-col glass rounded-xl h-full p-6 space-y-4 relative overflow-hidden">
                <div id="code-loader" class="hidden"><div class="thinking-bar"></div></div>
                <h2 class="text-2xl font-bold text-blue-400">בניית פרויקטים</h2>
                <input id="proj-name" class="bg-slate-900 border border-slate-700 p-3 rounded outline-none" placeholder="שם הפרויקט (באנגלית)">
                <textarea id="proj-desc" class="bg-slate-900 border border-slate-700 p-3 rounded outline-none h-32" placeholder="תיאור המערכת..."></textarea>
                <button onclick="genCode()" class="bg-blue-600 text-white p-4 rounded hover:bg-blue-500 font-bold">בנה ושמור</button>
                <div id="code-res" class="text-center text-gray-400 mt-4"></div>
            </div>
    
            <div id="tab-agent" class="hidden flex-1 flex flex-col glass rounded-xl h-full p-6 space-y-4 relative overflow-hidden">
                <div id="agent-loader" class="hidden"><div class="thinking-bar"></div></div>
                <h2 class="text-2xl font-bold text-red-500">סוכן אוטונומי</h2>
                <div class="flex gap-2">
                    <input id="agent-input" class="flex-1 bg-black border border-red-900 p-4 rounded text-red-100 font-mono" placeholder="פקודה (למשל: תפתח מחשבון ותיצור תיקייה בשם X)">
                    <button onclick="runAgent()" class="bg-red-700 text-white px-6 rounded hover:bg-red-600">בצע</button>
                </div>
                <div id="agent-log" class="flex-1 bg-black p-4 rounded border border-red-900/30 text-green-400 font-mono overflow-y-auto text-sm">
                    > System Ready.
                </div>
            </div>
    
            <div id="tab-knowledge" class="hidden flex-1 flex flex-col glass rounded-xl h-full p-6 space-y-4 relative overflow-hidden">
                <h2 class="text-2xl font-bold text-yellow-400">מפעל המידע</h2>
                <div class="flex gap-2">
                    <input id="know-topic" class="flex-1 bg-slate-900 border border-yellow-700 p-3 rounded outline-none" placeholder="נושא למאגר...">
                    <button id="btn-start" onclick="startKnow()" class="bg-green-600 text-white px-6 rounded">התחל</button>
                    <button id="btn-stop" onclick="stopKnow()" class="hidden bg-red-600 text-white px-6 rounded">עצור</button>
                </div>
                <div id="know-log" class="flex-1 bg-black/50 p-4 rounded border border-yellow-900 text-gray-300 overflow-y-auto"></div>
            </div>
    
            <div id="tab-settings" class="hidden flex-1 flex flex-col glass rounded-xl h-full p-6 space-y-4 relative overflow-hidden">
                <h2 class="text-2xl font-bold text-gray-400">הגדרות API</h2>
                <div class="flex gap-2">
                    <input id="api-key-input" type="password" class="flex-1 bg-slate-900 border border-slate-700 p-3 rounded outline-none text-left" placeholder="Google Gemini API Key">
                    <button onclick="saveApiKey()" class="bg-gray-700 text-white px-6 rounded hover:bg-gray-600 font-bold">שמור מפתח</button>
                </div>
                <div id="api-status" class="text-green-400 mt-2"></div>
            </div>
    
        </main>
    
        <script>
            function switchTab(t) {
                ['chat','content','code','agent','knowledge','settings'].forEach(x => {
                    document.getElementById('tab-'+x).classList.add('hidden');
                    document.getElementById('btn-'+x).classList.remove('active-tab');
                });
                document.getElementById('tab-'+t).classList.remove('hidden');
                document.getElementById('btn-'+t).classList.add('active-tab');
            }
    
            let voiceActive = false;
            const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
            recognition.lang = 'he-IL';
            
            recognition.onresult = e => {
                document.getElementById('chat-input').value = e.results[0][0].transcript;
                sendChat();
            };
            recognition.onend = () => { if(voiceActive && !window.speechSynthesis.speaking) recognition.start(); };
    
            function toggleVoice() {
                voiceActive = !voiceActive;
                const btn = document.getElementById('mic-btn');
                if(voiceActive) {
                    recognition.start();
                    btn.classList.add('voice-active');
                } else {
                    recognition.stop();
                    btn.classList.remove('voice-active');
                    window.speechSynthesis.cancel();
                }
            }
    
            let file = null;
            function fileSelected() {
                file = document.getElementById('file-upload').files[0];
                document.getElementById('file-notify').innerText = "קובץ: " + file.name;
            }
    
            async function sendChat() {
                const inp = document.getElementById('chat-input');
                const txt = inp.value; if(!txt && !file) return;
                const box = document.getElementById('chat-box');
                
                box.innerHTML += `<div class='flex'><div class='bg-blue-900/50 p-3 rounded-xl max-w-[80%]'>${txt || '[קובץ]'}</div></div>`;
                inp.value = ''; document.getElementById('file-notify').innerText = '';
                
                document.getElementById('chat-loader').classList.remove('hidden');
                
                const fd = new FormData();
                fd.append('message', txt);
                if(file) { fd.append('file', file); file = null; }
    
                try {
                    const res = await fetch('/api/chat', {method:'POST', body:fd});
                    const d = await res.json();
                    const html = marked.parse(d.response || d.error);
                    box.innerHTML += `<div class='flex justify-end mt-2'><div class='prose bg-slate-800 p-3 rounded-xl max-w-[80%]'>${html}</div></div>`;
                    box.scrollTop = box.scrollHeight;
                    
                    if(voiceActive) {
                        const u = new SpeechSynthesisUtterance((d.response||'').replace(/[*#]/g, ''));
                        u.lang = 'he-IL';
                        window.speechSynthesis.speak(u);
                    }
                } catch(e) {}
                document.getElementById('chat-loader').classList.add('hidden');
            }
    
            async function runAgent() {
                const txt = document.getElementById('agent-input').value;
                const log = document.getElementById('agent-log');
                log.innerHTML += `\\n> Executing: ${txt}...`;
                document.getElementById('agent-loader').classList.remove('hidden');
                
                try {
                    const res = await fetch('/api/agent_execute', {
                        method:'POST', headers:{'Content-Type':'application/json'},
                        body: JSON.stringify({request:txt})
                    });
                    const d = await res.json();
                    log.innerHTML += `\\n${d.log}\\n----------------`;
                } catch(e) { log.innerHTML += `\\nError.`; }
                document.getElementById('agent-loader').classList.add('hidden');
            }
    
            async function genContent() {
                document.getElementById('content-loader').classList.remove('hidden');
                const res = await fetch('/api/content', {
                    method:'POST', headers:{'Content-Type':'application/json'},
                    body: JSON.stringify({
                        topic: document.getElementById('content-topic').value,
                        type: document.getElementById('content-type').value
                    })
                });
                const d = await res.json();
                document.getElementById('content-res').innerHTML = marked.parse(d.content || d.error);
                document.getElementById('content-loader').classList.add('hidden');
            }
    
            async function genCode() {
                document.getElementById('code-loader').classList.remove('hidden');
                const res = await fetch('/api/code', {
                    method:'POST', headers:{'Content-Type':'application/json'},
                    body: JSON.stringify({
                        projectName: document.getElementById('proj-name').value,
                        description: document.getElementById('proj-desc').value
                    })
                });
                const d = await res.json();
                document.getElementById('code-res').innerText = d.success ? "✅ הפרויקט נשמר בהצלחה!" : "Error";
                document.getElementById('code-loader').classList.add('hidden');
            }
            
            let knowCtx = '';
            let knowFile = '';
            async function startKnow() {
                document.getElementById('btn-start').classList.add('hidden');
                document.getElementById('btn-stop').classList.remove('hidden');
                const t = document.getElementById('know-topic').value;
                const res = await fetch('/api/knowledge/start', {
                    method:'POST', headers:{'Content-Type':'application/json'},
                    body: JSON.stringify({topic:t})
                });
                const d = await res.json();
                knowFile = d.filename;
                document.getElementById('know-log').innerHTML = "התחלנו...";
                nextChunk(t);
            }
            async function nextChunk(t) {
                const res = await fetch('/api/knowledge/chunk', {
                    method:'POST', headers:{'Content-Type':'application/json'},
                    body: JSON.stringify({topic:t, filename:knowFile, context:knowCtx})
                });
                const d = await res.json();
                if(d.status === 'continue') {
                    document.getElementById('know-log').innerHTML += `<div>✅ פרק נכתב.</div>`;
                    knowCtx += d.summary;
                    nextChunk(t);
                } else {
                    document.getElementById('know-log').innerHTML += `<div class='text-red-400'>נעצר.</div>`;
                    stopKnow();
                }
            }
            function stopKnow() {
                fetch('/api/knowledge/stop', {method:'POST'});
                document.getElementById('btn-start').classList.remove('hidden');
                document.getElementById('btn-stop').classList.add('hidden');
            }
    
            async function saveApiKey() {
                const key = document.getElementById('api-key-input').value;
                if(!key) return;
                const res = await fetch('/api/settings', {
                    method:'POST', headers:{'Content-Type':'application/json'},
                    body: JSON.stringify({api_key: key})
                });
                const d = await res.json();
                document.getElementById('api-status').innerText = d.success ? "✅ מפתח נשמר והמערכת עודכנה בהצלחה!" : "❌ שגיאה בשמירת המפתח";
            }
    
            document.getElementById('chat-input').addEventListener('keypress', e=>{if(e.key==='Enter') sendChat()});
            document.getElementById('agent-input').addEventListener('keypress', e=>{if(e.key==='Enter') runAgent()});
        </script>
    </body>
    </html>"""
    
    @app.route('/')
    def home():
        return HTML_CONTENT
    
    @app.route('/api/settings', methods=['POST'])
    def save_settings():
        try:
            data = request.json
            new_key = data.get('api_key')
            if new_key:
                with open(ENV_FILE, "w", encoding="utf-8") as f:
                    f.write(f"GOOGLE_API_KEY={new_key}\n")
                os.environ["GOOGLE_API_KEY"] = new_key
                init_gemini()
                return jsonify({'success': True})
            return jsonify({'success': False})
        except Exception as e:
            return jsonify({'error': str(e)}), 500
    
    @app.route('/api/chat', methods=['POST'])
    def chat():
        if not chat_session:
            return jsonify({'error': 'Missing API Key. Please configure it in settings.'}), 400
        try:
            uploaded_file = None
            if 'file' in request.files:
                file = request.files['file']
                if file.filename != '':
                    filename = secure_filename(file.filename)
                    path = os.path.join(UPLOADS_DIR, filename)
                    file.save(path)
                    uploaded_file = genai.upload_file(path)
    
            user_msg = request.form.get('message')
            
            if uploaded_file:
                response = chat_session.send_message([user_msg, uploaded_file])
            else:
                response = chat_session.send_message(user_msg)
                
            return jsonify({'response': response.text})
        except Exception as e:
            return jsonify({'error': str(e)}), 500
    
    @app.route('/api/content', methods=['POST'])
    def generate_content():
        if not model_main:
            return jsonify({'error': 'Missing API Key.'}), 400
        try:
            data = request.json
            prompt = f"נושא: {data.get('topic')}. סוג: {data.get('type')}. כתוב בעברית ברמה אקדמית."
            
            response = model_main.generate_content(prompt)
            return jsonify({'content': response.text})
        except Exception as e:
            return jsonify({'error': str(e)}), 500
    
    @app.route('/api/code', methods=['POST'])
    def generate_code_direct():
        if not model_main:
            return jsonify({'error': 'Missing API Key.'}), 400
        try:
            data = request.json
            proj_name = data.get('projectName')
            target_dir = os.path.join(PROJECTS_DIR, proj_name)
            if not os.path.exists(target_dir): os.makedirs(target_dir)
    
            prompt = f'''
            Act as an Expert Developer using {MODEL_MAIN_NAME}.
            Project: {proj_name}
            Description: {data.get('description')}
            OUTPUT FORMAT ONLY:
            ###FILENAME: filename.ext
            content...
            NO MARKDOWN.
            '''
            response = model_main.generate_content(prompt)
            
            files_created = []
            files = response.text.split("###FILENAME: ")
            for f in files:
                if not f.strip(): continue
                parts = f.split("\n", 1)
                if len(parts) < 2: continue
                filename = parts[0].strip()
                content = parts[1].replace("```python", "").replace("```", "")
                
                full_path = os.path.join(target_dir, filename)
                os.makedirs(os.path.dirname(full_path), exist_ok=True)
                with open(full_path, "w", encoding="utf-8") as file:
                    file.write(content)
                files_created.append(filename)
                
            if not files_created: raise Exception("No files generated")
            return jsonify({'success': True, 'path': target_dir, 'files': files_created})
        except Exception as e:
            return jsonify({'error': str(e)}), 500
    
    @app.route('/api/agent_execute', methods=['POST'])
    def agent_execute():
        if not model_main:
            return jsonify({'log': 'Missing API Key.'})
        try:
            data = request.json
            user_request = data.get('request')
            
            prompt = f'''
            You are an Autonomous System Agent.
            User Request: "{user_request}"
            
            Supported Actions JSON format:
            [
                {{"action": "create_folder", "path": "name"}},
                {{"action": "create_file", "path": "name.txt", "content": "text"}},
                {{"action": "open_app", "app_name": "calc"}},
                {{"action": "run_cmd", "command": "ping 8.8.8.8"}}
            ]
            RETURN ONLY JSON ARRAY.
            '''
            
            plan_response = model_main.generate_content(prompt)
            plan_text = plan_response.text.replace("```json", "").replace("```", "").strip()
            
            try:
                actions = json.loads(plan_text)
            except:
                start = plan_text.find('[')
                end = plan_text.rfind(']') + 1
                if start != -1 and end != -1:
                    actions = json.loads(plan_text[start:end])
                else:
                    return jsonify({'log': "❌ שגיאה בפענוח הפקודה. נסה שוב."})
    
            log = []
            for act in actions:
                action = act.get('action')
                try:
                    if action == 'create_folder':
                        path = os.path.join(PROJECTS_DIR, act.get('path'))
                        os.makedirs(path, exist_ok=True)
                        log.append(f"✅ תיקייה: {act.get('path')}")
                    elif action == 'create_file':
                        path = os.path.join(PROJECTS_DIR, act.get('path'))
                        with open(path, "w", encoding="utf-8") as f: f.write(act.get('content', ''))
                        log.append(f"✅ קובץ: {act.get('path')}")
                    elif action == 'open_app':
                        os.system(f"start {act.get('app_name')}")
                        log.append(f"🚀 הפעלה: {act.get('app_name')}")
                    elif action == 'run_cmd':
                        res = subprocess.run(act.get('command'), shell=True, capture_output=True, text=True)
                        log.append(f"💻 פקודה: {act.get('command')}\n>> {res.stdout}")
                except Exception as e:
                    log.append(f"❌ שגיאה בביצוע {action}: {e}")
    
            return jsonify({'log': "\n".join(log)})
        except Exception as e:
            return jsonify({'log': f"Critical Error: {str(e)}"})
    
    @app.route('/api/knowledge/start', methods=['POST'])
    def start_knowledge():
        global stop_generation_flag
        stop_generation_flag = False
        data = request.json
        topic = data.get('topic')
        filename = f"{topic.replace(' ', '_')}_{int(time.time())}.html"
        filepath = os.path.join(KNOWLEDGE_DIR, filename)
        with open(filepath, "w", encoding="utf-8") as f:
            f.write(f"<h1 dir='rtl' style='text-align:center'>{topic}</h1><hr>")
        return jsonify({'filename': filename, 'path': filepath})
    
    @app.route('/api/knowledge/chunk', methods=['POST'])
    def generate_chunk():
        if not model_main:
            return jsonify({'status': 'error', 'summary': 'Missing API Key.'})
        if stop_generation_flag: return jsonify({'status': 'stopped'})
        data = request.json
        
        prompt = f'''
        Continue writing the knowledge base about: "{data.get('topic')}".
        Previous context: {data.get('context')}
        Write the next chapter in Hebrew (HTML format). High detail.
        '''
        try:
            response = model_main.generate_content(prompt)
            filepath = os.path.join(KNOWLEDGE_DIR, data.get('filename'))
            with open(filepath, "a", encoding="utf-8") as f:
                f.write(f"<div dir='rtl' style='margin:20px; font-family:sans-serif'>{response.text}</div>")
            return jsonify({'status': 'continue', 'content': response.text, 'summary': "פרק נוסף נכתב..."})
        except Exception as e:
            return jsonify({'status': 'error'})
    
    @app.route('/api/knowledge/stop', methods=['POST'])
    def stop_knowledge():
        global stop_generation_flag
        stop_generation_flag = True
        return jsonify({'status': 'stopping'})
    
    def run_flask_server():
        app.run(host='127.0.0.1', port=5000, debug=False, use_reloader=False)
    
    if __name__ == '__main__':
        server_thread = threading.Thread(target=run_flask_server, daemon=True)
        server_thread.start()
        
        time.sleep(1.5)
        
        qt_app = QApplication(sys.argv)
        qt_app.setStyleSheet("QMainWindow { background-color: #0f0f14; }")
        
        main_window = QMainWindow()
        main_window.setWindowTitle("JARVIS V5 ULTIMATE")
        main_window.resize(1280, 800)
        
        icon_path = os.path.join(ASSETS_DIR, "123.ico")
        if os.path.exists(icon_path):
            main_window.setWindowIcon(QIcon(icon_path))
            
        browser = QWebEngineView()
        browser.setUrl(QUrl("http://127.0.0.1:5000"))
        
        main_window.setCentralWidget(browser)
        main_window.show()
        
        sys.exit(qt_app.exec_())
    


  • CSSC

    זה גרסת בטא של תוכנת עריכת תמונות:
    יש מלא פונקציות ואני מתקשה לבחור מאיפה להתחיל עם כי זה לא הפונקציו המלאות! זה אך ורק גרסת בטא! בגרסה המלאה אני ישלב את כל המנועי AI ובעז"ה נגיע לפוטושופ 😉
    זה התכונות כרגע לא בפירוט:

    • חיתוך.
    • סיבוב.
    • מברשת מחיקה או ציור עם כל הצבעים
    • צורות.
    • הוספת תיבת טקסט עם כל הגופנים שמותקנים לכם על המחשב.
    • רקעים מיוחדים (צבעים מיוחדים יוצאי דופן) למילים או לתיבת טקסט.
    • עם / בלי מסגרת.
    • כל מיני אפקטי 3D למילים ולתיבות.
    • הסרת רקע עוד לא פעיל!
    • החלקת עור.
    • תיקון עינים.
    • הסרת רעש.
    • עריכת בהירות.
    • עריכת ניגודית.
    • עריכת רווית צבעים.
    • עריכת חשיפה.
    • עריכת חדות.
    • עריכת טמפרטורה.
    • פילטרים מהירים: שחור לבן, ספייה, היפוך, חמים, קריר וינטאג'.
    • הפיכת התמונה שתראה כאילו צוירה בעיפרון.
    • הפיכת התמונה כאילו היא ציור קומיקס.
    • אפקט HDR מרהיב.
    • טשטוש תנועה.
    • זיהוי קצוות.
    • היסטורית עריכה על מנת לבטל.

    תמונות:

    Symbol_for_photo_editing_software_202606191427.jpeg


    ed6a97cf-e21b-4946-b56d-6e690356d41f-image.jpeg
    2382a8a7-00a1-4867-a6e2-eeb6bdab7ab9-image.jpeg
    f8b5201e-d2e0-4343-bfbf-78f25d9088b7-image.jpeg
    35c1d2cb-e5e8-4339-9586-cde151a2abea-image.jpeg
    330263bf-b3ed-4ba0-9022-1f1df244b044-image.jpeg

    להורדה:

    פיקסלסי בטא - V1.0

    משום שהאנטי ווירוסים מצביעים על התוכנה כמסוכנת אני מעלה את הקוד אבל אני משאיר את כל הזכויות לי בלבד!

    המנוע:
    1.py
    מסך הפתיחה:
    1.html
    הממשק עצמו:
    2.html


  • מוקד המערכותמ

    ב"ה יצרתי אפליקצייה לפיצול מסכים בצורה נוחה וקלה.

    באפליקציה יש :

    • שמירת זוגות של אפליקציות,והצמדתם למסך הבית .
    • שינוי - עברית/אנגלית/ברירת מחדל של המערכת .
    • שירות הפעלה נגיש .

    להורדה :

    להורדה

    תהנו !

    תמונות:

    Screenshot_20260918-043704.png Screenshot_20260918-043726.png Screenshot_20260918-043750.png Screenshot_20260918-043800.png Screenshot_20260918-043814.png Screenshot_20260918-043840.png Screenshot_20260918-043917.png


  • ח

    לפני הכול, תודה רבה ל- רפי1 על הרעיון המלא.

    פיתחתי (בעזרת קלוד) את אפליקציית "הצ'אטים", המאגדת את החתול השחור, הגזרה ובזאר המציאות במקום אחד.

    עיקרי האפליקציה:

    ממשק פשוט ונוח: עיצוב נקי ונגיש ללא עומס של פונקציות.

    ניווט קל: שלושה טאבים בתחתית המסך למעבר מהיר בין הערוצים (בלחיצה או בגרירה הצידה).

    התחברות מהירה: מתחברים לחשבון הגוגל באחד הערוצים, ובאחרים בלחיצה אחת על "התחבר" ללא צורך בהזנת פרטים מחדש.

    התאמה לנטפרי: מותאמת באופן מלא לשימוש ברשת.

    מקווה שהאפליקציה תהיה שימושית😊

    אשמח לשמוע עצות לשיפור וייעול
    וכן על באגים (אם ישנם)

    להורדה מעוגן פליי
    ואגב אם אתם עוד לא רשומים לעוגן פליי אשמח שתרשמו מהקישור הזה, ותקבלו 10 מוניטין במתנה
    https://ogen-plei-qype.vercel.app/?ref=רוטב שום

    תמונות בספוילר


    icon_192.png
    Screenshot_20260906-122017.png
    Screenshot_20260906-122026.png
    Screenshot_20260906-122039.png
    99deea1e-eef0-4f46-bcf2-2e82d51b2134-image.jpeg
    בלחיצה על החץ אפשר לבחור
    האם רוצים שהחלק הזה יופיע כשמגיעים לסוף העמוד או שלא
    5d28c92c-6ee5-4778-8455-95906a0aaee3-image.jpeg


  • X

    "נטלינק" - פרויקט פשוט - לוח שיתופי לאתרים שפתוחים בנטפרי
    כל אחד יכול להעלות אתר ללוח, שיתווסף מיד לאחר אישור מנהל.
    (נבנה באמצעות AI)
    למעבר לנטלינק - בהרצה


  • X

    פלאש פוש תוסף מגניב לאלה שנושמים מבזקים בזמן אמת:
    מאות מבזקים בשעה בתוסף שמרכז את כל המבזקנים שפתוחים בנטפרי.
    להתקנה מחנות כרום היכנסו כאן
    להתקנה מextsync היכנסו כאן

    64e03e04-67cd-4ed9-a70b-0122c5799508-image.jpeg 64e03e04-67cd-4ed9-a70b-0122c5799508-image.jpeg

    icon128.jpeg


  • X

    יש לכם רעיון אבל אתם לא מפתחים?
    אתם מפתחים אבל אין לכם רעיון?
    כנסו>>
    https://xnet2.github.io/proyektim/


  • רפי סאםר

    למשתמשי נטפרי היקרים
    מי שנתקע בשימוש בפלואו לאחר העדכון החדש - שאי אפשר לשלוח סרטונים לבדיקה
    יצרתי תוסף שמעתיק את הקישור לסרטונים או לתמונות בתוך התפריט הנפתח החדש שלהם
    תמונות בספוילר
    תוסף העתקת קישור.zip

    e3cfea64-29b6-45fc-952e-0c21348fe17a-image.png 05360d08-cc1f-4c06-9a75-c9517189012d-image.png

    למי שצריך הסבר איך מתקינים
    מחלצים
    ואז נכנסים לקישור הזה chrome://extensions/
    ומפעילים מצב מפתח ולוחצים על טעינת פריט לא ארוז
    ואז בוחרים את התיקייה וטוענים
    מרעננים והתוסף מעודכן


  • X

    דף הבית ליוטיוב בנטפרי עם הערוצים שבמעקב, צפייה ישירה מתוך הדף. ללא הגבלה
    חובה להתקין את התוסף הזה מחנות כרום על מנת לאפשר שימוש חופשי ללא מגבלת טוקנים
    צילום מסך:

    image.jpeg

    למעבר לאתר

    • בקשות לשיפורים יתקבלו בברכה בשרשור>>>

  • CSSC
    מדריך קמפול Web ל EXE, עם אפשרות שינוי ה html - css - js ללא קמפול מחדש.

    שלב א':

    • יש ליצור תיקיה שהיא תהיה תיקית הפרויקט, ובתוכה ליצור תיקיה לדוגמה בשם:
      • web
    • בתוכה יש לשים את שלושת הקבצים לצורך הענין זה יהיה השמות שלהם:
      • index.html
      • style.css
      • script.js
    • תמונות ורקעים יש לשים בתוך תיקיה פנימית לדוגמה:
      • images
    • מחוץ לתיקית web יש לפתוח קובץ פייתון חדש, לדוגמה בשם:
      • main.py
        ויש לשים את סמל התוכנה מחוץ לתיקית web בתיקית הפרויקט לדוגמה בשם :
      • icon.ico
        יש לשים לב שהיא תהי תמונה מרובעת שלא תמרח

    מבנה התיקיות כרגע לפי הדוגמה


    • תיקית הפרויקט
      • main.py
      • icon.ico
      • web
        • index.html
        • style.css
        • script.js
        • images
          • bg.png

    כל אחד יתאים לפי המבנה שלו


    שלב ב':
    פתח cmd בתיקית הפרויקט והתקן את הספריות הבאות:

    • הפעל סביבה ווירטואלית:
    python -m venv venv
    
    • הפעל אותה:
    venv\Scripts\activate
    
    • התקן את PyWebView:
    pip install pywebview
    

    שלב ג'
    בתוך הקובץ: main.py יש לשים את הקוד הבא:

    import webview
    import os
    
    current_dir = os.path.dirname(__file__)
    web_folder = os.path.join(current_dir, 'web')
    
    webview.create_window('My App', web_folder)
    webview.start()
    

    שינויי אפשריים:

    • שם החלון 'My App' → אפשר לשנות לכל שם רצוי.

    • אם תוסיף תיקיות נוספות ב‑web, ודא שהנתיב נכון.


    שלב ד':
    קמפול ל exe ע"י הפקודה הבאה:

    pyinstaller --noconfirm --onefile --windowed --add-data "web;web" --icon "icon.ico" main.py
    

    כל אחד יתאים את זה לפי התיקיות שלו:


    החלקים הניתנים לעריכה:

    • לשנות לשמות אצלכם בפועל:
    main.py
    
    icon.ico
    
    web;web
    

    כנ"ל בקובץ ה main.py

    כל הקבצים שבתיקיית web יכולים להשתנות בלי צורך בקימפול מחדש

    בהצלחה.. שמחתי לעזור...